Forum: Mikrocontroller und Digitale Elektronik Seriennummernproblem


von Christof K. (christof_k95)


Lesenswert?

Hallo!

Wir haben gerade ein Projekt am laufen bei dem bei einer elektronischen 
Abstimmung bis zu 100 Handsender an einen Empfänger ihre Stimme senden 
sollen.
Natürlich müssen bei den Sendegeräten eine eineindeutige 
Seriennummernvergabe vorhanden sein damit keine Fehler auftreten.
Wir haben uns bereits ein wenig über dieses Thema informiert und auch 
schon
1-Wire-Devices oder ID-Chips in Erwägung gezogen, da wir jedoch nicht 
die besten Programmierer sind, haben wir uns gedacht, dass wir einfach 
einen 8 poligen Dip-Schalter einbauen, die Seriennummer manuell 
einstellen und diese dann einlesen und als Dezimalzahl mitsenden.

Was haltet ihr von der Idee?
Bzw habt ihr bessere?

Danke schonmal im vorraus.

mfg

von Cyblord -. (cyblord)


Lesenswert?

Absoluter Humbug eine FESTE Seriennummer per DIP Schalter zu 
realisieren.
Dann noch lieber Löt-Jumber auf der Platine, dann kann sie a.) nicht so 
leicht ändern und b.) zahlt man nicht auch noch ein Bauteil mit.

Einfacher wäre es, die Nummer direkt bei der Programmierung ins Flash 
oder EEPROM oder wo auch immer hin zu speichern.
1-Wire Seriennummern gehen natürlich auch. Kosten aber extra.

Aber was ist das bitte für eine armselige Ansage, dass ihr nicht die 
besten Programmierer seid? Wie habt ihr dann überhaupt das Programm für 
euer Gerät gemacht? Das passt doch nicht zusammen. Klingt wieder mal 
nach Elektroniker-Lego ala Arduino. Wir haben da xyz gemacht aber keine 
Ahnung davon weil wir nur zusammenstecken und fertigen Code benutzen.


gruß cyblord

von Ralf G. (ralg)


Lesenswert?

Christof K. schrieb:
> dass wir einfach
> einen 8 poligen Dip-Schalter einbauen, die Seriennummer manuell
> einstellen

Wo dann jeder dran 'rumspielen' kann? :-/
Als mechanische Lösung würde ich evtl. die eigentliche 
DIP-Schalter-Einstellung direkt verlöten.

von sebi707 (Gast)


Lesenswert?

Theoretisch kann man das schon machen. Man könnte auch individuelle 
Seriennummern beim Programmieren in einen EEPROM schreiben. Gegenüber 
den ID Chips hat es aber den Nachteil, dass man trotzdem gleiche IDs 
vergeben kann. Je nach Erreichbarkeit des DIP Schalters würde ich mir 
auch sorgen machen, dass da mal ein Spaßvogel dran rumspielt.

von Karl H. (kbuchegg)


Lesenswert?

cyblord ---- schrieb:
> Absoluter Humbug eine FESTE Seriennummer per DIP Schalter zu
> realisieren.
> Dann noch lieber Löt-Jumber auf der Platine, dann kann sie a.) nicht so
> leicht ändern und b.) zahlt man nicht auch noch ein Bauteil mit.

Oder die Umkehrung.
8 Leiterbahnen, die man gezielt mit dem Messer durchtrennt.

von Ralf G. (ralg)


Lesenswert?

Karl Heinz schrieb:
> 8 Leiterbahnen, die man gezielt mit dem Messer durchtrennt.
Oder ohne abrutschen ;-)
Vias auf die Leiterbahnen und entsprechend aufbohren.

von eagle user (Gast)


Lesenswert?

weil es "nur ein paar Stück" werden sollten, hab' ich mal die Seriennr. 
fest ins Programm eingebaut, also in ein serialno.h. Mit "make flash" 
wird die von einem Script hochgezählt, der Compiler und dann das 
Flash-Programm gestartet. Das funktioniert bei inzwischen 220 Stück 
immer noch ;)

von Achim (Gast)


Lesenswert?

Leiterbahnen zertrennen ist mMn. quatsch, ein Fehler und es stimmt doch 
was nicht. Klar man kann die auch noch aufkratzen und wieder brücken, 
aber das sieht nach pfusch aus.

Welchen µC benutzt ihr? Könnt ihr nicht dessen Interne ID nutzen?

von dunno.. (Gast)


Lesenswert?

eagle user schrieb:
> weil es "nur ein paar Stück" werden sollten, hab' ich mal die Seriennr.
> fest ins Programm eingebaut, also in ein serialno.h. Mit "make flash"
> wird die von einem Script hochgezählt, der Compiler und dann das
> Flash-Programm gestartet. Das funktioniert bei inzwischen 220 Stück
> immer noch ;)

Ich würde einfach direkt das Hexfile manipulieren, das ich Flashe. Musst 
dir halt die Adresse freihalten, an der die Seriennummer stehen soll.

Einfacher gehts nicht.

Du willst ja nicht 100*8 Jumper konfigurieren..

von Thomas Z. (thomas_z41)


Lesenswert?

Die Methode mit dem geringsten Aufwand ist der 1-wire Baustein.
Kostet halt 1,50€ und ist einmal etwas Aufwand eine 1-wire Bibliothek zu 
suchen, aber das war es dann.
Dann kann dir auch kein Fehler mit einer doppelt vergebenen Seriennummer 
passieren.

von Dennis (Gast)


Lesenswert?

