Difference between revisions of "AVR Embedded Tutorial - Entry Lazarus and Arduino/de"

From Lazarus wiki
Jump to navigationJump to search
m (Fixed template loop; wiki markup; syntax highlighting; added language category)
Line 1: Line 1:
{{Translate}}
+
{{LanguageBar}}
  
 
=Einstieg Lazarus und Arduino=
 
=Einstieg Lazarus und Arduino=
  
 
==Lazarus mit AVR-Crosscompiler für Arduino Nano/Uno bauen==
 
==Lazarus mit AVR-Crosscompiler für Arduino Nano/Uno bauen==
 +
 
[[file:lazarus-avr.png|mini|right]]   
 
[[file:lazarus-avr.png|mini|right]]   
 
Das Tutorial wurde getestet mit:
 
Das Tutorial wurde getestet mit:
Line 15: Line 16:
 
Unter '''Windows''' werden die gleichen Tools verlangt, ausser des '''Linux Mint'''.
 
Unter '''Windows''' werden die gleichen Tools verlangt, ausser des '''Linux Mint'''.
  
==Erforderliche Tools:==
+
==Erforderliche Tools==
===Software:===
+
 
 +
===Software===
 +
 
 
* FPCUPdeluxe:
 
* FPCUPdeluxe:
 
** https://github.com/newpascal/fpcupdeluxe/releases - fpcupdeluxe zum Erstellen des AVR-Crosscompilers. ( Download: '''fpcupdeluxe-[OS]''' ).
 
** https://github.com/newpascal/fpcupdeluxe/releases - fpcupdeluxe zum Erstellen des AVR-Crosscompilers. ( Download: '''fpcupdeluxe-[OS]''' ).
Line 27: Line 30:
 
*** https://sourceforge.net/projects/win32svn/?source=typ_redirect
 
*** https://sourceforge.net/projects/win32svn/?source=typ_redirect
  
===Hardware:===
+
===Hardware===
 +
 
 
* Arduino Uno oder Nano, am besten mit einem ATmega328p.
 
* Arduino Uno oder Nano, am besten mit einem ATmega328p.
  
==FPCUPdeluxe installieren:==
+
==FPCUPdeluxe installieren==
 +
 
 
* Den Download von FPCUPdeluxe am besten in einen neuen leeren Ordner kopieren.
 
* Den Download von FPCUPdeluxe am besten in einen neuen leeren Ordner kopieren.
 
* Die kopierte Datei am besten im Datei-Manager mit einen Doppelklick starten. Unter Linux wird gefragt, ob die Datei ausführbar gemacht werden soll, dies mit '''Ja''' beantworten.
 
* Die kopierte Datei am besten im Datei-Manager mit einen Doppelklick starten. Unter Linux wird gefragt, ob die Datei ausführbar gemacht werden soll, dies mit '''Ja''' beantworten.
 
Dann sollte die FPCUPdeluxe-GUI starten.
 
Dann sollte die FPCUPdeluxe-GUI starten.
  
==Mit FPCUPdeluxe Lazarus bauen:==
+
==Mit FPCUPdeluxe Lazarus bauen==
 +
 
 
===Trunk bauen:===
 
===Trunk bauen:===
 
* ListBoxen links-oben '''FPC version''' und '''Lazarus version''' auf '''trunk''' oder '''embedded''' stellen. Ist beides im Reiter '''Basic'''.
 
* ListBoxen links-oben '''FPC version''' und '''Lazarus version''' auf '''trunk''' oder '''embedded''' stellen. Ist beides im Reiter '''Basic'''.
Line 42: Line 48:
 
Und es sollte auf dem Dekstop ein ein Icon '''Lazarus_fpcupdeluxe''' entstanden sein.
 
Und es sollte auf dem Dekstop ein ein Icon '''Lazarus_fpcupdeluxe''' entstanden sein.
  
