Strotmann.de
12 Dec 2011

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.

a5642706-0905-4e4a-a0f6-a99423568437.jpg

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!

Other posts
Creative Commons License
strotmann.de by Carsten Strotmann is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License .