Wenn ihr ein uC von ST eingebaut habt: diese haben schon einen eigenen 
Seriennummer...

von Bastler (Gast)


Lesenswert?

Die Seriennummern von Controllern oder anderen Bausteinen müssen aber 
auch erst an der Auswertezentrale eingelernt werden. Da ist es einfacher 
Sender zu haben die nur 0-99 senden.

von ...-. (Gast)


Lesenswert?

> Kostet halt 1,50€

bei Reichelt kosten die bloss 29 Cent: 24AA02E64-I/SN und Du bekommst 
sogar 2-wire ;)

von Fritz (Gast)


Lesenswert?

Christof K. schrieb:
> da wir jedoch nicht
> die besten Programmierer sind

Was soll das heißen? Seid ihr nicht in der Lage, die Seriennummer aus 
einem fertigen Bauteil für diesen Zweck (z.B. DS28CM00) per I²C 
auszulesen? Oder per 1-wire, z.B. DS2401? Dann frage ich mich 
allerdings, wie ihr den Rest des Projekts hinbekommt. Einen DIP-Schalter 
könnnt ihr ja offensichtlich auslesen ...

Was spricht dagegen, allen Handsendern manuell eine Seriennummer in 
einen bestimmt irgendwo vorhandenen nichtflüchtigen Speicher 
einzuprogrammieren? Der Aufwand kann es kaum sein - die DIP-Schalter 
müsste man schließlich auch einstellen.


Kurz: Ohne Information, was ihr könnt (nicht was ihr nicht könnt) und 
welche weiteren Randbedingungen hier einfache und naheliegende Lösungen 
verhindern, wird euch kaum zu helfen sein.

von Cyblord -. (cyblord)


Lesenswert?

...-. schrieb:
>> Kostet halt 1,50€
>
> bei Reichelt kosten die bloss 29 Cent: 24AA02E64-I/SN und Du bekommst
> sogar 2-wire ;)

D.h. nur 14,5 cent pro Wire!!

von Uwe Bonnes (Gast)


Lesenswert?

Aktuelle Kontroller wie die STM32 haben schon selbst eine eindeutige 
Nummer...

von MaWin (Gast)


Lesenswert?

Christof K. schrieb:
> 1-Wire-Devices oder ID-Chips in Erwägung gezogen, da wir jedoch nicht
> die besten Programmierer sind, haben wir uns gedacht, dass wir einfach
> einen 8 poligen Dip-Schalter einbauen, die Seriennummer manuell
> einstellen und diese dann einlesen und als Dezimalzahl mitsenden.

Wer lötet denn eure Handsender zusammen ?
Ihr selber ?
Dann könnt ihr statt DIP Schaltern auch Lötbrücken setzen.

Und wenn ihr bestücken lasst, dann werden 8 Drahtbrücken gesetzt.

Oder man baut einem Spannungsteiler aus 2 Widerständen und liest den 
Wert per A/D Wandler, da kann die Bestückungssoftware die Werte aus den 
vorhandenen auswürfeln.
Ist nur 1 vorhanden, kann man wiederum 7 davon bestücken/nicht 
bestücken.

von sebi707 (Gast)


Lesenswert?

MaWin schrieb:
> Oder man baut einem Spannungsteiler aus 2 Widerständen und liest den
> Wert per A/D Wandler

Klingt nach einer wenig zuverlässigen Methode, wenn man will das sich 
die IDs nicht ändern und überall unterschiedlich sind.

von Nop (Gast)


Lesenswert?

Uwe Bonnes schrieb:
> Aktuelle Kontroller wie die STM32 haben schon selbst eine eindeutige
> Nummer...

Die sind aber meist sehr groß. Oftmals 96 bis 128Bit!
Willst Du die bei jedem Telegram mitschicken wenn du von Anfang an 
weist, dass es nur 100 Handsender sind?

Hätte auch Lötjumper oder DIP-Switches genommen.
Je nach dem wie oft sie gewechselt werden sollen.

Ins Flash schreiben, hat für mich schon wieder was in Richtung UID.

von Christof K. (christof_k95)


Lesenswert?

Hallo, danke für die vielen Antworten :)

cyblord ---- schrieb:
> Aber was ist das bitte für eine armselige Ansage, dass ihr nicht die
> besten Programmierer seid?

Mit nicht die besten Programmierer hab ich gemeint dass wir noch 
Anfänger sind, aber Hilfe bekommen falls wir sie wirklich brauchen.
Aber es ist eh alles in den Datenblättern gut dokumentiert.



sebi707 schrieb:
> Je nach Erreichbarkeit des DIP Schalters würde ich mir
> auch sorgen machen, dass da mal ein Spaßvogel dran rumspielt.

Herumspielen würden an den Schalter  keiner weil sie in einem Gehäuse 
verpackt werden. und wenn jemand mit dem Schraubenzieher anfängt 
rumzuspielen wird das schon auffallen :)


Ich glaube wir werden die IDs einfach von 0 bis 99 in den Speicher 
einprogrammieren, wird nicht mehr Aufwand sein als die ganzen 
Dip-Schalter einzustellen und billiger ist es auch.



Fritz schrieb:
> Kurz: Ohne Information, was ihr könnt (nicht was ihr nicht könnt) und
> welche weiteren Randbedingungen hier einfache und naheliegende Lösungen
> verhindern, wird euch kaum zu helfen sein.

Hoffe aber doch dass wir nicht ganz versagen werden ;)


mfg christof

von Guido C. (guidoanalog)


