EEPROM mit 4 Adresspins gesucht

Gast #7152626
Lesenswert?

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!
Gast #7152714
Lesenswert?

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.
Angehängte Dateien:
#7152750
Lesenswert?

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.
#7152782
Lesenswert?

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.
#7152842
Lesenswert?

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.
Moderator (Firma: Titel) Persönliche Seite #7152864
Lesenswert?

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
                  8-Bit-ID
2
Master            Dev 1              Dev 2              Dev 3
3
                 00000100           00111100           00111100
4
    CLK ----------o------------------o------------------o-----------------x
5
                  v                  v                  v
6
     "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...
#7152909
Lesenswert?

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/
Gast #7152928
Lesenswert?

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?
(Firma: EleLa - www.elela.de) #7153050
Lesenswert?

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.
#7153059
Lesenswert?

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.
#7153458
Lesenswert?

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.
Gast #7153523
Lesenswert?

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?
Gast #7154176
Lesenswert?

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.
Gast #7154193
Lesenswert?

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.
#7154200
Lesenswert?

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.
#7154204
Lesenswert?

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.
Gast #7155165
Lesenswert?

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!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren