Difference between revisions of "AVR Embedded Tutorial - Entry Lazarus and Arduino/de"
m (Fixed template loop; wiki markup; syntax highlighting; added language category) |
|||
Line 1: | Line 1: | ||
− | {{ | + | {{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. ;-) | + | {{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 | + | |
− | Einen '''nicht aktuellen''' FPCUPdeluxe kann auch Schwierigkeiten machen. | + | 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: | + | * '''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. | + | * ''"Projekt --> Projekteinstellungen... --> Debuggen"'': Den Haken ''"Debugger-Information für GDB erzeugen"'' entfernen. |
− | * ''"Projekt --> Projekteinstellungen... --> Benutzerdefinierten Einstellungen --> Benutzerdefinierten Einstellungen'' noch '''-WpATMEGA328P''' eintragen. | + | |
+ | * ''"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
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
- FPCUPdeluxe:
- https://github.com/newpascal/fpcupdeluxe/releases - fpcupdeluxe zum Erstellen des AVR-Crosscompilers. ( Download: fpcupdeluxe-[OS] ).
- Arduino-Software:
- https://www.arduino.cc/en/Main/Software - Arduino-Software. Wird für avrdude gebraucht.
- Subversion:
- Ubuntu/Debian:
sudo apt-get install subversion
- SuSE:
sudo zypper install subversion
- Windows: Sollte von FPCUPdeluxe automatisch installiert werden, ansonsten hier downloaden und installieren.
- Ubuntu/Debian:
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.
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:
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.
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
- Übersichtseite AVR Embedded Tutorial
Autor: Mathias