Lesenswert?

Hallo,

Christof K. schrieb:
> Ich glaube wir werden die IDs einfach von 0 bis 99 in den Speicher
> einprogrammieren, wird nicht mehr Aufwand sein als die ganzen
> Dip-Schalter einzustellen und billiger ist es auch.

Nicht vergessen, die Speicher nach dem Programmieren entsprechend zu 
beschriften ;-)

Mit freundlichen Grüßen
Guido

von Carsten R. (kaffeetante)


Lesenswert?

Ralf G. schrieb:
> Oder ohne abrutschen ;-)

Oh! All das viele Bluuuut....

Ok das mit den durchrennten Leiterbahnen ist weit verbreitet. Aber mit 
dem Messer?

Die Lösung die Nummern zu speichern wäre auch mein Favorit. Ich hoffe 
man vergißt beim Programmieren nicht die Nummer bei jedem Gerät zu 
ändern.^^

@Christof

Wird das eine eimalige Sache? Nur mal so gefragt ob 100 bzw 256 IDs 
dauerhaft ausreichen. Wenn man später mehrere Sendersets mit jeweils bis 
zu 100 Teilnehmern hat, so sollen die vermutlich nicht durcheinander 
geraten können.

: Bearbeitet durch User
von Christof K. (christof_k95)


Lesenswert?

Carsten R. schrieb:
> Wird das eine eimalige Sache? Nur mal so gefragt ob 100 bzw 256 IDs
> dauerhaft ausreichen. Wenn man später mehrere Sendersets mit jeweils bis
> zu 100 Teilnehmern hat, so sollen die vermutlich nicht durcheinander
> geraten können.

ja die 100 Stück sind schon großzügig gewählt, wahrscheinlich werden 
nicht mehr als 90 gleichzeitig verwendet, aber eine zweite Garnitur von 
Sendern + Empfänger ist nicht geplant. :)

mfg Christof

von Kurt B. (kurt-b)


Lesenswert?

Guido C. schrieb:

>
> Nicht vergessen, die Speicher nach dem Programmieren entsprechend zu
> beschriften ;-)
>

Wir haben das auch so gemacht und die Nummer ins 
Edelstahlgehäuseeingeschlagen.
Beim Progen steht die Nummer schon am Gehäuse und braucht dann nur noch 
ins Flash geschrieben werden.
Verwendet wurden zwei Byte, da ist dann auch noch Platz für die 
Projektnummer und Jahreszahl.

 Kurt

von stefan us (Gast)


Lesenswert?

Du könntest beim ersten Programmstart eine Zufallszahl (mit recht vielen 
Bits) erzeugen und ins EEprom ablegen.

von Carsten R. (kaffeetante)


Lesenswert?

^^ Der war gut

heraus kommt:
42, 23.... und immer abwechselnd 42 und 23

von stefan us (Gast)


Lesenswert?

> mit recht vielen Bits

Je mehr Bits die Zahl hat, umso unwarscheinlicher werden duplikate. ich 
dachte dabei an wenigstens 32 Bit.

von Fritz (Gast)


Lesenswert?

Überleg dir mal, woher du die Zufallszahlen bekommen willst. Danach 
verstehst du den "Witz" von Carsten.

von Cyblord -. (cyblord)


Lesenswert?

In der Tat gehen die meisten Foristen davon aus, dass der TE zwingend 
eine "Kanalnummer" zwischen 0 und 99 haben möchte. Allerdings hat der TE 
selbst, ID-Chips mit langer eindeutiger Kennung ins Spiel gebracht, und 
nur wegen fehlender Programmierkentnisse verworfen. Also wird doch eher 
eine lange UID gesucht. Grundsätzlich hat sowas Vorteile weil es keine 
Verwechslungen gibt. Erfordert aber natürlich ein Einlernen (ähnlich wie 
bei Garagentoröffnern usw.).

Bei nur sehr wenigen realen Geräten, macht eine gute Zufallszahl als 
solche Kennung durchaus Sinn. Das Risiko einer Doppelbelegung ist bei 32 
Bit oder mehr verschwindend gering. Und man spart sich (ähnlich wie bei 
Verwendung von ID-Chips) eine Speicherung der letzten ID.


gruß cyblord

von Christof K. (christof_k95)


Lesenswert?

stefan us schrieb:
> Du könntest beim ersten Programmstart eine Zufallszahl (mit recht vielen
> Bits) erzeugen und ins EEprom ablegen.

Gute Idee aber bei meinem Glück hab ich da ne ID doppelt :DD

von Nitram L. (nitram)


Lesenswert?

Ich würde einen oneWire Chip draufmachen und gut ist.

Das anlernen der Seriennummern ist auch nicht nötig.
Es gibt 100 Sender, die alle unterschiedliche SN haben.
Ziel ist es doch zu erkennen wie viele senden.
Das bekommt man so auch raus. Und wenn mal einer defekt ist, einfach den 
nächsten Sender austeilen - fertig...

nitraM

von oszi40 (Gast)


Lesenswert?

Gespeichertes Datum + (sekundengenaue Uhrzeit statt Nummer) löst auch 
manches Garantie- und Versionsproblem?

von Vlad T. (vlad_tepesch)


Lesenswert?

einfach auf alle die gleiche Software flashen.
Bei der ersten Kommunikation mit dem Master (in einem speziellen 
Anlernmodus) teilt dieser dem Handgerät eine ID mit, die das Gerät ins 
Eeprom schreibt.
In dieser Phase kann man dann auch gleich den Schlüsselaustausch machen, 
um im Produktiveinsatz die Kommunikation abzusichern (Verschlüsselung + 
Signatur um Fälschung zu vermeiden).

