Difference between revisions of "AVR Embedded Tutorial - Entry Lazarus and Arduino/de"
m |
|||
Line 11: | Line 11: | ||
* FPCUPdelux:<br>https://github.com/newpascal/fpcupdeluxe/releases fpcupdelux zum Erstellen des AVR-Crosscompilers.<br>Download: '''fpcupdeluxe-[OS]'''. | * FPCUPdelux:<br>https://github.com/newpascal/fpcupdeluxe/releases fpcupdelux zum Erstellen des AVR-Crosscompilers.<br>Download: '''fpcupdeluxe-[OS]'''. | ||
* Arduino-Software:<br>https://www.arduino.cc/en/Main/Software Arduino-Software. Wird für avrdude gebraucht. | * Arduino-Software:<br>https://www.arduino.cc/en/Main/Software Arduino-Software. Wird für avrdude gebraucht. | ||
− | * | + | * Subversion: |
** Ubuntu/Debian: <code>sudo apt-get install subversion</code> | ** Ubuntu/Debian: <code>sudo apt-get install subversion</code> | ||
** Windows: Wird nicht gebraucht. | ** Windows: Wird nicht gebraucht. | ||
Line 25: | Line 25: | ||
* ListBoxen links-oben '''FPC version''' und '''Lazarus version''' auf '''trunk''' stellen. | * ListBoxen links-oben '''FPC version''' und '''Lazarus version''' auf '''trunk''' stellen. | ||
* Mit '''[Install/update FPC+Laz]''' die Lazarus Basis-Trunk.Version bauen. | * Mit '''[Install/update FPC+Laz]''' die Lazarus Basis-Trunk.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_fpcupdelux''' entstanden sein. | Und es sollte auf dem Dekstop ein ein Icon '''Lazarus_fpcupdelux''' entstanden sein. | ||
====Hinweis:==== | ====Hinweis:==== | ||
− | Es könnte sein, | + | Es könnte sein, dass die SVNs Schwierigkeiten machen. Dann nicht verzagen und es zu einem späterem Zeitpunkt nochmals probieren. ;-) |
===AVR-Crosscompiler bauen:=== | ===AVR-Crosscompiler bauen:=== | ||
− | * Button '''[Setup+]''' drücken, um | + | * Button '''[Setup+]''' drücken, um einen Dialog mit weiteren Optionen zu öffnen. Dort folgendes einstellen: |
** CPU: '''avr''' | ** CPU: '''avr''' | ||
** OS: '''embedded''' | ** OS: '''embedded''' | ||
Line 44: | Line 44: | ||
* Button '''[Install cross-compiler]''' drücken, somit wird der Cross-Compiler gebaut. | * Button '''[Install cross-compiler]''' drücken, somit wird der Cross-Compiler gebaut. | ||
− | + | Wenn alles fehlerfrei gelaufen ist, FPCUPdelux beenden. | |
− | ==Erstes | + | ==Erstes Projekt== |
===Lazarus vorbereiten=== | ===Lazarus vorbereiten=== | ||
* Lazarus mit dem neunen Desktop-Icon (Lazarus_fpcupdelux) starten. | * Lazarus mit dem neunen Desktop-Icon (Lazarus_fpcupdelux) starten. | ||
Line 53: | Line 53: | ||
Lazarus sollte jetzt deutsch sein. | Lazarus sollte jetzt deutsch sein. | ||
− | === | + | ===Projekt erstellen und vorbereiten=== |
* ''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 60: | Line 60: | ||
** Zielprozessor (-Cp): '''AVR5''' | ** Zielprozessor (-Cp): '''AVR5''' | ||
− | * '' | + | * ''Projekt/Projekteinstellungen.../Debuggen'': den Haken ''Debugger-Information für GDB erzeugen '' entfernen.<br> |
− | * '' | + | * ''Projekt/Projekteinstellungen.../Benutzerdefinierten Einstellungen/Benutzerdefinierten Einstellungen'' noch '''-WpATMEGA328P''' eintragen.<br> |
− | * '' | + | * ''Projekt/Projekteinstellungen.../Compiler-Kommandos/Nachher ausführen'' |
** Haken '''Kompilieren''' und '''Neu kompilieren''' entfernen. | ** Haken '''Kompilieren''' und '''Neu kompilieren''' entfernen. | ||
** bei '''Befehl:''' eintragen:<br><code>/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 -D -Uflash:w:Project1.hex:i</code> | ** bei '''Befehl:''' eintragen:<br><code>/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 -D -Uflash:w:Project1.hex:i</code> | ||
====Hinweise:==== | ====Hinweise:==== | ||
− | * Die Pfade müssen noch | + | * Die Pfade müssen noch an die eigenen Installationen angepasst werden. |
====Empfehlungen:==== | ====Empfehlungen:==== | ||
− | *'' | + | *''Projekt/Projekteinstellungen.../Benutzerdefinierten Einstellungen/Benutzerdefinierten Einstellungen'' noch '''-al''' eintragen, dies erzeugt eine *.s-Datei, welche das Programm als ASM-Code enthält. <br> |
===Treiber installieren=== | ===Treiber installieren=== | ||
Line 75: | Line 75: | ||
====Windows:==== | ====Windows:==== | ||
Für original Arduinos werden die Treiber mit der Arduino-IDE mitgeliefert. | Für original Arduinos werden die Treiber mit der Arduino-IDE mitgeliefert. | ||
− | Bei Nachbauten ist es unter Umständen nötig Treiber zu installieren | + | 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:==== | ====Linux:==== | ||
Line 81: | Line 81: | ||
Dafür muss man meistens noch die COM-Ports(USB-UART) für die User frei geben. | Dafür muss man meistens noch die COM-Ports(USB-UART) für die User frei geben. | ||
− | Dies geschieht mit folgendem Befehl | + | Dies geschieht mit folgendem Befehl: |
<code>sudo adduser $USER dialout</code> | <code>sudo adduser $USER dialout</code> | ||
===Erstes Projekt starten=== | ===Erstes Projekt starten=== | ||
Dann sollte für ein erstes Blink-Programm (Source im nächsten Kapitel) nichts mehr im Wege stehen. Mit '''[Ctrl + Shift + F9]''' Programm kompilieren und | Dann sollte für ein erstes Blink-Programm (Source im nächsten Kapitel) nichts mehr im Wege stehen. Mit '''[Ctrl + Shift + F9]''' Programm kompilieren und | ||
− | hochladen. | + | hochladen. Wenn alles funktioniert hat, sollte die LED an Pin13 ca. alle 1 Sekunden blinken. |
===Start mit [F9]=== | ===Start mit [F9]=== | ||
− | + | Wenn man mit '''[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 | + | * ''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. | Somit kann man ganz normal mit '''[F9]''' hochladen und starten. | ||
− | Man muss dabei aber bedenken, | + | Man muss dabei aber bedenken, dass dann der Debugger auch unterbunden ist, wenn man dann mit Lazarus ein normales PC-Programm schreibt! |
==Verschiedene Sourcen für den Einstieg== | ==Verschiedene Sourcen für den Einstieg== | ||
Line 125: | Line 125: | ||
end.</syntaxhighlight> | end.</syntaxhighlight> | ||
===Serielle Ein/Ausgabe=== | ===Serielle Ein/Ausgabe=== | ||
− | Für die | + | Für die serielle Ausgabe wird ein Terminal mit folgenden Einstellungen gebraucht: |
* Baud Rate: ''9600'' | * Baud Rate: ''9600'' | ||
* Bits: ''8'' | * Bits: ''8'' |
Revision as of 00:14, 4 November 2017
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
- FPCUPdelux V1.4.0t
- svn 1.9.3
Unter Windows läuft dies mit ähnlicher Konfiguration.
Erforderliche Tools:
- FPCUPdelux:
https://github.com/newpascal/fpcupdeluxe/releases fpcupdelux 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
- Windows: Wird nicht gebraucht.
- Ubuntu/Debian:
- Arduino Uno oder Nano, am besten mit einem ATmega328p.
FPCUPdelux installieren:
- Den Download von FPCUPdelux 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 FPCUPdelux-GUI starten.
Mit FPCUPdelux Lazarus bauen:
Trunk bauen:
- ListBoxen links-oben FPC version und Lazarus version auf trunk stellen.
- Mit [Install/update FPC+Laz] die Lazarus Basis-Trunk.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_fpcupdelux entstanden sein.
Hinweis:
Es könnte sein, dass die SVNs Schwierigkeiten machen. Dann nicht verzagen und es zu einem späterem Zeitpunkt nochmals probieren. ;-)
AVR-Crosscompiler bauen:
- Button [Setup+] 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 Hauptfenster noch folgende CheckBoxen anwählen:
- CPU: avr
- OS: embedded
- Button [Install cross-compiler] drücken, somit wird der Cross-Compiler gebaut.
Wenn alles fehlerfrei gelaufen ist, FPCUPdelux beenden.
Erstes Projekt
Lazarus vorbereiten
- Lazarus mit dem neunen Desktop-Icon (Lazarus_fpcupdelux) starten.
- Tool/Options/General/Language Lazarus auf deutsch stellen.
- Mit [Ok] bestätigen und Lazarus neu starten.
Lazarus sollte jetzt deutsch sein.
Projekt erstellen und vorbereiten
- 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.
- 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 -D -Uflash:w:Project1.hex:i
Hinweise:
- Die Pfade müssen noch an die eigenen Installationen angepasst werden.
Empfehlungen:
- Projekt/Projekteinstellungen.../Benutzerdefinierten Einstellungen/Benutzerdefinierten Einstellungen noch -al eintragen, dies erzeugt eine *.s-Datei, welche das Programm als ASM-Code enthält.
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
Erstes Projekt starten
Dann sollte für ein erstes Blink-Programm (Source im nächsten Kapitel) nichts mehr im Wege stehen. Mit [Ctrl + Shift + F9] Programm kompilieren und hochladen. Wenn alles funktioniert hat, sollte die LED an Pin13 ca. alle 1 Sekunden blinken.
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!
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
until 1 = 2;
end.