Hallo Zusammen, Ich sitze gerade an der theorie eines projektes, bei dem ich gleich einmal auf ein problem stosse. ich möchte ein system aufbauen, dass mehrere komponenten über einen bus (ich denke es wird nen RS485 / 422) miteinander koppelt. in jedem gerät befindet sich ein µC (Atmel) der nachrichten von anderen teilnehmer empfangen und ggf. auch antworten kann. nunm uss ich hierfür jeden gerät (µC) eine ID verpassen. bis dahin erst einmal kein problem. nun stellt sich mir die frage, wie ich diese ID in jeden µC hinein bekomme. bisher habe ich solch eine ID mit in den FLASH geschrieben oder den EEPROM bemüht. beim FLASH habe ich aber durch die logisch immer andere ID das problem, dass ich bei jedem µC im Code den wert der ID ändern und dann neu compilieren muss. beim EEPROM sieht es da nicht anders aus, EEPROM-Datei nehmen, Wert der ID ändern, Intel-HEX Prüfsumme berechnen, speichern und dann ab in den µC damit. genau diese prozeduren sind mir zu lästig, sind zwar bei 5 oder 10 Stk noch nicht wirklich zeitraubend, aber man sucht ja immer nach wegen es besser zu machen. gegenwärtig programmiere ich überwiegend in assembler und verwende das AVR-Studio. hierüber programmiere ich dann auch die controller. nun die frage an die experten unter euch: gibt es eine einfachere variante, als die oben beschriebene, um die controller zu programmieren und gleichzeitig eine ID mit zu verpassen, oder muss ich auch weiterhin o.g. umständliche prozedur verwenden? ich denke dabei an arbeiten mit comandozeile (die ich noch nie verwendet habe und somit auch keinen plan zu parametern habe) oder gibts was effektiveres? für das stressen der hirnzellen ;-), danke ich euch schonmal im voraus. viele grüße nicky
@ Nicky (Gast) >bekomme. bisher habe ich solch eine ID mit in den FLASH geschrieben oder >den EEPROM bemüht. >nehmen, Wert der ID ändern, Intel-HEX Prüfsumme berechnen, speichern und >dann ab in den µC damit. AFAIK konnte das alte AVRISP eben genau das automatisch. Man musste nur eine Adresse angeben wo die ID reinsoll und es wurde nach jedem Programmierzyklus der Zähler eins hochgezählt. Gibts die Funktion noch im neuen AVR-Studio? (Kann ich nicht testen, ich hab nur 4 Widerstände am Parallelport und SP12 ;-) MFG Falk
Mäuseklavier an freie Port-Pins? Per Software & USART einstellbare ID? Ins Makefile übernehmen (s. Beitrag "build-Nummer beim kompilieren erzeugen (WinAVR)")?
Hallo Nicky, evtl. könnte man als Basis (Auslieferungszustand) die ID:0 annehmen und bei inbetriebnahme alle Geräte nacheinander anklemmen und dann über den Bus ein Commando zum wechseln der ID vergeben. Diese wird dann im EEProm gespeichert. Ein kleiner Taster oder Jumper auf der Schaltung könnte diese ID dann im Fehlerfall wieder auf 0 zurücksetzen, sodass eine neue ID vergabe möglich ist. Kann ja mal falsch eingegeben sein ;) Gruß, Tubie
@micha Mäuseklavier an freie Port-Pins? Per Software & USART einstellbare ID? Ins Makefile übernehmen (s. Beitrag "build-Nummer beim kompilieren erzeugen (WinAVR)")? hmm, also per mäuseklavier, find ich nicht wirklich schick, denn das ding nimmt nur platz weg, genau wie jumper. per usart und software, sowas habe ich auch schon gemacht, aber dann muss ich jedes gerät wieder selber programmieren, denn wenn ich das mit mehreren gleichzeitig mache, übernehmen ja alle diese ID. ins makefile????? guck ich gleich mal, ob ich schlau draus werde, danke
http://www.xs4all.nl/~sbolt/e-spider_prog.html#programmer SP12 kann einzelne Adressen schreiben und lesen, alles per Kommandozeile. MFG Falk
... oder noch einfacher, einen Taster, der, wenn er gedrückt ist eine ID änderung zulässt. Diese Änderung wird auf den Bus geworfen und das Gerät, dessen Taste gedrückt ist fängt die Meldung ab und ändert seine ID... gruß, Tubie
Hallo Tubie, genau da hab ich ja wieder das, was ich nicht möchte, dass ich später egal wie, an jeden gerät irgend etwas machen muss. diese variante habe ich schon per software und usart gemacht. wie gesagt, der controller soll einsatzbereit sein, wenn ich die programmiereung des FLASH abgeschlossen habe, und das ohne nachträglich programmierung, konfiguration oder wie auch immer. aber trotzdem danke
Dann muß schon vor der Programmierung eine ID vorhanden sein. Zb. eine Hardware ID mit einem Serialnumber Chip von Dallas Maxim. Gruß Hagen
Wenn Du eine hierarchische Busstruktur >hättest< könnten sich die Busteilnehmer automatisch selber durchnummerieren, aber so... ich finde das Patchen der finalen hex-datei mit jedem Programmiervorgang cool. Ist auch nicht sooo aufwendig.
Hallo zusammen, vielen Dank für eure Tip und Ideen! @Hagen hast du schon mal etwas mit diesen serialnumber chips gemacht? viele grüße nicky
Nö, ich würde es in Software machen und damit leben müssen das das Flashen des Programmes eben serialisiert werden muß. Falls ich also jemals eine Großserie bauen müsste dann gäbe es ein spezielles Brenngerät das das erledigt. Dieses Gerät würde auch einen Funktionstest der Produkte beinhalten. Aber deine Forderung besagt eben das du nichts an der Software serialisieren möchtest also bleibt nur noch die Hardware übrig, logisch oder. Dallas bietet diese Teile mit ganz unterschiedlichem Interface an, meistens 1-Wire. Also nimmst du einen der vielen 1-Wire-Master Sources, baust so einen Seriennummern Chip mit auf's Board und liest ihn aus. So kompliziert ist das nicht. Es gibt aber auch viele MCU zb. ARM7/9 Reihe verschiedener Hersteller die ebenfalls ihre Chips in der Produktion serialisieren. Viele der großen ARMs enthalten sogar Crypto-IP-Cores, die benötigen meistens immer eine Serialnummer bzw. vorgefertigte Passwörter. Eventuell also die MCU wechseln. Gruß Hagen
hallo hagen, vielen dank für deine ausführungen. wie gesagt, es geht hier nicht um die riesen serie (dann würd ich mir eh was anderes ausdenken, oder das an eine firma weitergeben, die eh schon die hardware haben und die software vor dem bestücken komplett drauf spielen), sondern wirklich nur darum was neues zu erkunden. es hätte ja sein können, dass es hierfür schon funktionen oder einfache tools gibt, mit denen man sich dann eben halt mal beschäftigt. fazit: solange es eben nur mal um 20 controllerprogrammierungen geht, werde ich wohl neu compilieren und flashen müssen. die variante, jedes gerät im nach hinein einzeln zu konfigurieren, hab ich schon durch und ist dann doch mehr arbeit als im code mal schnell die ID zu ändern und 3 buttons zu klicken ;-) nochmals vielen dank und schönes we PS: die seriennummer chips hatte ich schon einmal im visier, aber wegen nicht verwendung glatt wieder aus dem sinn verloren.
Warum nich per Jumper / DIP-Schalter oder direkt durch Beschaltung/Nichtbeschaltung von Ports? (Wenn du den notwendigen Platz und freie Ports hast)
Vielleicht nen Analogeingang nehmen, mußt dann nur beim Bestücken einen Widestand ändern. Nimmt kaum Platz weg.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.