: Bearbeitet durch User
von Carsten R. (kaffeetante)


Lesenswert?

Man benutzt keine Zufallszahlen für Seriennummern! Seriennummern haben 
eindeutig zu sein. Es gibt kaum etwas nervigeres zu debuggen als 
zufällige Fehler(durch zufällige Duplikate).

Zufallsgeneratoren zu programieren sind eine Sache für sich. 
Normalerweise kommt nämlich immer das Selbe bei einem Programm raus. 
Also wird es etwas komplizierter und/oder man bedient sich weiterer 
Mittel. Sich mit dem Thema zu befassen ist nicht wirklich einfacher als 
einmal die 100 Nummern Reihum zu verteilen.

Normalerweise wird in irgendeinem Schritt von Produktion bis 
Inbetriebnahme  eine eindeutige Nummer aus einem gültigen Adresspool 
zugewiesen.

Vlad Tepesch schrieb:
> Bei der ersten Kommunikation mit dem Master (in einem speziellen
> Anlernmodus) teilt dieser dem Handgerät eine ID mit, die das Gerät ins
> Eeprom schreibt.

Genau so wird es gemacht wenn man es am Ende bei der Inbetriebnahme 
machen will. Allerdings sind die meisten Methoden für so eine einmalige 
Sache unnötig aufwändig. Daher bietet sich "einfach hochzählen" an. 
Entweder macht man es selbst oder so wie eagle user es beschrieb.
Beitrag "Re: Seriennummernproblem"

Nop schrieb:
> Ins Flash schreiben, hat für mich schon wieder was in Richtung UID.

Wo es gespeichert wird ist doch egal, eher wie. Unveränderlich oder 
nicht, wobei es ohnehin oft bei der Startvorgabe bleibt.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Christof K. schrieb:
> Hallo!
>
> Wir haben gerade ein Projekt am laufen bei dem bei einer elektronischen
> Abstimmung bis zu 100 Handsender an einen Empfänger ihre Stimme senden
> sollen.

Funk?

Da lauert sowieso noch ein Problem.
Denn die 100 Handsender können nicht gleichzeitig losplärren.
D.h. können tun sie schon. Nur wird der Empfänger dann nichts verstehen.

Das ganze muss also sowieso geordnet ablaufen. Der eine Empfänger 
benötigt noch einen Sender und jeder Handsender muss auch einen 
Empfänger haben.
Das zentrale Auswertegerät frägt nacheinander die ihm bekannten 
Seriennummern ab und das jeweils so angesprochene Handgerät antwortet 
mit seiner Stimme.

Von daher würde ich die Handgeräte ganz einfach durchnummerieren. Wenn 
du in einer einigermassen kontrollierbaren Umgebung arbeitest, sollte 
das auch keine Probleme geben. Eine 12 stellige Seriennummer braucht 
niemand wirklich im Fernsehstudio in dem "Wer wird Millionär" gedreht 
wird. Wichtig ist, dass die jeweilige Auswahl A, B, C oder D zur 
Zentrale kommt und das jedes Stimme nur einmal gezählt wird.

von Carsten R. (kaffeetante)


Lesenswert?

Karl Heinz schrieb:
> Denn die 100 Handsender können nicht gleichzeitig losplärren.

Wen interessiert's? Einfach nochmal drauf drücken oder das Datenpaket in 
variierenden Abständen mehrfach widerholen lassen. Ich glaube nicht, daß 
es gefordert ist daß jeder Knopfdruck ankommen muß. Und Handbetrieb ist 
so langsam, je dach Datenpaketgröße, die dürfte klein sein, sind da 
Kollisionen selten solange sie nicht wie bei des Fernsehshow alle 
gleichzeitig drücken, selbst bei 100 Teilnehmern.

Ohne Rückkanal, da "Handsender", wird es ohnehin schwer ein 
koordiniertes Protokoll mit bestätigter Zustellung hinzubekommen. Da die 
Abstimmung nicht sehr zeitkritisch ist kann an auch die ID als 
Zeitverzögerungsparameter verwenden um das Rudelklicken beim Senden 
zeitlich zu streuen.

: Bearbeitet durch User
von Easylife (Gast)


Lesenswert?

Carsten R. schrieb:
> Es gibt kaum etwas nervigeres zu debuggen als
> zufällige Fehler(durch zufällige Duplikate).

Sicher richtig, nur bei 100 Geräten und einer 32-bit Zufallszahl wäre 
die Wahrscheinlichkeit 6 Richtige im Lotto zu haben (1 : 14 Mio) höher 
als 2 Geräte mit gleicher Nummer (1 : 43 Mio) ;-)

Funkbasierte Abstimmungsgeräte kling für mich allerdings nach hohem 
Hack-Value? Wo genau wird das nochmal eingesetzt werden? Und auf welcher 
Frequenz wird da gesendet...?

von Carsten R. (kaffeetante)


Lesenswert?

Damit wird in den USA der nächste Präsident gewählt. Es muß ja mal 
wieder einer aus dem Bush-Clan ran. :P

