Forum: Mikrocontroller und Digitale Elektronik Hardware Erkennung leicht gemacht


von suckiden (Gast)


Lesenswert?

Hallo allerseits!

meine heutige Frage dreht sich um die Möglichkeit Hardware zu kodieren 
bzw. zuzuordnen.

Konkret geht es darum eine Platine die an ein System angeschlossen wird 
zu erkennen. Z.B. es gibt drei Module, Modul ROT, GRÜN, BLAU und wann 
immer eines der Module an das System angeschlossen wird soll das System 
in der Lage sein zu erkennen welches Modul angeschlossen wurde.

Anforderungen: es soll möglichst wenig Bauteile benötigen (platzsparend) 
es soll möglichst wenig Leitungen benötigen und es soll 100% eindeutig 
sein (fehlerfrei). Zeit spielt bei der Erkennung der Module keine Rolle 
also wenn die Erkennung 1-2 Sekunden dauert ist das auch kein Problem. 
Natürlich je schneller desto GUT.
Insgesamt soll es möglich sein ~50 verschiedene Werte zu unterscheiden 
und das bei einer Spannung von 3,3V. Die Leitungslänge zwischen Modul 
und System beträgt ungefähr 2,5m. Und es soll möglich sein es in der 
Serienfertigung anzuwenden ~1000/a

Bisherige Überlegungen:

EEPROM:
+ nur ein Bauteil
+ eindeutig
- viele Leitungen
- muss programmiert werden

R2R Widerstands Leiter und Messung mittels ADC:
+ wenig Leitungen
+ ziemlich eindeutige Erkennung (bei 6 bit ~50mV pro bit, sollte der ADC 
gut erkennen)
- viele Bauteile
- jedes bit muss gesetzt werden (z.B. Lötjumper)

Spannungsteiler und Messung mittels ADC:
R1 ist ein Festwiderstand
R2 besteht aus sechs unterschiedlichen Serienwiderständen welche mittels 
Jumper aktiviert/deaktiviert werden können (64 Werte jedoch nicht so gut 
verteilt wie bei R2R Leiter)
+ nur 7 Widerstände
+ wenig Leitungen
+ nur die bits die aktiv sind müssen gesetzt werden (z.B. Lötjumper)
- vielleicht nicht möglich alle 64 Werte voneinander zu unterscheiden 
weil die Werte nicht linear sind und daher manche Werte nah beieinander 
liegen.

Ich würde gerne hören was Ihr zu diesem Thema zu sagen habt und bin 
gespannt was Ihr für Vorschläge habt.

mfg

von Cyblord -. (cyblord)


Lesenswert?

suckiden schrieb:
> Ich würde gerne hören was Ihr zu diesem Thema zu sagen habt und bin
> gespannt was Ihr für Vorschläge habt.

Silicion Serial Number mit 1Wire Interface.
http://www.maximintegrated.com/en/products/digital/memory-products/DS2401.html


+ 100% Eindeutig
+ Muss nicht programmiert werden.
+ Benötigt nur 1 Leitung (VCC/Daten) + GND.

-Teurer als eeprom oder wiederstände

von Scelumbro (Gast)


Lesenswert?

Was die vielen Leitungen am EEProm angeht gibt es ja noch onewire. 
Braucht weniger Platz und genauso viele Leitungen wie die ADC Lösung

von 6a66 (Gast)


Lesenswert?

suckiden schrieb:
> EEPROM:
> + nur ein Bauteil
> + eindeutig
> - viele Leitungen
> - muss programmiert werden

Sind genau 2 Leitungen: I2C CLK und Data. Stromversorgung hast Du ja auf 
der anderen Platine auch.

Alternative: Widerstand bestücken und rausmessen über ADC. Billig, 
braucht auch 2 Leitungen, bei 50 verschiedenen Werten wird das aber mit 
den dekaden schwierig (Spannungsteiler, Auflösung ADC), das lässt sich 
aber über eine Kominbation mit zwei Widerständen erleichtern - braucht 
dann drei Leitungen.

rgds

