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
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
... 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
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.
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.