Natürlich ist ein Mehrfachtreffer unwahrscheinlich in diesem Fall, aber 
auch nur weil es sehr, sehr, sehr wenige Adressen gemessen zur Poolgröße 
zu ziehen sind. Aber man macht es prinzipiell nicht. Bei MAC-Adressen 
hat man noch mehr Bits. Mit Zufallsszahlen wäre es lustig. Sobald man 
den Pool auch nur etwas mehr auslastet bekommt man unerwartet hohe 
Kollisionswahrscheinlichkeiten. Die Wahrscheinlichkeit, daß 2 oder mehr 
Schüler einer kleinen Klasse am selben Tag Geburtstag haben liegt auch 
schon über 50 %. Dabei wurde der Pool nicht einmal zu 10 % ausgelastet. 
Solche Sachen will man nicht jedesmal für die jeweilige Anwendung 
ausrechnen um dann das Fehlerrisiko zu berechnen.

Bewußt Fehlermöglichkeiten einzubauen ist irgendwie Käse. Man hat schon 
genug mit unplanmäßigen Bugs zu tun.

Zudem wäre es hier viel zu aufwändig einen Zufallsgenerator einzubauen.

: Bearbeitet durch User
von Mike (Gast)


Lesenswert?

Carsten R. schrieb:
> Zufallsgeneratoren zu programieren sind eine Sache für sich.
> Normalerweise kommt nämlich immer das Selbe bei einem Programm raus.

Das kommt wohl etwas drauf an, wie durchdacht das Verfahren ist.

Da Computer deterministisch sein sollten, kommt mit einem Programm unter 
gleichen Bedingungen natürlich immer das selbe raus. Wäre ja schlimm, 
wenn nicht. Man braucht schon einen vernünftigen Samen.

von Carsten R. (kaffeetante)


Lesenswert?

Genau das!

Darum meinte ich auch zu Beginn dazu.

Carsten R. schrieb:
> heraus kommt:
> 42, 23.... und immer abwechselnd 42 und 23

Weil normalerweise immer das Selbe herauskommen sollte. Und genau diese 
sonst gewünschte Eigenschaft muß man hier auf geeignete Art und Weise 
umgehen/ändern.

Da ist es doch einfacher einmal eine Variable beim Flashen um eins 
hochzuzählen.

: Bearbeitet durch User
von Uwe K. (ukhl)


Lesenswert?

Vlad Tepesch schrieb:
> einfach auf alle die gleiche Software flashen.
> Bei der ersten Kommunikation mit dem Master (in einem speziellen
> Anlernmodus) teilt dieser dem Handgerät eine ID mit, die das Gerät ins
> Eeprom schreibt.
> In dieser Phase kann man dann auch gleich den Schlüsselaustausch machen,
> um im Produktiveinsatz die Kommunikation abzusichern (Verschlüsselung +
> Signatur um Fälschung zu vermeiden).

Genau so würde ich es auch machen.

Die Sender müssen sich beim Master melden und bekommen vom Master eine 
Nummer. Der Master sorgt dafür, dass die Nummer nur einmal vergeben 
wird. Der Sender speichert sich die Nummer in EEPROM und weis so, dass 
er nicht nochmal fragen muss.

Machbar und zuverlässig oder ? Hat ein bisschen was von DHCP...

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

>  Sobald man den Pool auch nur etwas mehr auslastet bekommt man
> unerwartet hohe Kollisionswahrscheinlichkeiten.

Mag sein, der TO hatte allerdings klargestellt, dass er maximal 100 
Geräte unterscheiden möchte.

> Zudem wäre es hier viel zu aufwändig einen Zufallsgenerator einzubauen.

Echt? Ich brauche dafür nur die avr-libc, sowie geschätzt ca 5 Zeilen 
Code für eine ausreichend "zufällige" Initialisierung mit Hilfe des ADC 
und irgendeiner instabilen Signalquelle (z.B. Batteriespannung, eine 
rauschende Diode, oder auch das Rauschen ds ADC selbst).

von Carsten R. (kaffeetante)


Lesenswert?

Das setzt voraus daß der Handsender auch einen Empfänger hat.

von Fritz (Gast)


Lesenswert?

Easylife schrieb:
> nur bei 100 Geräten und einer 32-bit Zufallszahl wäre
> die Wahrscheinlichkeit 6 Richtige im Lotto zu haben (1 : 14 Mio) höher
> als 2 Geräte mit gleicher Nummer (1 : 43 Mio) ;-)

Ich weiß nicht, wie du auf diese Zahl kommst, aber sie ist falsch. 
Tatsächlich ist die Wahrscheinlichkeit dafür 1:867671 
(Geburtstagsparadoxon), aber das ist gar nicht der Punkt. Der Hinweis 
kam doch schon:

Carsten R. schrieb:
> Bewußt Fehlermöglichkeiten einzubauen ist irgendwie Käse.

... vor allem wenn es praktikable Alternativen gibt.


Stefan us schrieb:
>> Zudem wäre es hier viel zu aufwändig einen Zufallsgenerator einzubauen.
>
> Echt? Ich brauche dafür nur die avr-libc, sowie geschätzt ca 5 Zeilen
> Code für eine ausreichend "zufällige" Initialisierung mit Hilfe des ADC
> und irgendeiner instabilen Signalquelle (z.B. Batteriespannung, eine
> rauschende Diode, oder auch das Rauschen ds ADC selbst).

Die Selbsteinschätzung des TE bezüglich Programmierkenntnissen gelesen? 
Woher weißt du, dass das Gerät batteriebetrieben ist? Woher weißt du, 
dass der avisierte µC (noch freie) AD-Wandler hat? Machst du dem TE die 
Untersuchung, dass diese Methode ausreichend streut?

von Schreiber (Gast)


Lesenswert?

