Servus!
Nachdem ich mich schon relativ viel mit den RFM12-Funkmodulen
beschäftigt habe & auch schon selbst einen Versuch[1] gestartet habe,
einen Funk-Bootloader, der es ermöglicht mit einem an den PC
angeschlossenen Modul ein entferntes Modul komplett neu zu
programmieren, habe ich ein Projekt gefunden, bei welchem dies bereits
mit augenscheinlich viel dahinter realisiert wurde:
http://jeelabs.org/2012/10/31/meet-the-wireless-jeeboot/
http://jeelabs.net/projects/jeeboot/wiki/Design_Notes
Eigentlich bin ich ja nicht so der Fan von der Programmierung in C++ auf
einem AVR, aber da ich nur an der genannten Funktionalität interessiert
bin, habe ich mir gedacht, dass ich mir die 4KB Flash für den Bootloader
schon gönnen kann.
Ich habe jetzt schon einige Stunden versucht es zum Laufen zu bringen,
jedoch fehlt anscheinend eine Kleinigkeit, die ich nicht bedacht habe.
Die Hardware funktioniert, ich habe sie mit dem RF12demo, welches so wie
bei "test1" im ersten Link beschrieben (unter File -> Sketchbook ->
libraries -> JeeLib -> RF12 -> RF12demo) getestet.
http://jeelabs.org/2013/02/03/dijn-02-the-arduino-ide/
http://jeelabs.net/projects/cafe/wiki/First_steps
Meine Vorgehensweise war schlussendlich folgende:
Ich zweimal die Schaltung mit einem ATMega328P(16MHz Quarz), welcher
nach der aktuellen v6er Version der Platine mit einem RFM12 verdrahtet
ist aufgebaut.
http://jeelabs.net/projects/hardware/wiki/JeeNode
Fusebits: [2]
HIGH LOW EXT SEC
Original Arduino Pro Mini 5V 16MHz, alter Bootloader mit 57600 Baud:
DA FF FD CF
Server (Optiboot-Serieller Bootloader mit 115200 Baud -> RF12demo):
DE FF FD FC
Client (JeeBoot ohne Bootloader):
D8 4E FE FF
Beim Server habe ich zuvor Optiboot
1 | C:\Program Files (x86)\Arduino\hardware\arduino\bootloaders\optiboot\optiboot_atmega328.hex
|
draufgeflasht, um "bequem" direkt per Arduino IDE das RF12demo
aufzuprogrammieren.
Geht z.B. auch per
1 | avrdude -patmega328p -carduino -P\\.\COM4 -b115200 -Uflash:w:"RF12demo.hex":i
|
Beim Client habe ich die .hex-Datei von
https://github.com/jcw/jeeboot/tree/master/arduino/bootloader
sowie in einem weiteren Versuch die aktuellere, welche durch Ausführen
von make für die Files in dem Ordner entsteht, direkt per ISP
aufgeflasht.
Die alte .hex-Datei scheint so halbwegs mit der Gegenstelle
https://github.com/jcw/jeeboot/tree/master/arduino/testServer2
zu funktionieren, jedoch bleibt das bei Übertragung von ein paar Bytes
schon hängen.
Für den Server ist eine in Go-Programm am PC vonnöten, welches ich nur
unter Ubuntu zum Laufen bekam mit folgenden Befehlszeilen:
1 | sudo apt-get install go mercurial -y
|
2 | GOPATH=$HOME/go go get github.com/jcw/jeeboot/server/
|
3 | cd ~/go/src/github.com/jcw/jeeboot/server
|
4 | sudo GOPATH=$HOME/go go run main.go
|
Achja & um vielleicht zu verhindern, dass jemand, so wie ich, in die
Falle tippt, dass er durch Verwendung von RFM12er und eben nicht
RFM12B-Modulen keine Kommunikation zusammenbringt, hier sind die
Unterschiede aufgelistet:
http://jeelabs.org/2009/05/06/rfm12-vs-rfm12b-revisited/
Wobei die Zeile "RFM12 can only sync on the hex “2DD4″ 2-byte pattern"
ganz wichtig ist - sie bedeutet, dass man die group id auf 212(=0xD4)
lassen muss! Das gemeine an der Sache ist, dass dann zwar das Senden,
aber nicht das Empfangen funktioniert.
So, jetzt ist aus dem Beitrag wohl auch ein kleines Nachschlagewerk zum
Umgang mit dem Arduino-Bootloader geworden, aber dass kann
wahrscheinlich sicher mal jemand brauchen oder zumindest ich, wenn ich
mal die Fuses nachschlagen will. ;)
Hat sich schon jemand von Euch damit beschäftigt & sieht vielleicht
meinen Fehler auf den ersten Blick? Falls ich was vergessen habe zu
erwähnen bitte einfach nachfragen.
Schönen Gruß,
Daniel
PS.: Natürlich muss man erst die Arduino IDE installieren um die Files
in den C:\... Pfaden auffinden zu können:
http://arduino.cc/en/Main/Software
Die JeeLib Library ist natürlich auch vonnöten:
https://github.com/jcw/jeelib/archive/master.zip
[1] Beitrag "Re: Funkmodul RFM12 in Assembler"
Wenn alle Stricke reissen, werde ich wohl meinen .asm-Code nun endlich
nach Jahren fertigstellen... Passt dafür dann auch schon in einen
Tiny13!
[2] Was mich schon lange irritiert ist, dass die EXT-Fuse bei vielen
"Arduino-Projekten" ungültig ist, z.B. steht in
1 | C:\Program Files (x86)\Arduino\hardware\arduino\boards.txt
|
der Wert 0x05, welche nach dem wieder auslesen natürlich auf FD steht
beim Arduino Uno, welcher auch in der IDE einzustellen ist als
verwendetes Board.