von suckiden (Gast)


Lesenswert?

Cyblord -. schrieb:
> Silicion Serial Number mit 1Wire Interface.
> http://www.maximintegrated.com/en/products/digital/memory-products/DS2401.html

klingt gut, jedoch habe ich da ein unique Seriennummer oder hab ich was 
überlesen?. In dieser Anwendung sollte es möglich sein einem Modultyp 
immer die gleich Nummer zu geben. 1-Wire klingt auf jeden Fall gut.

Serial EEPROM klingt auch nicht schlecht:

http://www.digikey.com/product-detail/en/11AA160T-I%2FTT/11AA160T-I%2FTTCT-ND/1851333

von Georg (Gast)


Lesenswert?

suckiden schrieb:
> Serial EEPROM klingt auch nicht schlecht

Hat ausserdem den Vorteil, dass man darin noch viel mehr unterbringen 
kann, z.B. Kalibrier-Daten, Betriebsstunden usw. usw.

Georg

von Operator S. (smkr)


Lesenswert?

suckiden schrieb:
> es gibt drei Module, Modul ROT, GRÜN, BLAU und wann
> immer eines der Module an das System angeschlossen wird soll das System
> in der Lage sein zu erkennen welches Modul angeschlossen wurde.

wäre mal noch interessant zu wissen, wie die denn an das System 
angeschlossen werden. Sternförmig, Bus, oder noch was ganz anderes?
Welche bisherige Kommunikation besteht zwischen den Modulen und dem 
System?

suckiden schrieb:
> Insgesamt soll es möglich sein ~50 verschiedene Werte zu unterscheiden

Können dabei mehrere Module vom gleichen Typ angeschlossen sein, oder 
ist mit 50 Modulen gemeint, dass diese zwingend unterschiedlich 
voneinander sind? Also z.B. ROT kommt höchstens 1 mal vor?

von Thomas E. (picalic)


Lesenswert?

Noch eine Alternative: ein kleiner Microcontroller im SOT23-Gehäuse 
(z.B. PIC10Fxxx). Kommunikation über eine Leitung über UART (ggf. 
Software UART, bei kleinen Baudraten kein Problem). Halbduplex 
ermöglicht bidirektionale Kommunikation, oder der µC sendet einfach 
immer ständig sein Datenpaket mit der ID.

von Blinky (Gast)


Lesenswert?

Wie kommunizieren die Module mit dem System? Gibt es eine 
Datenverbindung die mitbenutzt werden kann?
Haben die Module einen µC der diese Information ggf. schon im internen 
EEProm speichern könnte?

von Rene S. (Firma: BfEHS) (rschube)


Lesenswert?

Warum nicht einfach einen Kodierstecker benutzen?
Soetwas wie die guten alten DIN 41612 (übersetzt VG-Leisten).

von Reiner W. (reiner_w)


Lesenswert?

suckiden schrieb:
> klingt gut, jedoch habe ich da ein unique Seriennummer oder hab ich was
> überlesen?. In dieser Anwendung sollte es möglich sein einem Modultyp
> immer die gleich Nummer zu geben. 1-Wire klingt auf jeden Fall gut.

Na ja, sieh dir mal die Zusammensetzung der SN an.

"Key Features
... (8-Bit Family Code +48-Bit Serial Number + 8-Bit CRC Tester)
"
Vlt. kommst du mit dem Family Code hin. Hab aber nicht nachgelesen, wie 
viele es davon gibt und wie die bestellt werden müssen.

von Paul B. (paul_baumann)


Lesenswert?

Mache einen Spannungsteiler auf jedes Modul, der jeweils 
unterschiedliche
Spannungen am Abgriff liefert, oder setzte einen Einstellregler rein, 
der in der gleichen Weise eingestellt wird.

Du kannst dann in Deinem nicht näher genannten "System" einen kleinen 
Kontroller reinsetzen, der mit einem A/D-WandlerKanal diese Spannuung 
mißt und der restlichen Schaltung "sagt": "Jetzt hat der Kerl Modul 
Numer 2 drangesteckt -macht, was ihr mit diesem Modul machen müßt!"