Noch ein Vorschlag:
Keine Seriennummer einbauen, sondern diese vom Benutzer bei der 
allerersten Inbetriebnahme über die Abstimmtasten eintippen lassen und 
dann dauerhaft speichern.

von Carsten R. (kaffeetante)


Lesenswert?

Stefan us schrieb:
>>  Sobald man den Pool auch nur etwas mehr auslastet bekommt man
>> unerwartet hohe Kollisionswahrscheinlichkeiten.
>
> Mag sein, der TO hatte allerdings klargestellt, dass er maximal 100
> Geräte unterscheiden möchte.

Und ich hatte klar unterschieden zwischen dem speziellen Fall mit 100 
Adressen aus dem Pool und der von dir nun oben zitierten Aussage, welche 
sich auf die allgemeine Situation bei solchen Strategien bezieht. Das 
kann nämlich ganz schnell in die Hose gehen.

Fritz schrieb:
> Ich weiß nicht, wie du auf diese Zahl kommst, aber sie ist falsch.
> Tatsächlich ist die Wahrscheinlichkeit dafür 1:867671

Und siehe da, wer sagt's denn. ;-) Die Wahrscheinlichkeit ist deutlich 
höher als ursprünglich angenommen. Was dann wenn man 1000 aus den 2^32, 
also über 4 Milliarden Möglichkeiten, hätte haben wollen. Da wäre der 
Pool bei weitem nicht einmal zu einem Millionstel ausgelastet. Ich muß 
mal meinen Taschenrechner rauskramen...

Das ist eine sehr holprige Arbeitsweise mit schwer nachvollziehbaren 
Konsequenzen. Das ist einfach Käse. Na toll! Nun habe ich Hunger!^^

von Fritz (Gast)


Lesenswert?

Carsten R. schrieb:
> Ich muß
> mal meinen Taschenrechner rauskramen...

Nicht nötig ;)

Bei 1000 aus 2^32 sind es nur noch 1:8599.

von Carsten R. (kaffeetante)


Lesenswert?

Ich bin da in der Stochatik wohl etwas eingerostet um die Formeln auf 
handhabare Zahlen zu kürzen. -.-

von Fritz (Gast)


Lesenswert?

Von Hand rechne ich das auch nicht - das Leben ist schon schwer genug.

von Carsten R. (kaffeetante)


Lesenswert?

Ich auch nicht. Aber mein Taschenrecher kommt bei n über k irgendwann an 
seine Grenzen.

von jz (Gast)


Lesenswert?

Fritz schrieb:
> Bei 1000 aus 2^32 sind es nur noch 1:8599

Ich komme da auf 1:8581 Komma nochwas (500500/2^32)

von jz (Gast)


Lesenswert?

Ah, sch**** Denkfehler... Sind natürlich 8598,5...
Nicht 1+2+3+4...+998+999+1000 sondern nur bis 999...

von Harald S (Gast)


Lesenswert?

Christof K. schrieb:
> Hallo!
>
> Wir haben gerade ein Projekt am laufen bei dem bei einer elektronischen
> Abstimmung bis zu 100 Handsender an einen Empfänger ihre Stimme senden
> sollen.
> Natürlich müssen bei den Sendegeräten eine eineindeutige
> Seriennummernvergabe vorhanden sein damit keine Fehler auftreten.
> Wir haben uns bereits ein wenig über dieses Thema informiert und auch
> schon
> 1-Wire-Devices oder ID-Chips in Erwägung gezogen, da wir jedoch nicht
> die besten Programmierer sind, haben wir uns gedacht, dass wir einfach
> einen 8 poligen Dip-Schalter einbauen, die Seriennummer manuell
> einstellen und diese dann einlesen und als Dezimalzahl mitsenden.
>
> Was haltet ihr von der Idee?
> Bzw habt ihr bessere?
>
> Danke schonmal im vorraus.
>
> mfg

