Hi,
tja ... wie erklärt man das mit dem Schieberegister ...
Das mit dem Zug ist schon recht gut. Stell dir mal vor du hast nen Zug mit 2 hintereinandergehängten Wagen. In jedem Wagen hast du 8 Abteile.
-|_|_|_|_|_|_|_|_|--|_|_|_|_|_|_|_|_|- . . . . Also 2 Wagen mit 8 Abteilen ... oder 2 Byte mit 8 Bit = 16 Bit gesamt
Dann hast du auch noch nen Bahnhof mit 16 Rampen
#|-|-|-|-|-|-|-|-|##|-|-|-|-|-|-|-|-|#####
Wenn der Zug nun in den Bahnhof einfährt bis die Abteile vor den Rampen stehen (in 16 Takten) ...
#|-|-|-|-|-|-|-|-|##|-|-|-|-|-|-|-|-|#####
-|_|_|_|_|_|_|_|_|--|_|_|_|_|_|_|_|_|-
Dann mußt du nur noch die Abteiltüren öffnen damit der jeweilige Fahrgast aus seinem Abteil auf die Rampe purzeln kann. Beim Schieberegister machst du das mit dem Übernahmepuls.
Wenn du statt 16 Takte aber 17 auf das Schieberegister gibst, dann ist dein Zug bereits wieder hinten aus dem Bahnhof rausgefahren. Damit bleibt die vordere Rampe unbenutzt und hinten purzelt ein Fahrgast in die Botanik
Fahrgäste = Bits
Wagen = Bytes
Rampen = D-Latches in den Schieberegister-ICs die die Bits aus dem eigentlichen Schieberegister aufnehmen und an den Ausgängen zur Verfügung stellen.
Wenn jetzt der nächste Zug mit 2 Wagen einfährt und seine Türen öffnet, dann schubsen die Fahrgäste des zweiten Zuges einfach die vorherigen von der Rampe.
Erstes Byte zu den Schieberegistern rausschieben (Daten und Datentakt)
zweites Byte zu den Schieberegistern rausschieben (Daten und Datentakt)
Übernahmepuls geben (Übernahmetakt) ... Türen auf, Fahrgäste raus.
Datentakt ist nicht der Übernahmetakt! Das sind zwei verschiedene Leitungen!
Soweit zum Schieberegister.
= = = = = = = = = = = = = = = = = = = = = = = = = = = = =
Nun zum I2C und den Portexpandern ...
Du hast nun zwei Bahnhöfe mit einer Weiche davor. Du schickst nun auch nur einen Waagen. Je nachdem wie du die Weiche einstellst, kommt der Wagen im einen oder anderen Bahnhof an.
Du stellst zuerst die Weiche, dann schickst du den Waagen los und der kippt wieder im Bahnhof seine 8 Abteile auf 8 Rampen auf dem Bahnsteig.
Da du aber 2 Bahnhöfe hast, sind es in der Summe wieder 16 Rampen.
Weiche = I2C-Adresse des Bausteins
Eigentlich aus ganz einfach.
Gegenüber den Schieberegistern wird aber im Atmel eine andere Hardware benutzt. Damit benötigst du andere Befehle. Die Bausteine arbeiten auch etwas anders. Im Grunde aber alles vergleichbar.
I2Cstart = Alle Bausteine ACHTUNG!
I2Csend Schreibadresse = Weiche einstellen
I2Csend Datenbyte = Waagen in den Bahnhof schieben, Türen auf und Fahrgäste auf die Rampe schubsen
I2Cstop = Alle Bausteine wieder vom I2C-Bus "abkoppeln" ( so ungefähr) ... Übertragung beendet ... Sendung ist aus ... oder so
Gruß
Dino