MfG Paul

von dunno.. (Gast)


Lesenswert?

Falls die Module auch noch Controller enthalten, die geflashed werden 
müssen:
EEprom. Das kann direkt beim Flashen des Controllers per Nadelbett 
kontaktiert werden, bei 1000/a macht so eine Programmier-Lösung auch 
schon Sinn.

Das EEprom macht dich absolut flexibel, und ja auch sonst noch gut zum 
speichern von Daten des Moduls, Parametrierung, Kalibrierung etc dienen.

Wenn das Modul natürlich nur einen Peripheriebaustein oder Analogtechnik 
enthält, wär das sicher overkill.

von chris_ (Gast)


Lesenswert?

> es gibt drei Module, Modul ROT, GRÜN, BLAU und wann

3 Module? Dann geht es mit einem Widerstand am Portpin eines MC:

rot: offen
grün: gegen GND
blau: gegen VCC

von Joachim B. (jar)


Lesenswert?

suckiden schrieb:
> klingt gut, jedoch habe ich da ein unique Seriennummer oder hab ich was
> überlesen?. In dieser Anwendung sollte es möglich sein einem Modultyp
> immer die gleich Nummer zu geben. 1-Wire klingt auf jeden Fall gut.

bei deiner Anwendung geht das also nicht

> Serial EEPROM klingt auch nicht schlecht:

aber begrenzt auf die Subadressen, ich kenne nur 3 A0-A2 also nur 8 
Stück möglich wenn das reicht?

suckiden schrieb:
> es gibt drei Module, Modul ROT, GRÜN, BLAU und wann
> immer eines der Module an das System angeschlossen wird soll das System
> in der Lage sein zu erkennen welches Modul angeschlossen wurde.

was denn nun 3?

suckiden schrieb:
> Insgesamt soll es möglich sein ~50 verschiedene Werte zu unterscheiden
> und das bei einer Spannung von 3,3V.

oder 50?

suckiden schrieb:
> Die Leitungslänge zwischen Modul
> und System beträgt ungefähr 2,5m.

i2c? sportlich.

: Bearbeitet durch User
von Jürgen D. (poster)


Lesenswert?

Ich würde da irgendwas mit einem EEprom machen was die Kennung trägt. 
Egal ob das nun I2C, 1-Wire oder direkt im MC der Baugruppe passiert.
So das man das In System über ein paar Testpads programmieren kann.
1K pro Jahr ist ja nun wirklich keine Stückzahl. wenn du mal auf 
Stückzahlen von über 1K pro Tag kommst kann man sich mal Gedanken über 
was anderes machen

von Frank K. (fchk)


Lesenswert?

suckiden schrieb:
> Cyblord -. schrieb:
>> Silicion Serial Number mit 1Wire Interface.
>> http://www.maximintegrated.com/en/products/digital/memory-products/DS2401.html
>
> klingt gut, jedoch habe ich da ein unique Seriennummer oder hab ich was
> überlesen?. In dieser Anwendung sollte es möglich sein einem Modultyp
> immer die gleich Nummer zu geben. 1-Wire klingt auf jeden Fall gut.

Diese Dinger gibts auch mit EEPROM und OTP.

fchk

von bekannt (Gast)


Lesenswert?

3 Module langen doch 2 Bit? Also 2 EIngänge vom MC (oder was auch immer 
drin ist) vorsehen, jeweils je Modul Pullup/Pulldown (bspw R = 00, B= 
01, G= 10) und du hast sogar noch Luft nach oben...

von Martin L. (martin_l795)


Lesenswert?

bekannt schrieb:
> 3 Module langen doch 2 Bit? Also 2 EIngänge vom MC (oder was auch immer
> drin ist) vorsehen, jeweils je Modul Pullup/Pulldown (bspw R = 00, B=
> 01, G= 10) und du hast sogar noch Luft nach oben...


Richtig lesen: "Insgesamt soll es möglich sein ~50 verschiedene Werte zu 
unterscheiden "