Wieso nimmste nicht einfach für die 100 Leute entsprechend einfache 100 
Stück 1-Kanal-Handfunksender - Stück um 2 € im Selbstbau. Mit dem HT 600 
als SENDE-CHIP + 433 / oder 868 Mhz-Sender + 1 Taste + Funksende-Modul 
PRO Handsender / bzw. das Empfängermodul mit dem HT 614  (der kann ja 
auch  wie der SENDER-IC  bis zu 16, 4 Milionen Codiermöglichkeiten!!!) 
ALLE individuell einmal codierten Sender empfangen und auswerten!) Jeder
HT 600 - SENDER kann codiert auf einen individuellen CODE(ebenfalls 16,4 
Millionen Möglichkeiten über 8 Codier-Eingänge (PLUS / MINUS oder 
OFFEN-Codiert!) eingestellt und codiert werden! Der EMPFÄNGER HT 614 
wertet die Handsender einzeln unterschieden EINDEUTIG aus- wo ist das 
Problem?
Naja - AHNUNG muss man schon haben, WIE man den SENDER-IC und den 
EMPFÄNGER dann "programmiert" durch Lötbrücken / oder DIP-Schalter.

Und man benötigt weder eine UNSINNIGE Seriennummer ( und / oder 
aufwendige Programme ect!!) Also manche haben Vorstellungen............ 
Nun, man kann sich es ja schwer machen, wenn man sonst keinen Job hat.. 
Umständlichkeiten kann man eben nicht einfacher gestalten - so ein 
altdeutscher Dichter das verfasst hatte mal anno 1700 oder so ..

Eulenspiegel machte es auch komplizierter als es eigentlich ist - Von 
nem Haufen Baumschnittholz den UNTERSTEN Stamm zuerst rausziehen und 
abwarten, was passiert...

Leute, geht arbeiten, dann  fällt es euch leichter, sich in der Welt da 
draussen zurecht zufinden. Elektronik und Hobby über das Forum hier ist 
wohl doch nichts für Euch. Gebts zu wenigstens. Man bekommt bei den 
Postings hier nämlich üble Lachkrämpfe...

Nicht unterkriegen lassen - Elektronik sollte man verstehen uind auch 
beherrschen können, dann seids einen Schritt in richtiger Richtung 
unterwegs. Glaubts mir.

Harald S

Gruß aus Koblenz

von Easylife (Gast)


Lesenswert?

Fritz schrieb:
> Ich weiß nicht, wie du auf diese Zahl kommst, aber sie ist falsch.
> Tatsächlich ist die Wahrscheinlichkeit dafür 1:867671

Habe 1 : 2^32 genommen, in der irrigen Annahme, wenn man 100 Zahlen von 
2^32 wegnimmt, spielt das keine Rolle.
Danach habe ich mich dann noch direkt um 2 10er Potenzen verguckt... 
tsss...

Der Hinweis auf das Geburtstagsparadoxon (Paarbildungsmöglichkeiten) ist 
hoch interessant.
Bzw. erschreckend, ich komme mit Excel auf ca. 1:650000, deine Zahl ist 
wohl die Richtige.
Dankesehr für den Hinweis.

von Max G. (l0wside) Benutzerseite


Lesenswert?

Christof K. schrieb:
> Wir haben gerade ein Projekt am laufen bei dem bei einer elektronischen
> Abstimmung bis zu 100 Handsender an einen Empfänger ihre Stimme senden
> sollen.

Wie werden die Daten gesendet? Wenn ihr Bluetooth verwendet, ist die 
Seriennummer als MAC-Adresse bereits vorhanden.
Die DIP-Schalter-Lösung finde ich gar nicht so schlecht, wenn ihr ein 
verschlossenes Gehäuse habt. Notfalls muss man das Gehäuse noch 
versiegeln oder mit exotischen Schrauben zumachen. Oder braucht ihr 
völlige Manipulationssicherheit?

Max

von Christof K. (christof_k95)


Lesenswert?

Max G. schrieb:
> Wie werden die Daten gesendet?
>
> Oder braucht ihr
> völlige Manipulationssicherheit?

Wir senden die Daten über Funk mit RFM12 Funkmodulen.

Den Teilnehmern sollte man in unserem Fall vertrauen können dass sie das 
Gehäuse nicht aufschrauben. :)

von Türöffner (Gast)


Lesenswert?

Ich würde die Nummer fest im Controller beim programmieren hinterlegen.
Wenn doch alle Geräte die gleiche Software bekommen sollen und die 
Adresse hardwaremäßig eigestellt werden sollen würde ich aber auf den 
Schalter verzichten. Da würde ich lieber "Lötklecksjumper", zwei nah 
beieinander liegende SMD Pads die einfach mit Lötzinn gebrückt werden 
können, verwenden.
Ein Schalter müsste auch gelötet werden, und für nur einmal einstellen 
nun nicht wirklich notwendig.

von Klaus W. (mfgkw)


Lesenswert?

Oder vielleicht 7 Lötpunkte vorsehen (reicht für 2^7 = 128 Nummern) und 
beim ersten Einschalten dort ein Bitmuster anlegen.
Das Programm liest die Bits aus, speichert sie und ignoriert die 
Lötpunkte für sein restliches Leben.

von Christian B. (casandro)


Lesenswert?

Ich würde das so machen. 3-4 Löcher ins Gehäuse und Testpads dahinter. 
(ggf im Batteriefach oder so) Die Pins verbindest Du ohne Pegelwandler 
mit dem UART. Wenn das Teil startet wird ein kleines primitives Menü 
gestartet, auf dem man die Nummer einstellen, bzw auslesen kann. Willst 
Du das ganz nobel machen, dann kannst Du sogar noch einen 
Etikettendrucker parallel schalten (mit Schalter). Du schaltest den dann 
hinzu, drückst eine Taste und das Teil schickt die notwendigen 
Steuerbefehle an den Drucker.

Das alles ist schnell programmiert und kostet gar nichts in Hardware pro 
Gerät. Die Basisstation ist trivial und kommt ohne Spezialsoftware aus. 
Der normale Nutzer wird die ID nicht versehentlich ändern können, es 
gibt aber die Möglichkeit bewusst IDs zu ändern (wenn man Teil 43 mal 
austauschen möchte, o.Ä.) und das alles ist so einfach gehalten, dass es 
auch noch von Leuten in 50 Jahren verstanden wird.

von c-hater (Gast)


Lesenswert?

Carsten R. schrieb:

> Man benutzt keine Zufallszahlen für Seriennummern!

GUIDs (nix anderes als 128Bit-Zufallszahlen) sind sogar DIE 
Standardlösung für eindeutige Seriennummern, wenn es nicht möglich ist, 
diese auf einer zentralen Instanz zu erzeugen. Und oft genug auch dann, 
wenn es eigentlich möglich wäre.

Und warum ist das so? Bestimmt nicht, weil alle Ingenieure dieser Welt 
nur Schwachköpfe sind und du der einzige bist, der Ahnung von der Sache 
hat. Ich würde sogar soweit gehen, zu behaupten, daß es in Wirklichkeit 
genau andersrum ist..

