Sign in Join
Wiki copytemporary

AVR Embedded Tutorial - Entry Lazarus and Arduino/de

Deutsch · English

Einstieg Lazarus und Arduino

Lazarus mit AVR-Crosscompiler für Arduino Nano/Uno bauen

mini

Das Tutorial wurde getestet mit:

Unter Windows werden die gleichen Tools verlangt, ausser des Linux Mint.

Erforderliche Tools

Software

pascal
sudo apt-get install subversion
pascal
* SuSE:
pascal
sudo zypper install subversion
pascal
* Windows: Sollte von FPCUPdeluxe automatisch installiert werden, ansonsten hier downloaden und installieren. 
  * <https://sourceforge.net/projects/win32svn/?source=typ_redirect>

Hardware

FPCUPdeluxe installieren

Dann sollte die FPCUPdeluxe-GUI starten.

Mit FPCUPdeluxe Lazarus bauen

Trunk bauen:

Wenn alles ohne Fehler durchläuft bekommt man die aktuelle Trunk von FPC/Lazarus, normale Desktopanwendungen kann man mit dieser schon erstellen. Und es sollte auf dem Dekstop ein ein Icon Lazarus_fpcupdeluxe entstanden sein.

https://upload.wikimedia.org/wikipedia/commons/d/d8/Nuvola_apps_ktip.png Hinweis: Es könnte sein, dass die SVNs Schwierigkeiten machen. Dann nicht verzagen und es zu einem späterem Zeitpunkt nochmals probieren. ;-)

Was auch schon geholfen hat, FPCUPdeluxe zweimal hintereinander ausführen

Einen nicht aktuellen FPCUPdeluxe kann auch Schwierigkeiten machen.

Wen etwas nicht klappt, kann man hier im englischenm Forum nachfragen, der Autor ist sehr hilfsbereit.

AVR-Crosscompiler bauen:

Wenn alles fehlerfrei gelaufen ist, FPCUPdeluxe beenden.

Treiber installieren

Für original Arduinos werden die Treiber mit der Arduino-IDE mitgeliefert.
Bei Nachbauten ist es unter Umständen nötig, Treiber zu installieren. Meistens ist dies der 340-341-Driver. Ab Windows 10 sind auch diese Treiber dabei.

Bei aktuellen Linux, zB. Mint / Ubuntu / Debian sind die Treiber schon installiert. (SusE müsste jemand testen)

Dafür muss man meistens noch die COM-Ports(USB-UART) für die User frei geben.
Dies geschieht mit folgendem Befehl:

pascal
sudo adduser $USER dialout

Lazarus vorbereiten

Lazarus auf deutsch

Lazarus sollte jetzt deutsch sein.

Start mit F9

Wenn man mit F9 starten will, kommt immer eine Fehlermeldung. Diese kann man unterbinden. Bei Lazarus folgendes ändern:

Somit kann man ganz normal mit F9 hochladen und starten.

Man muss dabei aber bedenken, dass dann der Debugger auch unterbunden ist, wenn man dann mit Lazarus ein normales PC-Programm schreibt!

Codetools

Es kann sein, das die Codetools, die Unit Atmega328p nicht findet. Dann ist folgender Schritt nötig:

Leserlicher ASM-Code Erstellung

Wen man die Source als Assembler-Code sehen will, ist folgender Schritt notwendig:

Fehlerhafte Optimierung

Ich habe schon erlebt, das das Programm nicht richtig funktionierte, weil der Compiler den Code fehlerhaft optimierte.

Erstes Projekt

Neues Projekt erzeugen

/home/tux/Programme/arduino-1.8.5/hardware/tools/avr/bin/avrdude -C/home/tux/Programme/arduino-1.8.5/hardware/tools/avr/etc/avrdude.conf -v -patmega328p -carduino -P/dev/ttyUSB0 -b57600 -Uflash:w:Project1.hex:i

"C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avrdude.exe" -C "C:\Program Files (x86)\Arduino\hardware\tools\avr\etc\avrdude.conf" -v -patmega328p -carduino -b115200 -P COM3 -Uflash:w:project1.hex:i
oder, siehe hier:

/usr/bin/avrdude -c stk500v2 -p m16 -P/dev/ttyACM0 -b57600 -U flash:w:$Path($(OutputFile))$NameOnly($(TargetFile)).hex
ACHTUNG!!! Der hier zum Test verwendete µC ist ein ATMega16

Mehr Infos hier:

https://upload.wikimedia.org/wikipedia/commons/d/d8/Nuvola_apps_ktip.png Hinweis: Die Pfade müssen noch an die eigenen Installationen angepasst werden.

https://upload.wikimedia.org/wikipedia/commons/d/d8/Nuvola_apps_ktip.png Hinweis: Der Com-Port wird unter Linux und Windows unterschiedlich bezeichnet:

Als Empfehlung, würde ich dieses Projekt als Vorlage nehmen, und alle neuen Projekte auf dieser Aufbauen. Jedesmal das ganze bei einem neuen Projekt einzustellen, ist etwas mühsam.