Die drei module waren nur ein Beispiel.

von chris_ (Gast)


Lesenswert?

Gestellt sei folgende Aufgabe:

An einen Mikrocontrollerpin ist eine Schaltung bestehend aus R und C 
angeschlossen.
Schreiben Sie einen Algortithmus, der R,C und die Art der Schaltung über 
die Ansteuerung des Pins berechnet.

Hinweis: Der Wertebereich von R und C bewegt sich in 7 verschiedenen 
Stufen.

von Thorsten S. (thorsim)


Lesenswert?

Hallo,

wie wär's denn mit einem 8 bit parallel in, serial out Schieberegister?
Bitmuster fest am IC, Lesestrobe geht evtl. per RC-Kombi bei Power-Up.

Bleiben Takt und Daten, evtl. doch Lesestrobe (zzgl. GND und VCC)
Längere Leitungen: BCR135 spendieren, der einen Pullup auf der anderen 
Seite bedient.

Nix programmieren, 1 aus 255, wenig Leitungen.

Gruß,
Thorsten

von Jürgen D. (poster)


Lesenswert?

Aber die 8 Bit parallel in müssen auch beschaltet werden. Selbst das 
setzen vom Lötperlen als Kodierung wird wohl aufwändiger als ein kleinen 
EEPROM zu schreiben.

von Thorsten S. (thorsim)


Lesenswert?

Ich hab's so verstanden, daß die Kodierungen fix sind, also

"Modul grün" immer    00000001
"Modul gelb" immer    00000010
"Modul blau" immer    00000011
"Modul schwarz" immer 00000100
...
und die Module verschiedene Leiterplatten haben -> feste Verdrahtung

Ist aber vielleicht falsch!?

von nicht "Gast" (Gast)


Lesenswert?

suckiden schrieb:
> Spannungsteiler und Messung mittels ADC:
> R1 ist ein Festwiderstand
> R2 besteht aus sechs unterschiedlichen Serienwiderständen welche mittels
> Jumper aktiviert/deaktiviert werden können (64 Werte jedoch nicht so gut
> verteilt wie bei R2R Leiter)
> + nur 7 Widerstände
> + wenig Leitungen
> + nur die bits die aktiv sind müssen gesetzt werden (z.B. Lötjumper)
> - vielleicht nicht möglich alle 64 Werte voneinander zu unterscheiden
> weil die Werte nicht linear sind und daher manche Werte nah beieinander
> liegen.

Ähnliches Prinzip:
Konstantstromquelle im Auslesesystem + ADC.
In den Modulen sitzen verschiedene Widerstände. Durch den Konstantstrom 
ist die Spannung über dem Widerstand proportional zur Große.

von Joachim B. (jar)


Lesenswert?

suckiden schrieb:
> und wann
> immer eines der Module an das System angeschlossen wird

wenn wirklich nur IMMER NUR EINES angeschlossen wird!

Das war mir nach dem Lesen nicht ganz klar ist das hier die schönste 
Lösung
2^6 = 64 damit sind 50 möglich.

6 Bit als Hardkodierung sicher! = 6 Leitungen.
6 Bit als ADC ermittelt müsste noch so gehen = 1(2) Leitungen.

von Route_66 H. (route_66)


Angehängte Dateien:

Lesenswert?

Frank K. schrieb:
> suckiden schrieb:
>> Cyblord -. schrieb:
>>> Silicion Serial Number mit 1Wire Interface.
>
> Diese Dinger gibts auch mit EEPROM und OTP.
>
> fchk

von Michael S. (rbs_phoenix)


Lesenswert?

100%ig verstanden habe ich es auch nicht. Es gibt also 50 verschiedene 
Module!? Und sollen mehrere gleichzeitig an das System angeschlossen 
werden können? Sollen es verschiedene sein?

Wenn es wirklich um die krasse Reduzierung der Kontakte geht, wären 
meine Ideen diese:

 -> ein kleiner 6pin-µC. Sobald eine Flanke an pin x erkannt wird, wird 
