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
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
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
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
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?
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.
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?
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.
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
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.
> 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
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.
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
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...
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.
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.
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
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.
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!?
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.
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.
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.
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.
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.
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
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.
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.
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
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"