{{Note|Es könnte sein, dass die SVNs Schwierigkeiten machen. Dann nicht verzagen und es zu einem späterem Zeitpunkt nochmals probieren. ;-) <br>
+
{{Note|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<br>
+
 
Einen '''nicht aktuellen''' FPCUPdeluxe kann auch Schwierigkeiten machen.<br>
+
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.
 
Wen etwas nicht klappt, kann man hier im englischenm Forum nachfragen, der Autor ist sehr hilfsbereit.
* https://forum.lazarus.freepascal.org/index.php/topic,34645.0.html
+
* https://forum.lazarus.freepascal.org/index.php/topic,34645.0.html}}
}}
 
  
 
===AVR-Crosscompiler bauen:===
 
===AVR-Crosscompiler bauen:===
 +
 
* Button {{keypress|Setup+}} im Reiter '''Cross''' drücken, um einen Dialog mit weiteren Optionen zu öffnen. Dort folgendes einstellen:
 
* Button {{keypress|Setup+}} im Reiter '''Cross''' drücken, um einen Dialog mit weiteren Optionen zu öffnen. Dort folgendes einstellen:
 
** CPU: '''avr'''
 
** CPU: '''avr'''
Line 68: Line 77:
 
* '''Windows:'''<br>Für original Arduinos werden die Treiber mit der Arduino-IDE mitgeliefert.<br>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.
 
* '''Windows:'''<br>Für original Arduinos werden die Treiber mit der Arduino-IDE mitgeliefert.<br>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.
  
* '''Linux:'''<br>Bei aktuellen Linux, zB. Mint / Ubuntu / Debian sind die Treiber schon installiert. (SusE müsste jemand testen)<br><br>Dafür muss man meistens noch die COM-Ports(USB-UART) für die User frei geben.<br>Dies geschieht mit folgendem Befehl:<br><syntaxhighlight lang="bash">
+
* '''Linux:'''<br>Bei aktuellen Linux, zB. Mint / Ubuntu / Debian sind die Treiber schon installiert. (SusE müsste jemand testen)<br><br>Dafür muss man meistens noch die COM-Ports(USB-UART) für die User frei geben.<br>Dies geschieht mit folgendem Befehl:
 +
 
 +
<syntaxhighlight lang="bash">
 
sudo adduser $USER dialout
 
sudo adduser $USER dialout
 
</syntaxhighlight>
 
</syntaxhighlight>
Line 75: Line 86:
  
 
===Lazarus auf deutsch===
 
===Lazarus auf deutsch===
 +
 
* Lazarus mit dem neuen Desktop-Icon (Lazarus_fpcupdeluxe) starten.
 
* Lazarus mit dem neuen Desktop-Icon (Lazarus_fpcupdeluxe) starten.
 
* ''"Tools --> Options --> General --> Language"'' Lazarus auf deutsch stellen, mit {{keypress|Ok}} bestätigen und Lazarus neu starten.  
 
* ''"Tools --> Options --> General --> Language"'' Lazarus auf deutsch stellen, mit {{keypress|Ok}} bestätigen und Lazarus neu starten.  
 +
 
Lazarus sollte jetzt deutsch sein.
 
Lazarus sollte jetzt deutsch sein.
  
 
===Start mit {{keypress|F9}}===
 
===Start mit {{keypress|F9}}===
 +
 
Wenn man mit {{keypress|F9}} starten will, kommt immer eine Fehlermeldung. Diese kann man unterbinden.
 
Wenn man mit {{keypress|F9}} starten will, kommt immer eine Fehlermeldung. Diese kann man unterbinden.
 
Bei Lazarus folgendes ändern:
 
Bei Lazarus folgendes ändern:
 
* ''"Werkzeuge --> Einstellungen... --> Tastaturbelegung --> Befehle aus dem Menu 'Start' --> Programm starten"'', auf ''Unbekannt'' stellen.
 
* ''"Werkzeuge --> Einstellungen... --> Tastaturbelegung --> Befehle aus dem Menu 'Start' --> Programm starten"'', auf ''Unbekannt'' stellen.
 
* ''"Werkzeuge --> Einstellungen... --> Tastaturbelegung --> Befehle aus dem Menu 'Start' --> Start ohne Debugger"'', die Haken bei ''Shift'' und ''Ctrl'' entfernen.
 
* ''"Werkzeuge --> Einstellungen... --> Tastaturbelegung --> Befehle aus dem Menu 'Start' --> Start ohne Debugger"'', die Haken bei ''Shift'' und ''Ctrl'' entfernen.
 +
 
Somit kann man ganz normal mit {{keypress|F9}} hochladen und starten.
 
Somit kann man ganz normal mit {{keypress|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!
 
Man muss dabei aber bedenken, dass dann der Debugger auch unterbunden ist, wenn man dann mit Lazarus ein normales PC-Programm schreibt!
  
 
===Codetools===
 
===Codetools===
 +
 
Es kann sein, das die Codetools, die Unit Atmega328p nicht findet. Dann ist folgender Schritt nötig:
 
Es kann sein, das die Codetools, die Unit Atmega328p nicht findet. Dann ist folgender Schritt nötig:
 
* ''"Werkzeuge --> FPC-Quelltextverzeichniss neu einlesen"''
 
* ''"Werkzeuge --> FPC-Quelltextverzeichniss neu einlesen"''
  
 
===Leserlicher ASM-Code Erstellung===
 
===Leserlicher ASM-Code Erstellung===
 +
 
Wen man die Source als Assembler-Code sehen will, ist folgender Schritt notwendig:
 
Wen man die Source als Assembler-Code sehen will, ist folgender Schritt notwendig:
 
*''"Projekt --> Projekteinstellungen... --> Benutzerdefinierten Einstellungen --> Benutzerdefinierten Einstellungen"'' noch '''-al''' eintragen, dies erzeugt eine *.s-Datei, welche das Programm als ASM-Code enthält. <br>
 
*''"Projekt --> Projekteinstellungen... --> Benutzerdefinierten Einstellungen --> Benutzerdefinierten Einstellungen"'' noch '''-al''' eintragen, dies erzeugt eine *.s-Datei, welche das Programm als ASM-Code enthält. <br>
  
 
===Fehlerhafte Optimierung===
 
===Fehlerhafte Optimierung===
 +
 
Ich habe schon erlebt, das das Programm nicht richtig funktionierte, weil der Compiler den Code fehlerhaft optimierte.
 
Ich habe schon erlebt, das das Programm nicht richtig funktionierte, weil der Compiler den Code fehlerhaft optimierte.
 
* Mit '''{$O-}''' am Programmanfang die Codeoptimierung ausschalten.
 
* Mit '''{$O-}''' am Programmanfang die Codeoptimierung ausschalten.
Line 102: Line 121:
  
 
===Neues Projekt erzeugen===
 
===Neues Projekt erzeugen===
 +
 
* ''"Datei --> neu... --> Einfaches Programm"'' - ein neues Project erstellen.
 
* ''"Datei --> neu... --> Einfaches Programm"'' - ein neues Project erstellen.
 
* ''"Projekt --> Projekteinstellungen... --> Konfiguration und Ziele"'' - folgendes einstellen:
 
* ''"Projekt --> Projekteinstellungen... --> Konfiguration und Ziele"'' - folgendes einstellen:
Line 108: Line 128:
 
** Zielprozessor (-Cp): '''AVR5'''
 
** Zielprozessor (-Cp): '''AVR5'''
  
* ''"Projekt --> Projekteinstellungen... --> Debuggen"'': Den Haken ''"Debugger-Information für GDB erzeugen"'' entfernen.<br>
+
* ''"Projekt --> Projekteinstellungen... --> Debuggen"'': Den Haken ''"Debugger-Information für GDB erzeugen"'' entfernen.
* ''"Projekt --> Projekteinstellungen... --> Benutzerdefinierten Einstellungen --> Benutzerdefinierten Einstellungen'' noch '''-WpATMEGA328P''' eintragen.<br>
+
 
 +
* ''"Projekt --> Projekteinstellungen... --> Benutzerdefinierten Einstellungen --> Benutzerdefinierten Einstellungen'' noch '''-WpATMEGA328P''' eintragen.
 +
 
 
* ''"Projekt --> Projekteinstellungen... --> Compiler-Kommandos --> Nachher ausführen"''
 
* ''"Projekt --> Projekteinstellungen... --> Compiler-Kommandos --> Nachher ausführen"''
 
** Haken '''Kompilieren''' und '''Neu kompilieren''' entfernen.
 
** Haken '''Kompilieren''' und '''Neu kompilieren''' entfernen.
Line 116: Line 138:
 
** '''Hinweis:''' Seit anfangs 2018 sind Arduino-Nanos mit neuen Bootloadern im Umlauf. Evtl. reicht es diesen Parameter zu ändern: ''-b115200 ''.<br>Mehr Infos hier:
 
** '''Hinweis:''' Seit anfangs 2018 sind Arduino-Nanos mit neuen Bootloadern im Umlauf. Evtl. reicht es diesen Parameter zu ändern: ''-b115200 ''.<br>Mehr Infos hier:
 
*** [https://forum.arduino.cc/index.php?topic=542414.0 Arduino-Forum]
 
*** [https://forum.arduino.cc/index.php?topic=542414.0 Arduino-Forum]
 
  
 
{{Note|Die Pfade müssen noch an die eigenen Installationen angepasst werden.<br><br>
 
{{Note|Die Pfade müssen noch an die eigenen Installationen angepasst werden.<br><br>
 
* Windows: Es muss zwingend averdude mit "'''.exe'''" sein, "'''averdude'''" alleine reicht nicht, auch wen es bei Arduino ohne .exe ist. }}
 
* Windows: Es muss zwingend averdude mit "'''.exe'''" sein, "'''averdude'''" alleine reicht nicht, auch wen es bei Arduino ohne .exe ist. }}
 +
 
{{Note|Der Com-Port wird unter Linux und Windows unterschiedlich bezeichnet:<br><br>
 
{{Note|Der Com-Port wird unter Linux und Windows unterschiedlich bezeichnet:<br><br>
 
* Linux: '''/dev/ttyUSBx''' oder '''/dev/ttyACMx'''
 
* Linux: '''/dev/ttyUSBx''' oder '''/dev/ttyACMx'''
 
* Windows: '''COMx'''}}
 
* Windows: '''COMx'''}}
 +
 
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.
 
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===
 
===Projekt starten===
 +
 
Dann sollte für ein erstes Blink-Programm (Source im nächsten Kapitel) nichts mehr im Wege stehen. Mit {{keypress|F9}} Programm kompilieren und hochladen. Wenn alles funktioniert hat, sollte die LED an Pin13 ca. alle 1 Sekunden blinken.
 
Dann sollte für ein erstes Blink-Programm (Source im nächsten Kapitel) nichts mehr im Wege stehen. Mit {{keypress|F9}} Programm kompilieren und hochladen. Wenn alles funktioniert hat, sollte die LED an Pin13 ca. alle 1 Sekunden blinken.
  
Line 131: Line 155:
  
 
===Pin13 Blinker===
 
===Pin13 Blinker===
<syntaxhighlight>
+
 
 +
<syntaxhighlight lang="pascal">
 
program Project1;
 
program Project1;
 
const
 
const
Line 161: Line 186:
  
 
===Serielle Ein/Ausgabe===
 
===Serielle Ein/Ausgabe===
 +
 
Für die serielle Ausgabe wird ein Terminal mit folgenden Einstellungen gebraucht:
 
Für die serielle Ausgabe wird ein Terminal mit folgenden Einstellungen gebraucht:
 +
 
* Baud Rate: ''9600''
 
* Baud Rate: ''9600''
 
* Bits: ''8''
 
* Bits: ''8''
Line 167: Line 194:
 
* Parity: ''none''
 
* Parity: ''none''
  
<syntaxhighlight>
+
<syntaxhighlight lang="pascal">
 
program Project1;
 
program Project1;
 
const
 
const
Line 213: Line 240:
 
     end;
 
     end;
 
   until 1 = 2;
 
   until 1 = 2;
end.</syntaxhighlight>
+
end.
 +
</syntaxhighlight>
  
 
===Einfacher Timer-Interrupt===
 
===Einfacher Timer-Interrupt===
 +
 
Pro Sekunde wird der Pin13 auf HIGH geschalten.
 
Pro Sekunde wird der Pin13 auf HIGH geschalten.
<syntaxhighlight>
+
 
 +
<syntaxhighlight lang="pascal">
 
program Project1;
 
program Project1;
 
const
 
const
Line 253: Line 283:
 
     // mache Irgendwas
 
     // mache Irgendwas
 
   until 1 = 2;
 
   until 1 = 2;
end.</syntaxhighlight>
+
end.
 +
</syntaxhighlight>
  
 
== Neuinstallation des OS ==
 
== Neuinstallation des OS ==
 +
 
* '''Linux:''' Wen man das OS neu installiert, reicht es nicht ein Backup des Cross-Compilers zurück zu spielen. Abhilfe: FPCUdelux nochmal drüber laufen lassen.
 
* '''Linux:''' Wen man das OS neu installiert, reicht es nicht ein Backup des Cross-Compilers zurück zu spielen. Abhilfe: FPCUdelux nochmal drüber laufen lassen.
 
* '''Windows:''' Unbekannt.
 
* '''Windows:''' Unbekannt.
  
 
== Schlusswort ==
 
== 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.<br>
 
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.<br>
 
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.
 
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==
 
==Danke==
 +
 
Das '''wichtigste''' zum Schluss:
 
Das '''wichtigste''' zum Schluss:
 
*<div style="background:yellow">'''Ein grosses Dankeschön an die Entwickler von FPCUPdeluxe !'''</div>  
 
*<div style="background:yellow">'''Ein grosses Dankeschön an die Entwickler von FPCUPdeluxe !'''</div>  
Line 269: Line 303:
  
 
== Siehe auch ==
 
== Siehe auch ==
 +
 
* Übersichtseite [[AVR Embedded Tutorial/de|AVR Embedded Tutorial]]
 
* Übersichtseite [[AVR Embedded Tutorial/de|AVR Embedded Tutorial]]
  
Line 276: Line 311:
 
[[Category:AVR]]
 
[[Category:AVR]]
 
[[Category:Arduino]]
 
[[Category:Arduino]]
 +
{{AutoCategory}}

Revision as of 03:37, 21 January 2020

Deutsch (de) English (en)

Einstieg Lazarus und Arduino

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

mini

Das Tutorial wurde getestet mit:

  • Linux Mint 18.2 64Bit
  • Arduino-IDE 1.8.5
  • FPCUPdeluxe V1.6.6e ( Sollte immer der neuste sein ! )
  • svn 1.9.3
  • FPC 3.1.1 ( erstellt mit FPCUPdeluxe )
  • Lazarus 1.9 ( erstellt mit FPCUPdeluxe )

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

Erforderliche Tools

Software

Hardware

  • Arduino Uno oder Nano, am besten mit einem ATmega328p.

FPCUPdeluxe installieren

  • Den Download von FPCUPdeluxe am besten in einen neuen leeren Ordner kopieren.
  • Die kopierte Datei am besten im Datei-Manager mit einen Doppelklick starten. Unter Linux wird gefragt, ob die Datei ausführbar gemacht werden soll, dies mit Ja beantworten.

Dann sollte die FPCUPdeluxe-GUI starten.

Mit FPCUPdeluxe Lazarus bauen

Trunk bauen:

  • ListBoxen links-oben FPC version und Lazarus version auf trunk oder embedded stellen. Ist beides im Reiter Basic.
  • Mit Install/update FPC+Laz die Lazarus Basis-Trunk/Embedded-Version 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.

Light bulb  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:

  • Button Setup+ im Reiter Cross drücken, um einen Dialog mit weiteren Optionen zu öffnen. Dort folgendes einstellen:
    • CPU: avr
    • OS: embedded
    • Cross Build Options Overide: -Cpavr5
    • Cross SubArch Overide: avr5
  • Dialog mit Ok beenden.
  • Im Reiter Cross noch folgende CheckBoxen anwählen:
    • CPU: avr
    • OS: embedded
  • Button Install compiler drücken, somit wird der Cross-Compiler gebaut.

Wenn alles fehlerfrei gelaufen ist, FPCUPdeluxe beenden.

Treiber installieren

  • Windows:
    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.
  • Linux:
    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:
sudo adduser $USER dialout

Lazarus vorbereiten

Lazarus auf deutsch

  • Lazarus mit dem neuen Desktop-Icon (Lazarus_fpcupdeluxe) starten.
  • "Tools --> Options --> General --> Language" Lazarus auf deutsch stellen, mit Ok bestätigen und Lazarus neu starten.

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:

  • "Werkzeuge --> Einstellungen... --> Tastaturbelegung --> Befehle aus dem Menu 'Start' --> Programm starten", auf Unbekannt stellen.
  • "Werkzeuge --> Einstellungen... --> Tastaturbelegung --> Befehle aus dem Menu 'Start' --> Start ohne Debugger", die Haken bei Shift und Ctrl entfernen.

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:

  • "Werkzeuge --> FPC-Quelltextverzeichniss neu einlesen"

Leserlicher ASM-Code Erstellung

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

  • "Projekt --> Projekteinstellungen... --> Benutzerdefinierten Einstellungen --> Benutzerdefinierten Einstellungen" noch -al eintragen, dies erzeugt eine *.s-Datei, welche das Programm als ASM-Code enthält.

Fehlerhafte Optimierung

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

  • Mit {$O-} am Programmanfang die Codeoptimierung ausschalten.

Erstes Projekt

Neues Projekt erzeugen

  • "Datei --> neu... --> Einfaches Programm" - ein neues Project erstellen.
  • "Projekt --> Projekteinstellungen... --> Konfiguration und Ziele" - folgendes einstellen:
    • Ziel-Betriebsystem (-T): Embedded
    • Ziel-CPU-Familie (-P): avr
    • Zielprozessor (-Cp): AVR5
  • "Projekt --> Projekteinstellungen... --> Debuggen": Den Haken "Debugger-Information für GDB erzeugen" entfernen.
  • "Projekt --> Projekteinstellungen... --> Benutzerdefinierten Einstellungen --> Benutzerdefinierten Einstellungen noch -WpATMEGA328P eintragen.
  • "Projekt --> Projekteinstellungen... --> Compiler-Kommandos --> Nachher ausführen"
    • Haken Kompilieren und Neu kompilieren entfernen.
    • Folgendes bei Befehl: eintragen:
      /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
      oder, siehe hier:
    • Hinweis: Seit anfangs 2018 sind Arduino-Nanos mit neuen Bootloadern im Umlauf. Evtl. reicht es diesen Parameter zu ändern: -b115200 .
      Mehr Infos hier:

Light bulb  Hinweis: Die Pfade müssen noch an die eigenen Installationen angepasst werden.

  • Windows: Es muss zwingend averdude mit ".exe" sein, "averdude" alleine reicht nicht, auch wen es bei Arduino ohne .exe ist.

Light bulb  Hinweis: Der Com-Port wird unter Linux und Windows unterschiedlich bezeichnet:

  • Linux: /dev/ttyUSBx oder /dev/ttyACMx
  • Windows: COMx

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

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:

  • Baud Rate: 9600
  • Bits: 8
  • Stopbits: 1
  • Parity: none
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.

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

  • Linux: Wen man das OS neu installiert, reicht es nicht ein Backup des Cross-Compilers zurück zu spielen. Abhilfe: FPCUdelux nochmal drüber laufen lassen.
  • Windows: Unbekannt.

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:

  • Ein grosses Dankeschön an die Entwickler von FPCUPdeluxe !

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

Siehe auch

Autor: Mathias