amForth auf den Arduino Duemilanove aufspielen
Wie bekommt man das amForth auf den Arduino Duemilanove um das Morse-Programm laufen zu lassen. Dies sind die Schritte die ich für jedes Arduino-Board vor Beginn eines Workshops durchführe:
Schritt 1: den Programmer an das Arduino Board anschliessen
Ich benutze einen avrisp MKII Programmer (ca. 30 Euro) um den Arduino neu zu programmieren.
Sowohl der Programmer als auch das Arduino-Board müssen über USB mit Strom versorgt werden.
Schritt 2: Die "fuses" setzen
Dieser Schritt muss pro Board nur einmal durchgeführt werden, es schaded aber nicht, wenn dieser Schritt bei einem Board ausgeführt wird, welches schon einmal für amForth vorbereitet war- Das amForth benötigt eine ganz bestimmte Konfiguration der "Fuses" auf dem Arduino-Board (siehe amForth Handbuch). Geschrieben werden die Fuses mit avrdude unter Linux:
sudo avrdude -q -c avrispmkII -P usb -p atmega328p -U efuse:w:0x05:m \ -U hfuse:w:0xD9:m -U lfuse:w:0xFF:m avrdude: AVR device initialized and ready to accept instructions avrdude: Device signature = 0x1e950f avrdude: reading input file "0x05" avrdude: writing efuse (1 bytes): avrdude: 1 bytes of efuse written avrdude: verifying efuse memory against 0x05: avrdude: load data efuse data from input file 0x05: avrdude: input file 0x05 contains 1 bytes avrdude: reading on-chip efuse data: avrdude: verifying ... avrdude: 1 bytes of efuse verified avrdude: reading input file "0xD9" avrdude: writing hfuse (1 bytes): avrdude: 1 bytes of hfuse written avrdude: verifying hfuse memory against 0xD9: avrdude: load data hfuse data from input file 0xD9: avrdude: input file 0xD9 contains 1 bytes avrdude: reading on-chip hfuse data: avrdude: verifying ... avrdude: 1 bytes of hfuse verified avrdude: reading input file "0xFF" avrdude: writing lfuse (1 bytes): avrdude: 1 bytes of lfuse written avrdude: verifying lfuse memory against 0xFF: avrdude: load data lfuse data from input file 0xFF: avrdude: input file 0xFF contains 1 bytes avrdude: reading on-chip lfuse data: avrdude: verifying ... avrdude: 1 bytes of lfuse verified avrdude: safemode: Fuses OK avrdude done. Thank you.
Schritt 3: amForth Schreiben
Sind die Fuses richtig gesetzt, kann nun das amForth auf den Arduino programmiert werden:
sudo avrdude -q -c avrispmkII -P usb -p atmega328p -e -U flash:w:duemilanove.hex:i \ -U eeprom:w:duemilanove.eep.hex:i avrdude: AVR device initialized and ready to accept instructions avrdude: Device signature = 0x1e950f avrdude: erasing chip avrdude: reading input file "duemilanove.hex" avrdude: writing flash (32300 bytes): avrdude: 32300 bytes of flash written avrdude: verifying flash memory against duemilanove.hex: avrdude: load data flash data from input file duemilanove.hex: avrdude: input file duemilanove.hex contains 32300 bytes avrdude: reading on-chip flash data: avrdude: verifying ... avrdude: 32300 bytes of flash verified avrdude: reading input file "duemilanove.eep.hex" avrdude: writing eeprom (64 bytes): avrdude: 64 bytes of eeprom written avrdude: verifying eeprom memory against duemilanove.eep.hex: avrdude: load data eeprom data from input file duemilanove.eep.hex: avrdude: input file duemilanove.eep.hex contains 64 bytes avrdude: reading on-chip eeprom data: avrdude: verifying ... avrdude: 64 bytes of eeprom verified avrdude: safemode: Fuses OK avrdude done. Thank you.
An dieser Stelle sollte schon der amForth Prompt erscheinen, wenn der Arduino mit einem Terminalprogramm über die USB-serielle Schnittstelle angesprochen wird.
Schritt 4: weiteren Quellcode laden
Zum 'nackten' amForth wird nun noch einiges an Quellcode in den Arduino geladen. Hier benutze ich das "amforth-upload.py" Tool. Die Dateien sind:
- misc.frt - Einige nützliche Definitionen
- bitnames.frt - Wörter zum definieren von neuen Wörtern, die Ports per Namen ansprechen
- marker.frt - das Wort "marker", zum Setzen eine Lösch-Marke
- atmega328p.frt - die Definitionen für die Atmega 328P CPU
Diese Dateien sind Bestandteil von amForth, befinden sich aber auch in dieser ZIP-Datei.
amforth-upload.py -t /dev/ttyUSB0 lib/misc.frt lib/bitnames.frt lib/ans94/marker.frt ../amforth/releases/4.2/core/devices/atmega328p/atmega328p.frt lsof: WARNING: can't stat() fuse.gvfs-fuse-daemon file system /home/cas/.gvfs Output information may be incomplete. \ some definitions that may be useful ok > : erase ok 0 fill ok; ok > : .( \ (s -- ) ok [char] ) word count type ok; immediate ok > \ dump free ressources ok > : .res ok base @ >r ok decimal ok ver ." running at " f_cpu 1000 um/mod . drop ." kHz " cr ok ." free FLASH cells " unused u. cr [...]
Schritt 5: Programmieren …
Der Arduino ist nun vorbereitet und kann für den amForth Workshop, oder für jedes andere amForth Projekt, benutzt werden. Viel Spass!