> Zufallsgeneratoren zu programieren sind eine Sache für sich.

Ohne Zweifel. Das Problem ist dabei weniger der Generatoralgorithmus als 
vielmehr die Gewinnung eines wirklich zufälligen Startwertes für diesen 
Algorithmus.

> Normalerweise kommt nämlich immer das Selbe bei einem Programm raus.

Nicht, wenn man es richtig macht. Du kannst es wohl nur nicht. Du bist 
nicht in der Lage, Zufallsquellen im System zu finden und als solche 
nutzbar zu machen. Aber, daß DU unfähig dazu bist, heißt doch noch lange 
nicht, daß es nicht möglich wäre...

von jz (Gast)


Lesenswert?

Du redest hier aber auch von 128 bit. Da liegt die Wahrscheinlichkeit 
bei 1000 Zahlen zwei gleiche zu erwischen bei 1:6*10^32. Bisher war 
allerdings die Rede von 32 bit Zufallszahlen. Fällt dir der Unterschied 
auf?

von Carsten R. (kaffeetante)


Lesenswert?

c-hater schrieb:
>> Zufallsgeneratoren zu programieren sind eine Sache für sich.
>
> Ohne Zweifel. Das Problem ist dabei weniger der Generatoralgorithmus als
> vielmehr die Gewinnung eines wirklich zufälligen Startwertes für diesen
> Algorithmus.
>
>> Normalerweise kommt nämlich immer das Selbe bei einem Programm raus.

Jetzt hast du aus dem Hinweis das sich Software + CPU für gewöhnlich 
deterministisch verhält geschlossen, daß das System um etwas zufälliges 
ergänzt werden muß. Yeeehaaaa. Dann ist der Wink mit dem Zaunpfahl ja 
angekommen.

c-hater schrieb:
> Du kannst es wohl nur nicht. Du bist
> nicht in der Lage, Zufallsquellen im System zu finden und als solche
> nutzbar zu machen.

Völlig anmaßende Schlußfolgerung. Völlig anmaßend! Geschlossen nur aus 
dem Umstand, daß ich auf die Beschränkungen deterministischer Systeme 
hinweise und im Kontext mehrerer erheblich einfacherer Lösungsansätze 
(einfach war gefordert) kein Faß aufmache und keine Lösung präsentiere 
wie dies auf völlig unbekannter Hardware, ohne Information ob überhaupt 
Zufallsquellen verfügbar sind (ob und nicht welche!), zu lösen wäre. 
Erkläre doch bitte mal Christof mit wenigen Sätzen bei aktueller 
Informationslage über die Hardware wie er da ein echt zufälliges System 
ausreichend zuverlässig in sein Gerät bekommt ohne Hardware anzubauen 
die komplexer als Jumper/Lötpunke ist.

Es ist ja auch soooo sinnvoll das breitzutreten und diese Lösung 
durchzuprügeln weil es ja soooo viel einfacher ist als bis 100 zu 
zählen. Einfachheit war gefragt. Da ist es hinreichend zu erkennen ab 
wann es die geforderte Einfachheit übersteigt. Es ist nicht notwendig 
die übermäßig komplexen Totgeburten auch noch detailiert zu sezieren.

c-hater schrieb:
>> Man benutzt keine Zufallszahlen für Seriennummern!

Das ist zugegeben etwas dogmatisch formuliert. Asche auf ein Haupt. GUID 
ist aber auch nicht die Standardlösung bei Mikrocontrollern der 
Größenordnung ATTiny oder Atmega. Hiermit reiche ich den in diesem Forum 
nahezu allgegenwärtigen Kontext Mikrocontroller nach.

In einer Umgebung in der das Geburtstagsparadoxon noch für 
Überraschungen sorgt, ist eine solche Gundregel aber auch gut 
angesiedelt. Davon abweichen sollte man nur wenn bestimmte 
Vorraussetzungen gelten.

Diese hast Du teilweise (implizit) selbst genannt.

-Situationen in denen es keine Alternativen gibt.

-Situationen in denen die Einsatzbedingungen geeignet sind und dafür ein 
ein Framework zur Verfügung steht daß sich um das drumherum kümmert! 
Denn hinter GUID steckt geringfügig mehr als die 128 Bit. JEEHHAA, ein 
Bit für jedes Gerät und ich habe noch massig Bits übrig. Dann erkläre 
bitte auch hier mal Christof in wenigen Worten wie er das auf seiner 
Hardware implementieren kann, und zwar so, daß er es schneller und 
einfacher implementieren kann als eine Zahl hochzuzählen. Kannst du es? 
Kein Chipupgrade wegen Speicherplatz erlaubt.

-Leute die genau wissen was sie tun und die Wahrscheinlichkeiten 
ausrechnen können. z.B. Einsatzradius im Sinne der gezogenen Poolgröße 
abschätzen, eingrenzen, Kollisionswahrscheinlchkeiten bei 128-Bit in 
Relation eines Hardwarefehlers (z.B. gekipptes Bit) setzen.

Man springt nicht lachend von einer Klippe. Natürlich gibt es auch 
Profis die das mit einem Wingsuit tun und Spaß dabei haben. Grundsätzlch 
ist das aber erst einmal keine so gute Idee. Ausnahmen kann man mit der 
passenden Ausrüstung (Fachwissen + Framework) machen.

von Klaus W. (mfgkw)


Lesenswert?

Vergebliche Mühe, mit ihm hier diskutieren zu wollen. Dann auch noch mit 
Argumenten!

: Bearbeitet durch User
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.