Port "Multiplexer"

Gast #349188
Lesenswert?

hab gerade mal die analogvariante getestet, das geht sehr schön! Also
wenn du schnell was machen willst ist das eine gute sache!Hoffe dass
ich keinen fehler in der zeichnung hab aber bei mir gehts so :). viel
spaß
Angehängte Dateien:
OP #349189
Lesenswert?

[quote]
Mit 74HC165 brauchst du nur insg 3 Pins am Controller fuer egal
wieviele
Erweiterungen... aber gut, mach du mal :)
[/quote]

OK. Gibt's irgendwo ein stückerl Code, das zeigt, wie's geht? Das
vermisse ich ab und an in den Tutorials. Da sind oft schöne
Bauanleitungen und viiiiel Theorie, wie was wann wo ansteht, statt dass
man einfach noch 5 Zeilen Code dazuschreibt.
Ich find' kein Kommtar ist so informativ wie Code.

Aber gut: ich mach's mit einem 74HC165 - und wenn's das Letzte ist,
was ich mach.
PS: Wer überlegt sich eigentlich immer diese schönen Namen für die
Bauteile?
Gast #349190
Lesenswert?

Schieberegister haben aber den großen Nachteil das man immer eine
komplette Reihe durchschieben muss wenn man ein einzelnes Bit geändert
werden soll und wenns ne große Erweiterung werden dann muss man gleich
32mal oder mehr Bits durchschieben. Beim Latch ändere ich nur ein Bit
meines Registers ab und gebe es an das Latch weiter.

Ohne mir jetzt das Bauteil angeschaut zu haben, funktionieren
Schieberegister so man gibt auf eine Leitung ein Bit aus z.b. 0 dann
taktet man die Taktleitung kurz an dann wird die 0 reingeschoben, dann
legt man das nächste Bit auf den Eingang z.b. 1 und taktet wieder die
Taktleitung an. Dann hat man 01 im Schieberegister drin, mit dem 3ten
Pin wird man warscheinlich das ganze auf der parallelel Seite ausgeben.
#349191
Lesenswert?

@Thomas
Er will Taster/Schalter einlesen, nichts ausgeben...

@Gernot
Mach dich mal schlau, wie SPI (Serial Peripheral Interface)
funktioniert. Im Grunde ist das 2 im Controller eingebaute
Schieberegister. Dazu steht was im Datenblatt mit Codebeispiel, wenn
ich nicht irre. Ansonsten gibt es auch einen Artikel hier im Wiki, der
aber nicht besonders viel hergibt. Eine weiter Informationsquelle
koennte google sein...
Wenn du wegen jeder Kleinigkeit hier im Forum nachfragst, wirst du
schon bald nichtmehr ernst genommen. Sei ein bisschen
selbststaendiger.

gruss, bjoern.
#349193
Lesenswert?

Ist ja nicht boes gemeint, aber zB ein Schieberegister anzusteuern ist
keine grosse Kunst. OK, wenn man nicht erklaert bekommt wie es
funktioniert, wirds schwer, aber wiegesagt erstmal google oder
Forensuche benutzen und sich selber Gedanken machen. Wenn dann noch
Fragen sind, kannst du die ja auch gerne stellen. Aber wenn es
offensichtlich ist, dass dir grade was neues eingefallen ist und du es
dir erklaeren lassen willst, ohne dich selber anzustrengen, dann fallen
die Antworten auch dementsprechend aus.

Musst nicht alles woertlich nehmen, aber ich finde es ist eine schoene
Lektuere und zeigt mal, wie "die andere Seite" Fragen wahrnimmt.
http://www.lugbz.org/documents/smart-questions_de.html

gruss, bjoern.
OP #349194
Lesenswert?

Im Handbuch für den Chip finde ich diese Tabelle:
FUNCTION TABLE:
SH/LD CLK CLKINH
L     X   X     Parallel load
H     H   X     No change
H     X   H     No change
H     L   ^     Shift*
H     ^   L     Shift*

ich verstehe nicht ganz, was X und ^ (Pfeil nach oben) bedeutet. Auch
bin ich davon ausgegangen, dass ich nur 3 Pins brauche (SH/LD, CLK,
SER).
Ich hab mal ein Stück code angehängt, wie ich glaube, dass es
funktionieren könnte.
Sorry, ich will nicht nerven...
Angehängte Dateien:
#349196
Lesenswert?

CLKINH ist sowas wie ein Chipselect. Falls du verschiede SPI-Bausteine
am SPI-Bus hast, kannst damit auswaehlen, mit welchem du kommunizieren
willst. Dazu kommt noch, dass es active-low ist. Also bei HIGH-Pegel an
diesem Pin schert es sich nicht drum, was an CLK passiert und taktet die
Bits nicht durch. Ist es LOW, dann wird der CLK-Eingang aktiv und taktet
bei jeder steigenden Flanke den Inhalt des Puffers durch. Den Puffer
fuellt man vorher natuerlich mit LD, aber das hast du ja schon
verstanden.
CLK und CLKINH kann man in diesem speziellen Fall auch tauschen, da die
Funktion ueber ein AND-Gatter(eigentlich NAND) realisiert ist.

