Arduino progrmmiert Arduino, ist das möglich?

Hallo NG,
ich habe vor eine kleine Entwicklung zu machen, die nur direkt am zu steuernden System (600 km entfernt) getestet werden kann. Die Kollegen vor Ort haben keine Ahnung was Arduino ist, geschweige den, wie das Programm erneuert werden kann. Hier fehlt auch die Hardware (PC) vor Ort.

Nun kam mir folgende Frage: Ist es nicht möglich, mit einem Arduino einen zweiten zu programmieren?

Ich stelle mir das so vor: Neben der Hauptschaltung mit einem Arduino-Mega ist ein Arduino-Ethernet montiert. Auf der Ethernet-Version ist ja auch ein SD-Slot.
Nun Übertrage ich auf den Arduino-Ethernet (Netzupload) das neue Programm, welches auf die SD-Karte geschrieben wird. Danach sollte das Arduino-Ethernet die Arduino-Mega-Schaltung mit diesem Programm programmieren. Und fertig ist die Fernprogrmmierung.

Hat jemand so was schon mal gemacht? Weiß jemand, wo ich hierzu informationen finden kann?

Vielen Dank für jeden Tipp

mcGeorge

Machbar ist das definitiv. Jedoch dürfte das sehr aufwendig werden. Meines wissens nach gibt es sowas nicht. Es gibt zwar die ISP Sketches, die dann als ISP Programmer einen anderen AVR programmieren können, aber das ganze über Ethernet erfordert ein eigenes Protokol, damit du erstmal überhaupt an den programmierenden Arduino dran kommst.

Ich habe schon von Bootloadern für die Arduinos gehört, die dann beim booten sich ihr File von nem TFTP ziehen oder selbst nen kleinen TFTP-Server hosten. Aber das ist an der Stelle nicht sicher genug, das funktioniert nur so lange, wie der Arduino nicht hängen bleibt. Ein Watchdog würde ich an der Stelle auch nicht unbedingt empfehlen. Die Möglichkeit, dass dieser nicht sauber implementiert ist, bzw. dass beim Laden der Firmware etwas abbricht und dann nurnoch der Bootloader läuft und ein vermurkstes Binary ist gerade bei Übertragungen übers Internet nicht auszuschließen.

Das einfachste ist es ne kleine Linuxkiste an den Arduino zu hängen, die dann das flashen durchführt. Alles andere dürfte von der Entwicklugnszeit her unrentabel sein.

Also machbar ist das wie schon gesagt. Aber das wird dich, je nach Kenntnissstand fordern und vor allem ganz tief in die AVR Architektur bringen.

Ja, das ist richtig, hier komme ich bestimmt an meine Grenzen. (Ich komme aus der PIC und Windows-Welt)

Die Programmierung des Ethernetports mit dem schreiben des Programmes auf die SD, sehe ich nicht als das Problem an. Da bin ich mir sicher, dass hin zu bekommen.

Für die Programmierung des Mega, wollte ich eigentlich nicht die ISP-Schnittstelle nutzen. Ich dachte die USB-Schnittstelle, welche ja auch der PC nutzt ist am unkritischsten.
Oder bin ich auf dem falschen Dampfer und die USB-Schnittstelle ist eine ISP?

Wenn Du die USB-SChnittstelle benutzen willst dann brauchst Du an dem "Sender" Arduino einen USB-Host Anschluß.
Da würde siche in Arduino MEGA ADK mit zusätzlichen RAM (extendes RAM) anbieten.
Dann mußt Du aber noch einen Sketch programmieren der die Übertragung über USB gewährleistet.
Grüße Uwe

Das ist nicht notwendig. Die USB Schnitstelle ist nur ein virtueller COM Port. Wenn man hinter der USB Schnittstelle direkt an die TX/RX Pins geht, braucht man keinen USB Host. Das Problem ist aber weiterhin, dass die vom Arduino Bootloader verwendete Schnitstelle immernoch nicht einfach zu implementieren ist. Eine beschreibung des STK500 Protokolls (je nach Arduino kann es auch ein anderes sein) ist hier spezifiziert: http://www.atmel.com/Images/doc2591.pdf

Wie gesagt: Es gibt kleine Linux PCs für rund 180€. Das lässt du entweder über SD oder über eine kleine SSD booten und stellst die einfach dazu, dann kann dem Teil selbst in der übelsten Umgebung nichts mehr passieren.

hi,

würde sich da nicht der raspberry pi anbieten? linux mit ethernet und usb um 25€.
schau mal in wikipedia...

gruß stefan

und vielleicht kann der pi den arduino ersetzen. kommt drauf an, was er steuern soll. GPIO-anschlüsse hat er ja einige.

noch ein gruß, noch ein stefan

Wäre codebender.cc nicht eine gute Lösung?

chrisliebaer:
Das ist nicht notwendig. Die USB Schnitstelle ist nur ein virtueller COM Port. Wenn man hinter der USB Schnittstelle direkt an die TX/RX Pins geht, braucht man keinen USB Host. Das Problem ist aber weiterhin, dass die vom Arduino Bootloader verwendete Schnitstelle immernoch nicht einfach zu implementieren ist. Eine beschreibung des STK500 Protokolls (je nach Arduino kann es auch ein anderes sein) ist hier spezifiziert: http://www.atmel.com/Images/doc2591.pdf

Wie gesagt: Es gibt kleine Linux PCs für rund 180€. Das lässt du entweder über SD oder über eine kleine SSD booten und stellst die einfach dazu, dann kann dem Teil selbst in der übelsten Umgebung nichts mehr passieren.

Ok, seriell zu seriell ohne Umweg über USB ist eine Lösung; hab nicht daran gedacht.
Benutzt der Bootloader auch das STK500 Protokoll und nicht nur der ISP - Programmierer?
Grüße Uwe