Projekt starten

Dann sollte für ein erstes Blink-Programm (Source im nächsten Kapitel) nichts mehr im Wege stehen. Mit F9 Programm kompilieren und hochladen. Wenn alles funktioniert hat, sollte die LED an Pin13 ca. alle 1 Sekunden blinken.

Verschiedene Sourcen für den Einstieg

Pin13 Blinker

pascal
program Project1;
    const
      BP5 = 5;       // Pin 13 des Arduino
      dl  = 250000;  // Ungefähr 1/2 Sek.
    
      procedure delay(t: int32);
      var
        i: Int32;
      begin
        for i := 0 to t do begin
          asm
            nop;
          END;
        end;
      end;
    
    begin
      DDRB := DDRB or (1 shl BP5);          // Port auf Output schalten
      repeat
        PORTB := PORTB or (1 shl BP5);      // Port auf High
        delay(dl);                          // warten
    
        PORTB := PORTB and not (1 shl BP5); // Port auf Low
        delay(dl);                          // warten
      until 1 = 2;                          // Endlosschleife
    end.

Serielle Ein/Ausgabe

Für die serielle Ausgabe wird ein Terminal mit folgenden Einstellungen gebraucht:

pascal
program Project1;
    const
      CPU_Clock = 16000000; // Taktfrequenz Arduino, default 16MHz.
      Baud      = 9600;     // Baudrate
      Teiler    = CPU_Clock div (16 * Baud) - 1;
    
      procedure UARTInit;
      begin
        UBRR0 := Teiler;
    
        UCSR0A := (0 shl U2X0);
        UCSR0B := (1 shl TXEN0) or (1 shl RXEN0);
        UCSR0C := (%011 shl UCSZ0);
      end;
    
      procedure UARTSendChar(c: char);
      begin
        while UCSR0A and (1 shl UDRE0) = 0 do begin
        end;
        UDR0 := byte(c);
      end;
    
      function UARTReadChar: char;
      begin
        while UCSR0A and (1 shl RXC0) = 0 do begin
        end;
        Result := char(UDR0);
      end;
    
      procedure UARTSendString(s: ShortString);
      var
        i: integer;
      begin
        for i := 1 to length(s) do begin
          UARTSendChar(s[i]);
        end;
      end;
    
    begin
      UARTInit;
      repeat
        if UARTReadChar = #32 then begin
          UARTSendString('Hello World !'#13#10);
        end;
      until 1 = 2;
    end.

Einfacher Timer-Interrupt

Pro Sekunde wird der Pin13 auf HIGH geschalten.

pascal
program Project1;
    const
      BP5 = 5; // Pin 13 des Arduino
    
      procedure sei; assembler;
      asm
        Sei
      END;
    
      procedure Timer2_Interrupt; alias: 'TIMER2_OVF_ISR'; interrupt; public;
      const
        zaehler: integer = 0;
        cl = 16000000 div 1024 div 256 div 2; // 16'000'000Hz / Clock / TCNT / 2 = 0,5Sek
      begin
        Inc(zaehler);
        if zaehler = cl then begin
          PORTB := PORTB or (1 shl BP5);
        end;
        if zaehler >= cl * 2 then begin
          PORTB := PORTB and not (1 shl BP5);
          zaehler := 0;
        end;
      end;
    
    begin
      DDRB := DDRB or (1 shl BP5); // Pin 13 Output
    
      TCCR2A := %00;               // Normaler Timer
      TCCR2B := %111;              // Clock / 1024
      TIMSK2 := (1 shl TOIE2);     // enable timer2 overflow interrupt.
      sei();                       // Interrupts einschalten.
    
      repeat
        // mache Irgendwas
      until 1 = 2;
    end.

Neuinstallation des OS

Schlusswort

Für welche, die schon mit der Arduino-IDE programmiert haben, haben sicher festgestellt, das es dort sehr viele fertige Bibliotheken gibt. Man kann damit sehr einfach und schnell etwas coden, aber dafür ist dort sehr vieles verborgen.
Mit Lazarus muss man alles selbst machen und sich somit mit den Registern de AVRs auseinandersetzen. Dies hat aber auch einen grossen Vorteil, man weis, was man macht. Auch kann man so optimierteren Code erzeugen.

Danke

Das wichtigste zum Schluss:

Ohne dieses geniale Tool wäre AVR mit Lazarus immer noch eine Zangengeburt !

Siehe auch

Autor: Mathias


From the Free Pascal wiki, page "AVR Embedded Tutorial - Entry Lazarus and Arduino/de", as the Internet Archive kept it on 2024-11-10, last changed on 2020-12-25. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Revision 1, last changed by WikiArchive .

Edited on wiki.freepascal.org by 5 people, 2017–2020

From the official wiki's backup of 26 May 2024: who edited this page there, and when. Edits made there after that date were not recorded, and the earlier versions are not shown here; the main page says why.

WhenWhoWhat changed
MathiasCreated page
Mathias
MathiasErforderliche Tools
MathiasErforderliche Tools
MathiasArduino vorbereiten
MathiasLinux
MathiasProject erstellen und vorbereiten
MathiasStart mit F9 (minor)
MathiasLazarus vorbereiten
MathiasLazarus vorbereiten
MathiasAVR-Crosscompiler bauen
MathiasFPCUPdelux installieren
MathiasTrunk bauen
MathiasAVR-Crosscompiler bauen
MathiasProject erstellen und vorbereiten
MathiasLazarus mit AVR-Crosscompiler für Arduino Nano/Uno bauen
MathiasAVR-Crosscompiler bauen
MathiasSerielle Ein/Ausgabe
MathiasSerielle Ein/Ausgabe
MathiasErforderliche Tools
MathiasErforderliche Tools
MathiasProject erstellen und vorbereiten
MathiasMathias moved page Einstieg Lazarus und Arduino to Einstieg Lazarus und Arduino/de (minor)
MathiasTreiber installieren
MathiasSerielle Ein/Ausgabe
Billyraybones (minor)
MathiasLazarus mit AVR-Crosscompiler für Arduino Nano/Uno bauen
MathiasLazarus mit AVR-Crosscompiler für Arduino Nano/Uno bauen
MathiasMathias moved page Einstieg Lazarus und Arduino/de to AVR Embedded Tutorial - Entry Lazarus and Arduino/de (minor)
Mathias
Mathias
MathiasLazarus mit AVR-Crosscompiler für Arduino Nano/Uno bauen
MathiasLazarus mit AVR-Crosscompiler für Arduino Nano/Uno bauen
MathiasEinfacher Timer-Interrupt
MathiasHinweis
MathiasHinweise
MathiasProjekt erstellen und vorbereiten
MathiasPin13 Blinker
MathiasTrunk bauen
MathiasLazarus mit AVR-Crosscompiler für Arduino Nano/Uno bauen
MathiasLazarus mit AVR-Crosscompiler für Arduino Nano/Uno bauen
MathiasErstes Projekt
Mathias
MathiasEmpfehlungen
MathiasLinux
MathiasProjekt erstellen und vorbereiten
MathiasErforderliche Tools
MathiasErforderliche Tools
MathiasLinux
MathiasMit FPCUPdelux Lazarus bauen
MathiasSchlusswort
MathiasSchlusswort
MathiasSchlusswort
MathiasDanke
MathiasErforderliche Tools
MathiasErforderliche Tools
MathiasLazarus mit AVR-Crosscompiler für Arduino Nano/Uno bauen
MathiasTreiber installieren
MathiasErstes Projekt
MathiasProjekt erstellen und vorbereiten
Mathiasneues Projekt erzeugen
MathiasStart mit [F9]
MathiasLeserlicher ASM-Code Erstellung
Mathiasneues Projekt erzeugen
MathiasNeues Projekt erzeugen
MathiasTrunk bauen
MathiasTrunk bauen
Mathias
Mathias
MathiasLazarus mit AVR-Crosscompiler für Arduino Nano/Uno bauen
MathiasVerschiedene Sourcen für den Einstieg (minor)
MathiasStart mit [F9]
MathiasLazarus auf deutsch
MathiasStart mit {{keypress|F9}}
MathiasCodetools
MathiasLeserlicher ASM-Code Erstellung (minor)
MathiasNeues Projekt erzeugen (minor)
MathiasTreiber installieren
MathiasAVR-Crosscompiler bauen (minor)
MathiasTrunk bauen (minor)
MathiasTrunk bauen
MathiasLazarus auf deutsch (minor)
MathiasProjekt starten
MathiasProjekt starten
MathiasErforderliche Tools (minor)
MathiasLazarus auf deutsch (minor)
MathiasSchlusswort (minor)
MathiasSiehe auch (minor)
MathiasNeues Projekt erzeugen
MathiasStart mit {{keypress|F9}}
MathiasNeues Projekt erzeugen
MathiasNeues Projekt erzeugen
MathiasLazarus auf deutsch (minor)
MathiasNeues Projekt erzeugen (minor)
MathiasNeues Projekt erzeugen
Mathias (minor)
MathiasSchlusswort
MathiasSoftware (minor)
MathiasFPCUPdeluxe installieren (minor)
MathiasMit FPCUPdeluxe Lazarus bauen
MathiasLazarus auf deutsch (minor)
MathiasNeues Projekt erzeugen
MathiasTrunk bauen
MathiasNeues Projekt erzeugen
MathiasNeues Projekt erzeugen
MathiasTrunk bauen
MathiasLazarus mit AVR-Crosscompiler für Arduino Nano/Uno bauen
MathiasTrunk bauen
MathiasAVR-Crosscompiler bauen
MathiasAVR-Crosscompiler bauen
MathiasNeues Projekt erzeugen
MathiasErstes Projekt
TrevFixed template loop; wiki markup; syntax highlighting; added language category (minor)
FliegermichlAufruf von avrdude unter Windows hinzugefügt (minor)
VamLykTanErstes Projekt (minor)
VamLykTanNeues Projekt erzeugen

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.