Tutorial Arduino programmieren,

Antworten
Mathias
Beiträge: 6146
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Tutorial Arduino programmieren,

Beitrag von Mathias »

Ich sehe, du hast versucht die Arduino Software nachzubauen.

Ich hatte mal ein etwas komplexeres Project mit Arduino gebaut, dazu hatte ich TimerOne gebraucht.
Irgendwo im Project musste ich ein Serial.Write einfügen, welches in die Luft schrieb. Ohne diese Zeile hatte das Programm nicht funktioniert.

Wieso auch immer. :cry:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4864
Registriert: Fr 8. Apr 2011, 09:01

Re: Tutorial Arduino programmieren,

Beitrag von wp_xyz »

Andreas, genau sowas hatte ich mir vorgestellt und werde sicher darauf zurückkommen.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6197
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Tutorial Arduino programmieren,

Beitrag von af0815 »

Das Problem dabei ist, das man für verschiedene Projekte genaugenommen die Hardwarezugriffe synchronisieren muss. Da schliessen sich aber ein paar Sachen immer gegenseitig aus, weil ganz einfach nur sehr begrenzt Resourcen da sind.

Eigentlich wollte ich auf Basis dieser Kompenenten schauen, ob mal nicht Module von der Arduino Software direkt dazu assemblieren oder linken kann. Da ich schon länger nichts auf Maschinenebene gemacht habe, ist es ein interessantes Experiment. Ganz unbekannt ist die Materie für mich nicht, da ich schon die Z80 und die dazugehörige Hardware mit Assembler programmiert habe. Und Z80 mit einem Floppycontroller zu verstehen ist auch nicht unbedingt die einfachste Übung :-) Daher ist das wissen dazu schon mal da (Etwas eingerostet).

Ich hätte nur gerne mehr Zeit dafür :-)

Übrigends wäre es wirklich gut, wenn man die deutschen Tutorials ins englische Übersetzen könnte. Es gibt immer wieder AVR-Fragen im englischen Forum. Leider ist die aktuelle Wiki bei der Wartung von Übersetzungen nicht wirklich hilfreich. Zusatzmodule für die Wartung von Übersetzungen wurden abgelehnt. Scheinbar gibt es die alten Einträge in Mantis zur Wiki nicht mehr.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Tutorial Arduino programmieren,

Beitrag von Timm Thaler »

af0815 hat geschrieben:Das Problem dabei ist, das man für verschiedene Projekte genaugenommen die Hardwarezugriffe synchronisieren muss. Da schliessen sich aber ein paar Sachen immer gegenseitig aus, weil ganz einfach nur sehr begrenzt Resourcen da sind.


Ist in ASM nicht anders: Wenn ich den Timer für die Hardware-PWM benötige, kann ich ihn mit gleicher Frequenz noch als Taktgeber verwenden - aber halt nicht mit anderer Frequenz. Wenn ich den Hardware-TWI verwenden will - kann ich halt 2 der ADC-Eingänge nicht nutzen.

Das Problem verschärft Arduino nur, indem nicht sichtbar ist welche Ressourcen intern genutzt werden und wie die einander bedingen.

Der Hintergrund des flexiblen DigitalWrite ist ja, dass ich ein Display damit ansprechen kann - und egal an welche Pins ich das Display anklemme immer die gleiche Routine verwenden und nur die Pinzuordnungen ändere. Das hätte man auch low-level auf Konstantenebene machen können - aber nicht in C und mit der Einfachheit der Arduino-Routinen.

Mathias
Beiträge: 6146
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Tutorial Arduino programmieren,

Beitrag von Mathias »

Übrigends wäre es wirklich gut, wenn man die deutschen Tutorials ins englische Übersetzen könnte.
So wie es aussieht, macht das gerade Jemand.

Eigentlich wollte ich auf Basis dieser Kompenenten schauen, ob mal nicht Module von der Arduino Software direkt dazu assemblieren oder linken kann.
Es gibt do so ein Tool, welches C++ in Pascal umwandelt, Vielleicht hilft dies.

Ich habe mit folgendem Code mal probiert, die Pins Arduino kompatibel zu machen.
Das Beispiel ist für einen ATTiny2313, bei dem eine LED blinkt

Code: Alles auswählen

program Project1;
 
{$H-}
{$O-}
 
type
  TGPIOB = bitpacked record
    p9, p10, p11, p12, p13, p14, p15, p16: boolean;
  end;
 
  TGPIOD = bitpacked record
    p0, p1, p4, p5, p6, p7, p8, d0: boolean;
  end;
 
var
  GPIOB: bitpacked record
    PIN, DDR, PORT: TGPIOB;
  end
  absolute PINB;
 
  GPIOD: bitpacked record
    PIN, DDR, PORT: TGPIOD;
  end
  absolute PIND;
 
  procedure delay;
  var
    i: uint32;
  begin
    for i := 0 to 100000 do ;
  end;
 
begin
  // Setup
  GPIOB.DDR.p16 := True;
  GPIOB.PORT.p16 := False;
  repeat
    // Loop;
    GPIOB.PORT.p16 := not GPIOB.PORT.p16;
    delay;
  until False;
end.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6197
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Tutorial Arduino programmieren,

Beitrag von af0815 »

Mathias hat geschrieben:
Eigentlich wollte ich auf Basis dieser Kompenenten schauen, ob mal nicht Module von der Arduino Software direkt dazu assemblieren oder linken kann.
Es gibt do so ein Tool, welches C++ in Pascal umwandelt, Vielleicht hilft dies.

Nicht umwandeln, das war nicht meine Absicht, sondern einbinden bzw. dazulinken, notfalls als Assembler einbinden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Mathias
Beiträge: 6146
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Tutorial Arduino programmieren,

Beitrag von Mathias »

Nicht umwandeln, das war nicht meine Absicht, sondern einbinden bzw. dazulinken, notfalls als Assembler einbinden.

Meinst du so ähnlich, wie dazumal unter DOS mit den *.obj Dateien ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6197
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Tutorial Arduino programmieren,

Beitrag von af0815 »

In etwa so.

Entweder wie eine dll/so oder wie eine lib oder als eingefügter Quellcode. Irgendwie halt. Beim Arduino gehts ja auch.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Mathias
Beiträge: 6146
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Tutorial Arduino programmieren,

Beitrag von Mathias »

Funktionen in einer dll oder lib werden vom Programm erst zur Laufzeit geladen. Sie werden somit nicht in die EXE reinkompiliert. obj-Dateien werden reinkompiliert.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten