Forum: Mikrocontroller und Digitale Elektronik gesucht wird eine einfache Art einer ID-Programmierung


von Nicky (Gast)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@ 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

von Micha (Gast)


Lesenswert?

Mäuseklavier an freie Port-Pins? Per Software & USART einstellbare ID? 
Ins Makefile übernehmen (s. 
Beitrag "build-Nummer beim kompilieren erzeugen (WinAVR)")?

von Tubie (Gast)


Lesenswert?

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

von Nicky (Gast)


Lesenswert?

@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

von Falk B. (falk)


Lesenswert?

http://www.xs4all.nl/~sbolt/e-spider_prog.html#programmer

SP12 kann einzelne Adressen schreiben und lesen, alles per 
Kommandozeile.

MFG
Falk

von Tubie (Gast)


Lesenswert?

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

von Nicky (Gast)


Lesenswert?

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

von Hagen R. (hagen)


Lesenswert?

Dann muß schon vor der Programmierung eine ID vorhanden sein. Zb. eine 
Hardware ID mit einem Serialnumber Chip von Dallas Maxim.

Gruß Hagen

von Chrisi (Gast)


Lesenswert?

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.

von nicky (Gast)


Lesenswert?

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

von Hagen R. (hagen)


Lesenswert?

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

von nicky (Gast)


Lesenswert?

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.

von mr.chip (Gast)


Lesenswert?

Warum nich per Jumper / DIP-Schalter oder direkt durch 
Beschaltung/Nichtbeschaltung von Ports? (Wenn du den notwendigen Platz 
und freie Ports hast)

von pripri (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.