pin x als Ausgang definiert, seriell das Bitmuster für das Modul 
ausgegeben (ohne separaten Takt) und anschließend wieder auf Eingang 
geschaltet. Der Master/das System muss seinen Ausgang natürlich schnell 
genug auf einen Eingang stellen, aber das ist ja kein Problem.

+ nur 1 Leitung (ich gehe davon aus, dass Vcc und GND ohnehin vorhanden 
sind)
+ das Muster kann 6bit lang sein (reicht für 50), kann aber beliebig 
erweitert werden (also 8bit, 12bit, .....). Somit ist die Übertragung so 
kurz wie nötig.
+ wenn mehrere Module gleichzeitig am System sein können, benötigt der 
steuernde µC im System pro Modul ein IO.

- Der µC muss programmiert werden. Allerdings bei 1000Stück und 50 
Modulen sind es im Schnitt 20 identische µCs. Bei Microchip (also PICs) 
kann man diese fertig programmiert bestellen. Software ist ja bei allen 
identisch, nur der Inhalt vom EEPROM variiert. Alternativ kann das 
Muster auch fest im Flash sein, falls der µC kein EEPROM hat (-> 50 
verschiedene *.hex). Man könnte aber auch die Anschlüsse zum 
programmieren (bei PICs 3) rausführen oder zumindest auf dem Modul einen 
5pol Header platzieren. 1000 µCs im Jahr programmieren, das bei 253 
Arbeitstagen á 8 Stunden: ca. 1 Modul alle 2 Stunden.. sollte machbar 
sein.



Ein Rechenexempel wäre es zu prüfen, was teurer ist: So wie oben 
beschrieben oder ein größeren, minimal teurereren µC mit 6 (oder mehr) 
zusätzlichen Eingängen, bei denen man via Lötbrücke oder 0-Ohm-R die 
Codierung vorgibt (die Pullups dann im µC). Diese brauchen ja nicht an 
den Stecker. Vorteil dabei wäre es, 1000 identisch vorprogrammierte µCs 
bestellen zu können, die die Modulcodierung nicht aus dem EEPROM/Flash 
sondern von den Pins holt. Man könnte damit auch 800 Module Rot, 50 
Grün, 100 Blau und 50 Regenbogenfarben machen, was mit den individuell 
vorprogrammierten µCs nicht ginge. Es sei denn, man hat von allen genug 
auf Lager. Wären aber im Extremfall 50x1000 µCs, damit bei einer 
Stückzahl von 1000 im Jahr auch 1000 gleiche Module hergestellt werden 
können... Recht unwirtschaftlich.

Ein PIC16F1503 z.B. hätte einen internen Oscillator, genug IOs mit 
Pullups und kostet bei 1000 Stück 51 Cent + 11 Cent Programmierung -> 
62Cent * 1000 = 620€. Diese müssen dann nur noch eingelötet werden. Ich 
denke bei dem Preis kann man nicht meckern.


Nichts desto trotz musst du dir überlegen, ob es zwanghaft gilt, um 
jeden Preis so wenig Kontakte wie möglich zu nutzen. Wenn 6 Kontakte 
kein Ding der Unmöglichkeit sind, würde ich ganz klar zu dem tendieren:

Joachim B. schrieb:
> 6 Bit als Hardkodierung sicher! = 6 Leitungen.

Man kann es sich auch unnötig schwer machen. Zumal sind die 62cent 
vermutlich mehr, als ein Stecker mit 5 zusätzlichen Kontakten mehr 
kostet. Doch ob das stimmt oder z.B. durch Platz ausgeschlossen ist, das 
kann keiner hier wissen ;) Vorteil bei der µC gestützten Methode wäre 
eine Erweiterbarkeit auf >64 Module, falls das irgendwann nötig wird.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

M. E. ist es die Frage, ob diese Module schon so etwas wie Controller 
beinhalten und über was die sonst so mit dem Master kommunizieren.
Dann ist die gute alte Gerätenummer, wie bei RS485 o.ä. üblich, 
vermutlich das einfachste und die RS485 kann gleich als robuste 
Kommunikation verwendet werden. Auch eine RS422/232 könnte benutzt 
werden und hätte als Bonbon Vollduplex.

von suckiden (Gast)


Lesenswert?

Hallo an alle!

danke für die zahlreichen Vorschläge und Einwände und Entschuldigung für 
die schlampige Formulierung :)
Ich werde nicht alle Kommentare zitieren versuche aber dennoch alle 
Fragen zu beantworten.

1. Ja es sollen insgesamt 50 verschiedene Module geben (ROT, GRÜN, BLAU 
war nur zur Veranschaulichung)
2. Ja Modul X soll immer die gleiche Seriennummer bekommen bsp. 000001
3. Es ist immer nur ein Module an das System angeschlossen
4. Die Module selbst beinhalten keinen Controller und sind relativ 
simpel aufgebaut (daher die Anforderung an wenig Bauteile und wenig 
Kontakte)
5. Die Anzahl der Kontakte niedrig zu halten ist eine der wichtigsten 
Punkte (minus Punkt für µc usw.)

Ich habe mich momentan für dieses Bauteil entschieden:
http://at.rs-online.com/web/p/speicherbausteine-eeprom/0540517/

Bietet locker genügend Speicher für die Seriennummer oder zusätzliche 
Informationen. Sehr klein und benötigt nur einen Pin.
Ich werde nächste Woche ein paar Tests machen um zu sehen wie es 
bezüglich Signalintegrität aussieht und ob es möglich ist Daten über die 
2,5m strecke zu lesen/schreiben. Die niedrigste Frequenz liegt bei 10kHz 
klingt für mich also vielversprechend.

von Georg (Gast)


Lesenswert?

suckiden schrieb:
> Sehr klein und benötigt nur einen Pin.

vernünftige Entscheidung, der Baustein ist auch genau dafür gedacht. Du 
musst nur die Frage klären, wie du die Chips von 50 Baugruppen einzeln 
ansprechen kannst, eine einzige Leitung wird dafür nicht reichen. Oder 
kannst du die Baugruppen jetzt schon einzeln ansprechen, ohne sie zu 
initialisieren?

Georg

von Frank (Gast)


Lesenswert?

suckiden schrieb:
> Ich werde nächste Woche ein paar Tests machen um zu sehen wie es
> bezüglich Signalintegrität aussieht und ob es möglich ist Daten über die
> 2,5m strecke zu lesen/schreiben. Die niedrigste Frequenz liegt bei 10kHz
> klingt für mich also vielversprechend.

Ein externer Treiber kostet auch nicht die Welt und wäre mit Sicherheit 
zuverlässiger.

Ein Mini uC wie ein ATtiny9 o.ä. wäre auch ne Option falls du später 
noch 1-3 IOs lesen/schreiben willst auf deinen Modulen. Der kann ja evtl 
das gleiche Protokoll verwenden wie dein Speicher. Dann kannst du mit 
Minderbestückung arbeiten und dir aussuchen welchen du platziert.

von suckiden (Gast)


Lesenswert?

Georg schrieb:
> Du
> musst nur die Frage klären, wie du die Chips von 50 Baugruppen einzeln
> ansprechen kannst, eine einzige Leitung wird dafür nicht reichen.

was genau meinst du damit?

Frank schrieb:
> Ein externer Treiber kostet auch nicht die Welt und wäre mit Sicherheit
> zuverlässiger.

hast du da ein Beispiel für mich? muss ja bidirektional funktionieren.

von Georg (Gast)


Lesenswert?

suckiden schrieb:
> was genau meinst du damit?

Du hast 50 solche Chips an einer Leitung. Wie sprichst du einen 
bestimmten davon an? Oder habe ich das ganze System missverstanden?

Georg

von Thomas E. (picalic)


Lesenswert?

Georg schrieb:
> Du hast 50 solche Chips an einer Leitung.

Hat er nicht!
Zitat (5 Beiträge weiter oben):
"3. Es ist immer nur ein Module an das System angeschlossen"

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.