Wenn du nur einen Baustein, oder mehrere kaskadiert, also einer taktet
durch den anderen durch, bis es am Controller angekommen ist, am
SPI-Bus angeschlossen hast, kannst du CLKINH auch einfach fest auf GND
legen und hast nur noch 3 Leitungen uebrig.

gruss, bjoern.

PS: warum rede ich vom SPI-Bus? Man kann den Baustein entweder in
Software ansprechen, so wie du es realisiert, oder in Hardware, dann
kuemmert sich der Controller selber um den Takt und das einlesen und
schieben der Bits und gibt dir nach 8Bits bescheid dass du ein ganzes
Byte auf einmal bequem aus dem Puffer des Controllers auslesen kannst.

Die Softwareloesung hat einen schoenen Lerneffekt und ist flexibler,
die Hardwareloesung ist schneller und bequemer.
#349198
Lesenswert?

Und noch ein Nachtrag(erst denken, dann schreiben). Bei dem Baustein ist
LOAD und Chipselect das gleiche. Dh er laed den Zustand automatisch in
den Puffer, sobald er ausgewaehlt wird. Eigentlich gar nicht so dumm,
sonst braeuchte man ja auch 4 Pins...

Am besten guckst du dir den Schaltplan aus dem "Porterweiterung mit
SPI" Artikel nochmal an. Daraus ergibt sich eigentlich was was ist.
Was MOSI MISO SS SCK ist, kannst du aus dem Datenblatt des Controllers
rausfinden.

gruss, bjoern.
OP #349199
Lesenswert?

Super. Vielen Dank.
[quote]
Den Puffer fuellt man vorher natuerlich mit LD, aber das hast du ja
schon verstanden.
[/quote]
...weil ich das, wohin ich lesen will mit 0 vorbelege? Kann sein, dass
ich das nicht verstanden hab, sondern zufällig "richtig" :/

Jetzt hab' ich noch eine Frage:
Bei mir setze ich den CLK bei jedem Takt 1.0.1.0... Kapiert der 74HC165
die Geschwindigkeit, oder soll ich auf ein "rückbestätigungs"-Signal
achten? "while(PINxx&yy){;} *pData |= PINzz; "
#349200
Lesenswert?

>...weil ich das, wohin ich lesen will mit 0 vorbelege? Kann sein,
>dass ich das nicht verstanden hab, sondern zufällig "richtig" :/
Mach mich nicht schwach :(
Ich dachte der grobe Ablauf waere klar...
1. S/H 0->1    (chip wird ausgewaehlt/der aktuelle zustand
"gelatched")
2. Qh auslesen (eigentlich muesste das LSB jetzt schon da anliegen,
                bin mir aber nicht ganz sicher -> ausprobieren)
3. CLOCK 0->1  (Bits eins weiter schieben)
4. Qh auslesen (sollte jetzt das 2.Bit sein)
5. CLOCK 0->1
.
.
.

Wie schnell, langsam oder ungleichmaessig der Clock ist sollte egal
sein. Im Datenblatt findet man die Zeiten, die der Chip braucht, bis
nach der steigenden Flanke die Daten stabil am Ausgang anliegen. Aber
je nach Ausfuehrung(LS, HC, F, ALS, ...) ist das verdammt schnell...

gruss, bjoern.
#349202
Lesenswert?

Ja, hab mich kompliziert ausgedrueckt und dabei die Haelfte noch
verwurschtelt, weil ich das Datenblatt nur ueberflogen hatte.
Software-SPI wirst du jetzt wohl ohne Probleme hinbekommen. Trau dich
aber ruhig mal an Hardware-SPI ran. Damit gehts viel schneller, als die
Pins selber wackeln zu lassen. Code dazu gibts wiegesagt im Datenblatt
und die Einstellungen fuer CPOL und CPHA stehen im
Porterweiterungs-Artikel.

gruss, bjoern.

PS: Hast du eigentlich die Schieberegister schon da, oder programmierst
du ins Blaue?
#349204
Lesenswert?

>Welches Datenblatt? In meinem ist kein Code :(
Datenblatt zum Controller... Da ist ein Beispiel fuer Master/senden und
Slave/empfangen drin. Du brauchst aber Master/empfangen. Also musst du
beides wohl oder uebel miteinander verquicken. Viel Erfolg.
Ansonsten bleib halt bei der Softwareloesung.

>Der SPI ist der gleiche wie mein ISP - macht aber nix, oder?
Versuch macht kluch. Kommt auf deinen ISP-Adapter an. Wenns ein
vernueftiger ist, kann er drangesteckt bleiben, ansonsten musst du ihn
abziehen.

gruss, bjoern.

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