Hallo liebes Forum,
Ich möchte 10-Leiterkarten eindeutig über eine EEPROM-Adresse
identifizieren.
Da es keine verschiedenen Bestückungsvarianten geben soll, also auch
immer identische EEPROMs (gleiche Basisadresse), suche ich aktuell nach
einem EEPROM
mit mehr als 3 Adresspins. Gibt es sowas überhaupt?
Danke vorab!
Mehr informationen benoetigt....
- Meinst du I2C EEPROMs ?
- Werden 10 gleichen Platinen auf dem Gleichen moment angeschlossen ?
- Gib mal ein block diagramm, damit wir uns ein bisschen ein bild
erzeugen koennen
Patrick aus die Niederlaende
Justus schrieb:> Ich möchte 10-Leiterkarten eindeutig über eine EEPROM-Adresse> identifizieren.
Ist zwar kein EEPROM, hat aber ein paar Adreseepins mehr: 27C16
Mal mal bitte einen Plan, wie du dir das vorstellst!
PittyJ schrieb:> Könnte man die ID nicht in das Eeprom schreiben, wenn es genug Platz hätte?
Und dann alle am I2C parallel hängenden ID-EEPROMs mit der selben
Adresse auslesen...
Hallo,
sorry vergessen mitzuteilen: Es müssen zwingend I2C-EEPROMs sein.
Hier im Anhang, mal meine aktuelle Idee, ohne Anspruch, das das die
finale Lösung sein soll ;)
Ich muss irgendwie gewährleisten, das jedes PCB eindeutig erkennbar ist
und auch weiß, auf welcher Position es im Stack ist.
Eine Bestückungsvariante ist nicht möglich, also auch keine EEPROMs mit
unterschiedlicher Basisadresse im Chip.
Justus schrieb:> Ich muss irgendwie gewährleisten, das jedes PCB eindeutig erkennbar ist> und auch weiß, auf welcher Position es im Stack ist.
Das scheint mir wenig Problem zu sein!
Justus schrieb:> Es müssen zwingend I2C-EEPROMs sein.
Und damit dürftest du verloren haben!
Anselm schrieb:> Wie willst du die Position der Platinennummer im Stack detektieren?
Hast du die Adder übersehen? Auf 0 reagiert die erste Platine, auf 1 die
nächste, ...
Dieter W. schrieb:> Da bleibt wohl nur ein kleiner µ-Controller.
... als I2C-EEPROM.
Was dann auch den Adder einspart und die Daisy-Chain von 8 auf 2 Pins
eindampft. Bei Power-Up ist jeder DC-Out auf 1. Die erste Platine hat
DC-In auf 0 und nur dann reagiert der µC. Nun kann der zentrale
Controller den ersten ansprechen, per Protokoll umadressieren und dessen
DC-Out auf 0 setzen. Damit wird die zweite Platine ansprechbar, usw. Am
Ende hat jede Platine bis zum Powerdown ihre eigene Adresse und die
Zentrale weiss was wo steckt.
Dieter W. schrieb:> Da bleibt wohl nur ein kleiner µ-Controller.
Nur muss dann natürlich der Master mit dem Clock Stretching eines µC als
I2C-Slave leben können.
Pack auf jede Platine ein D-FlipFlop, dessen Ausgang an einen Adresspin
vom Eeprom geht (sozusagen als Enable) und als Data-In zur nächsten
Platine.
Dein Master kann dann (mit nur drei Leitungen statt der Vier in deinem
Plan, Data, Clock, Reset) ein Enable-Bit durch den Platinenstapel
durchschieben, die jeweils aktive Platine hat das Eeprom an der
gewünschten Adresse, die "andere" Adresse, auf der die 15 anderen
Eeproms liegen, sollte man halt nicht ansprechen.
Wie wird denn die restliche Elektronik auf den Platinen adressiert (oder
ist da nur das EEPROM drauf)? Vielleicht ist eine Symbiose möglich?
I2C-LED-Treiber haben bis zu 7 Adress-Pins und man bekommt ein paar
Ausgänge geschenkt. Extremes Beispiel: PCA9633, 16 Pins, 7 Adress-Pins,
4 Ausgänge.
Εrnst B. schrieb:> Dein Master kann dann (mit nur drei Leitungen statt der Vier in deinem> Plan, Data, Clock, Reset) ein Enable-Bit durch den Platinenstapel> durchschieben
2 Leitungen reichen. Nach 10 Clocks ist der Zustand der 10 D-FFs
bekannt.
Es reichen sogar 9 Clocks, der letzte D-FF hängt ja in der Luft.
Peter D. schrieb:> Es reichen sogar 9 Clocks, der letzte D-FF hängt ja in der Luft.
Wenn man die Leitung zum Master zurückführt, weiß man auch wie viele
Boards am Bus hängen.
Peter D. schrieb:> 2 Leitungen reichen. Nach 10 Clocks ist der Zustand der 10 D-FFs> bekannt.
Ja. Meine Sorge war, dass die Flipflops beim Power-On evtl. keinen
definierten Zustand haben. Aber man kann ja einmal "leer" durchtakten.
STK500-Besitzer schrieb:> Wenn man die Leitung zum Master zurückführt, weiß man auch wie viele> Boards am Bus hängen.
oder man schaut, nach wievielen Schritten kein EEProm mehr reagiert.
Ist in dem Platinenstapel einfacher zu verdrahten als die
Signalrückführung.
Was noch zu klären wäre, da habe ich im Microchip 24c32-Datenblatt nix
zu gefunden, ist ob das EEprom seine Adresspins bei jedem Request prüft,
oder nur einmal beim hochfahren.
Justus schrieb:> Ich muss irgendwie gewährleisten, das jedes PCB eindeutig erkennbar ist
Damit sind ja wohl irgendwelche Modultypen gemeint. Wieviele
unterschiedliche Platinen/Module gibt es?
Justus schrieb:> Es müssen zwingend I2C-EEPROMs sein.
Blöd auch. Ich würde da einfach SPI nehmen, und dann ein
PISO-Schieberegister pro Platine mit Pgeln hart kofigurieren (oder
Dipschalter dran machen). Und dann die Schleife jeweils mit einem
1k-Widerstand schließen. Mit ein wenig Nachdenken kann man sich aus aus
dem CLK mit einem einem RC-Glied den Latch-Enable generieren: wenn eine
Zeit lang kein Takt mehr kommt, wird der parallele Wert gelatcht.
"1" ------- Di Do ----o---- Di Do ----o---- Di Do ----o----x
7
| | |
8
1k 1k 1k
9
| | |
10
Di ----------<Buffer-----o-----<Buffer------o------<Buffer-----o----x
11
gepufferter Pegel letztes Device
12
"überschreibt" den --> 1k-Brücke
13
durch den 1k-Widerstand schließt Kreis
14
gebrückten Pegel
Die ID sollte immer 1 Null haben, und wenn nach n*8 Taktimpulsen nur
noch "11111111" kommt, dan sind alle Slaves durch.
Und weil man dafür Hardwaretechnisch zu viel Klimbim braucht würde ich
es in einen 6-Pin µC packen und per Software lösen. Und das Einlesen der
Konfig würde ich genauso per Software machen und das Timing dadurch
entspannen. Juckt ja nichts, wenn das Duchtakten der für 10 Slaves
nötigen z.B. 80 Bit dann 20ms dauert...
Daisy Chain geht gefühlsmäßig in die richtige Richtung - ist aber noch
nicht ganz stimmig.
Kannst du vielleicht die Steckplätze kodieren? 4bit Steckplatz-Nummer
über die backplane?
Justus schrieb:> sorry vergessen mitzuteilen: Es müssen zwingend I2C-EEPROMs sein.> Hier im Anhang, mal meine aktuelle Idee, ohne Anspruch, das das die> finale Lösung sein soll ;)>> Ich muss irgendwie gewährleisten, das jedes PCB eindeutig erkennbar ist> und auch weiß, auf welcher Position es im Stack ist.
warum nicht mit onewire Seriennummer?
http://www.dl8ma.de/Arduino/SerNum/
Joachim B. schrieb:> warum nicht mit onewire Seriennummer?
Du bist jetzt der dritte!
2 haben keine Antwort bekommen.
Bekommst du eine?
Hast du überhaupt die "Aufgabe" verstanden?
Es sollen nicht nur die Dinger identifiziert werden, sondern auch ihre
Position im Stapel.
Wie macht man das mit OneWire?
Ich hätte auch vorgeschlagen dass man die Backplane an 4 Pins codiert.
Damit würde man den "Adder" sowie zusätzliche 4 Pins nach dem Adder
sparen.
Zusätzlicher Vorteil:
Wenn ein Steckplatz dazwischen defekt ist oder einfach nicht gesteckt,
dann funktionieren die anderen noch weiter.
Das würde mit der Adder-Schaltug nicht gehen.
Markus M. schrieb:> Ich hätte auch vorgeschlagen dass man die Backplane an 4 Pins codiert.
Wenn er denn eine Backplane / Bus-Platine hat.
Man könnte die Posts/das Schema-Bildchen von Justus auch so
interpretieren dass die Platinen alle übereinandergestapelt werden
sollen, neudeutsch "HAT". Also mit Steckerleiste unten an der Platine,
Buchsenleiste oben, alles ineinandergesteckt.
Nimm doch einen I2C Multiplexer. Dann kannst du jedem Steckverbinder
einen eigenen Kanal zuweisen und du kannst immer die selbe EEPROM
Adresse nutzen. so machen wir das bei unseren Geräten mit der
Möglichkeit, mehrere Handstücke anzuschließen. Die haben alle die
Gleiche Adresse. Du musst nur den aktiven Multiplexerkanal deaktivieren,
bevor du zum nächsten Umschaltest, sonst gibt das eine veroderte Antwort
aus mehreren Eeproms. Frag nicht, woher ich das weiß...
p.s.: Das funktioniert natürlich nur, wenn du getrennte Anschlüsse für
die jeweiligen PCBs hast, also quasi eine Sternverkabelung. Wenn die
alle Seriell hängen, geht das nicht.
Welchen Sinn soll diese "Adressiermöglichkeit" haben?
In dem Blockschaltbild fehlen doch noch die Leitungen des
Kommunikationsbusses.
Mit dieser Schaltung kann man bis zu 16 EEPROMs von einem Master aus
ansprechen, aber was sollen die Slaves mit der Information anfangen, die
nur beim Master landet?
Justus schrieb:> Da es keine verschiedenen Bestückungsvarianten geben soll
Gilt das nur für das Adress-EEPROM?
Der Rest der Platine kann anderes sein?
Ansonsten wäre das ziemlich sinnfrei.
Frank K. schrieb:> Mir fällt da der hier ein:
Interessant!
Den habe ich noch nie gesehen.....
Wenn der, und der "Adder", dann zusammen billiger als ein Tiny (o.ä.)
sind, dann lohnt sich das evtl.
Runner schrieb:> Leider 1-Wire EEPROM
Das EEPROM in dem DS muss man ja nicht nutzen...
Der DS hat genug Adressen und kann 2 Ax Pins eines I2C EEPROM
manipulieren.
EAF schrieb:> Runner schrieb:>> Leider 1-Wire EEPROM> Das EEPROM in dem DS muss man ja nicht nutzen...>> Der DS hat genug Adressen und kann 2 Ax Pins eines I2C EEPROM> manipulieren.
Das bringt dem TO aber nicht viel. Wenn ein I2C EEPROM nur 3 Adressbits
hat, ergibt das auf dem I2C Bus maximal 8 unterschiedliche Adressen,
egal ob/wie an den Adressbits manipuliert wird. Er möchte aber 10
EEPROMs adressieren.
Runner schrieb:> Er möchte aber 10> EEPROMs adressieren.
Kann er ja machen....
Wie schon gesagt, die 2 Pio Pins nutzen um die Adressen umzuschalten.
Also alle EEPROM auf die selbe Adresse legen.
Diese Adresse niemals nutzen.
Dann kann man mit den 2 Pios nach Belieben bis zu 4 EEPROM zu einer Zeit
auf andere Adressen legen.
Also so eine Art Bank Switching etablieren.
EAF schrieb:> Dann kann man mit den 2 Pios nach Belieben bis zu 4 EEPROM zu einer Zeit> auf andere Adressen legen.> Also so eine Art Bank Switching etablieren.
Damit kriegst du aber immer noch nicht die Anforderung gelöst, die
Reihenfolge der Module zu erkennen.
Die Lösung mit den FlipFlop/Schieberegistern liefert das, ist billiger,
und braucht nur einen Pin mehr.
Frank K. schrieb:> Mir fällt da der hier ein:>> https://datasheets.maximintegrated.com/en/ds/DS28E04-100.pdf>> Da gibt es 7 Adresspins, sollte also reichen.Justus schrieb:> sorry vergessen mitzuteilen: Es müssen zwingend I2C-EEPROMs sein.
Naja, Zwänge werden meist von Menschen gemacht und wenn die Natur ein
Geschenk wie den DS28E04-100 bringt...
Mit einem DS2484 oder DS2485 verliert der 1-Wire-Bus seinen Schrecken.
Die konvertieren I2C zu 1-Wire und sorgen in Hardware für das korrekte
Timing.
Hallo,
erstmal herzlichen Dank für die rege Teilnahme und eure Ideen!
Jetzt brauche ich etwas Zeit um hier zu lesen, hatte gerstern keine Zeit
mehr.
Das I2C zwingend ist, hängt daran, das auf der Backplane (Gateways) noch
andere I2C-Slaves sitzen. Mit dem 1Wire-to-I2C-converter, liese sich
diese Problem aber umgehen.
Die Idee mit 1Wire finde ich aktuell am interessantesten, Danke!