Hallo, mir erschliesst sich die genaue Funktion des 74hc165-Parallel-zu-seriell-Umwandlerchips nicht so richtig. Benötigt man wirklich 8 CLK-Takte um die 8 Bits aus dem Latch an Q7 ausgegeben zu bekommen ? Oder liegt D7 bereits an Q7 an (nach dem Latch-Laden) und man braucht nur 7 CLK-Takte um alle Datenbits seriell auszulesen ? Ich habe die unklare Stelle mit einem Pfeil markiert. Es sieht irgendwie nach 8 Takten aus, es geht aber der CLKINH runter mit dem ersten (aktiven ?) Takt.
@H-G Sch (haenschen) >Benötigt man wirklich 8 CLK-Takte um die 8 Bits aus dem Latch an Q7 >ausgegeben zu bekommen ? Nein, das MSB ist nach dem Laden direkt am Ausgang lesbar. >Oder liegt D7 bereits an Q7 an (nach dem Latch-Laden) und man braucht >nur 7 CLK-Takte um alle Datenbits seriell auszulesen ? Es reichen 7, wenn man nur ein Schieberegister hat. Aber der Empfänger, meist ein SPI, braucht 8 Lesetakte, um die 8 Bits zu lesen.
Mit fallender Flanke SH/LD gelangt Eingang H an QH. Wird CLKINH L wird mit den folgenden 8 Clocks geschoben.
Ich habe gleich 3 davon in Reihe an einem 8051 hängen :-) Dazu noch Layouttechnisch überkreuzte Eingangspins. Also mit den 8 CLK-Impulsen habe ich noch recht lustige (obwohl nicht richtige) Ergebnisse bekommen. Mit den 7 Impulsen fehlten sogar einige der Datenbits. Kann man eigentlich davon ausgehen dass der erste Takt in dem Diagramm an der Spitze des roten Pfeils gültig ist ? Also da wo CLKINH runtergeht ?
:
Bearbeitet durch User
Kurze Leitungen ? Blockkondensatoren an den ICs ? Die Daten werden wenn CLKINH=L mit der steigenden Flanke an CLK geschoben.
Hallo, es sind definitiv 8 Schiebetakte notwendig, um die Daten des 165 zu lesen. Siehe Anlage. Es kann zwar der QH ohne jeden Schiebetakt gelesen werden, aber da steht ja irgendwas aus der letzten Schiebeoperation drin. Grüße Manfred
@Manfred Koch (mkch) >es sind definitiv 8 Schiebetakte notwendig, um die Daten des 165 zu >lesen. Siehe Anlage. Es kann zwar der QH ohne jeden Schiebetakt gelesen >werden, aber da steht ja irgendwas aus der letzten Schiebeoperation >drin. Nö, nach dem erneuten, weil sowieso nötigen _LD Puls steht dort das neue H Signal an QH an.
Hallo nochmals, was Herr Brunner schreibt stimmt natürlich, Entschuldigung, ich habe mich vertan. Gruß Manfred
Wenn die rote Pfeilspitze als Takt zählt müssen es wirklich 8 Takte sein, also wird mit dem ersten Takt "H" gehalten obwohl es die ganze Zeit schon anliegt... Nunja meine Programmversion mit den 8 Takten hatte fast richtig angezeigt, die Nibble waren nur um eine Stelle verschoben :-) Ich werde wohl nicht drumherum kommen eine Debug-Hardware aufzubauen um jeden Eingangsport zu beschalten und die kompletten 8x3 Eingänge an den Ausgangsports anzeigen zu lassen. Ich musste mir sowieso einen Portmonitor aus 8 Leds und einem Widerstandsnetzwerk zusammenfunzeln ... bei so vielen Bugs braucht man so etwas schon :-)
Du must vielleicht bedenken, dass die Daten mit der Clock-High-Flanke weitergetaktet werden. Das bedeutet, dass Du sie mit der LOW-Flanke einlesen musst. Dass bedeutet, dass Du also 7.5 Takte brauchst. Der letzte halbe Takt ist dann "über", aber 7 reichen nicht. Bei SPI-Modulen im µC kannst du i.d.R. einstellen, auf welcher Flanke gesampelt werden soll.
In dem Diagramm sieht man keine Änderung bei der Low-Flanke des CLK-Taktes. Aber ich sah dass in scheinbar allen Tutorials im Netz der CLK-Enable-Eingang des Schieberegisters an den Controller geführt wird, also 4 Leitungen benutzt werden. Ich habe den CLK-Enable einfach auf GND verbunden und nur 3 Leitungen am Controller. Laut Datenblatt sollte das eigentlich auch funktionieren meine ich ... Edit: die Tutorials setzen erst den CLK auf 1 und dann den CLK-Enable auf Low dann gehts weiter. Leider sind das allesamt üble Arduino-Programme die nicht so einfach die genaue Taktung anzeigen.
:
Bearbeitet durch User
Was ist denn Deine Frage, was funktioniert denn nicht oder schon, auf was bezieht sich Deine Aussage mit der low-flanke?
Achim schrieb: > Was ist denn Deine Frage, was funktioniert denn nicht oder schon, auf > was bezieht sich Deine Aussage mit der low-flanke? Das mit der Low-Flanke bezog sich auf den Post von Achim S. Ich habe jetzt den Code umgeschrieben und die reingeschobenen Daten des ersten Schieberegisters 1:1 auf einem Ausgangsport anzeigen lassen (in Binärform mit LEDs). Es sieht aus als wäre alles um eine Stelle Richtung D7 verschoben. Ich habe (insgesamt drei mal) 8 mal CLK hochgeflankt und anschliessend jeweils den Portpin in das Carrybit eingelesen und anschliessend ein "RLC A" ausgeführt und den Akku nach 8 mal rotieren in den Speicher geschrieben. Theoretisch müssten dadurch alle 24 Bit der 3 kaskadierten 74hc165 eingelesen worden sein. Das Schieberegister von Interesse ist das erste in der Kaskade (kommt also als Letztes am Controller an), und es scheint dass es um eine Stelle zuviel geschoben wurde - also D0 des Schieberegisters auf D1 des Ausgabeports kommt. Am Ausgabeport und dessen Routine wird es wohl nicht liegen, denn ich habe schon soviel richtig ausgegeben ... Dickes EDIT: im letzten Absatz!
:
Bearbeitet durch User
Update: Ich habe das Programm versuchshalber so umgeschrieben, dass der Schiebe-CLK auf Low ist bevor ich Shift/Load durchführe. Leider brachte das keine Besserung: D0 des Schieberegisters gelangt auf D1 des Ausgangs. Ich hatte nämlich die Eingebung dass am Anfang der 24 Schiebetakte beim Shift/Loaden wegen dem High-CLK ein extra-Schiebetakt ausgelöst wird - scheint aber doch nicht der Fall zu sein. Edit: ich hänge das nächste mal mein fummeliges Binärzähler-Board dran und zähle die Schiebetakte.
:
Bearbeitet durch User
Die Messung mit meinem Zählermodul zeigt tatsächlich 25 CLK-Impulse an! Was aber kurios ist: Am Shift/Load-Pin des 74hc165 zeigt der Zähler ganze 26 Impulse an :-) Obwohl ich nur einen Durchlauf des Programms habe (Endlosschleife nach einem Durchlauf der Einleseroutine) und Shift/Load eigentlich nur einmal kurz auf Low und wieder zurück gehen sollte laut Programm. Ich habe die Zählungen wiederholt und es kam immer das Gleiche heraus. Übrigens war QH des ersten 74hc165 nur einmal High das heisst es ging da nur das eine an D0 angelegte Testbit durch das Schieberegister. Edit: vielleicht sollte ich die Schaltung, das Layout und die Port-Pinbelegung nochmal prüfen ...
:
Bearbeitet durch User
Ich habe den Thread nochmals durchgeschaut, aber ich habe Deinen Code noch nicht gesehen. Ich nehme an, Du toggelst selber an den Pins? Dann mach es doch so langsam, dass Du es mit dem Auge verfolgen kannst, also jede s ein Clockwechsel. Und eine 5V-LED an Clock und Dout etc. H-G S. schrieb: > Das mit der Low-Flanke bezog sich auf den Post von Achim S. H-G S. schrieb: > In dem Diagramm sieht man keine Änderung bei der Low-Flanke des > CLK-Taktes. Das ist der Grund, warum das Samplen mit der Low-Flanke erfolgt. Sofort Nach der High-Flanke stellt sich der nächste Ausgangspegel ein. Das Samplen kann zwar dementsprechend auch wenige ns vorher erfolgen, das ist aber schwierig, hier die Laufzeiten alle richtig zu berücksichtigen und dann ein "kurz-davor" zu realisieren. Darum schaltet man das neue Signal mit der High-Flanke weiter und sampled es mit der Low-Flanke. Wenn Du es mit der High-Flanke samplen würdest, bräuchtest Du ebenfalls 8 Takte, da Du mit jeder High-Flanke das vorherige Signal samplest.
Hallo, die 74xx165 schieben mit der Low->High Flanke an Clock. Natürlich gibt es dann verzögerungszeiten bis der Ausgang gültig ist. Die Timing-Diagramme sind ja auch im Datenblatt. CP L->H, minimale Clockbreite warten, CP H->L und Daten einlesen usw. wäre ein sinnvoller Ablauf. Gruß aus Berlin Michael
Ich löte jetzt zuerst ein paar Pullups an die Leitungen CLK und SH/LD und teste ob es dann funktioniert. Falls nicht werde ich wie von euch empfohlen Wartezyklen einfügen und erst nach der fallenden CLK-Flanke einlesen. Edit: die Idee mit den LEDs an den Signalen ist auch gut, obwohl sie mögliche Störimpulsflanken nicht anzeigen wird sondern nur statische Zustände. Aber vielleicht muss ich das am Ende doch machen :-)
:
Bearbeitet durch User
Ich bin jetzt einen Debug-Schritt weiter :-) Nachdem ich an CLK und SH/LD jeweils einen 4,7k Pullup lötete reduzierte sich die Impulszahl an SH/LD auf 1, daraus schliesse ich dass das Übersprechen damit beseitigt wäre. An CLK sind immer noch 24 Impulse, leider erscheint am Ausgang immer noch D0 auf D1 usw. - also um eine Stelle zu weit links. Ich habe noch dazu einzigartige Bitmuster an die Ausgangsports geschickt um festzustellen ob da ein Fehler ist. Die Muster wurden aber einwandfrei ausgegeben, also haben die Ausgangsports und die Ausgabesoftware sehr wahrscheinlich keinen Bug. Mir bleibt jetzt wohl nichts anderes übrig als (wie empfohlen) ein paar LEDs an CLK, SH/LD etc. anzubringen, die Impulsgeschwindigkeit in den Sekundenbereich zu reduzieren und das Ganze zu beobachten bzw. zu zählen.
:
Bearbeitet durch User
H-G S. schrieb: > An CLK sind immer noch 24 Impulse, leider erscheint am Ausgang immer > noch D0 auf D1 usw. - also um eine Stelle zu weit links. Ich nehme an, das erste Bit geht verloren. Wenn das so ist, (und du Weiterhin bei der Low-Flanke samplest), dann must Du erst samplen und dann clocken. Wenn das erste Bit doppelt ist, dann geschieht beim ersten Clock noch etwas anderes (z.B. mit CLKINH). Dann ignoriere den ersten Clock.
Nach langer Fummelei weiss ich jetzt dass direkt nach der steigenden Flanke des 23. CLK-Pulses der Ausgang Qh des letzten Schieberegisters das Bit D0 des ersten Schieberegisters anzeigt. Das heisst wohl dass tatsächlich irgendwo einmal zuviel geschoben wird - vermutlich gleich zu beginn. Ich könnte das vielleicht mit einem weiteren Versuch irgendwie testen ob es bereits vor dem ersten CLK-Puls eine Reaktion an Qh des ersten Schieberegisters gibt. Dazu müsste ich an die Eingänge des ersten Schieberegisters ein bestimmtes Muster anlegen.
H-G S. schrieb: > Nach langer Fummelei weiss ich jetzt dass direkt nach der steigenden > Flanke des 23. CLK-Pulses der Ausgang Qh des letzten Schieberegisters > das Bit D0 des ersten Schieberegisters anzeigt. Das deckt sich verdächtig mit der ersten Antwort! Falk B. schrieb: > Nein, das MSB ist nach dem Laden direkt am Ausgang lesbar. > >>Oder liegt D7 bereits an Q7 an (nach dem Latch-Laden) und man braucht >>nur 7 CLK-Takte um alle Datenbits seriell auszulesen ? > > Es reichen 7, wenn man nur ein Schieberegister hat. Aber der Empfänger, > meist ein SPI, braucht 8 Lesetakte, um die 8 Bits zu lesen. Du brauchst nach dem 23. Clk-Impuls doch noch die nächste Low-Flanke, um das Bit auch zu samplen. Mit der ersten Low-Flanke vor dem ersten Takt ergibt das 24 Samples.
Ich denke ich bin nach etlichen Messungen zu einem Abschlussergebnis gekommen: 1) Ein Puls an SH/LD (von High auf Low und wieder auf High) bewirkt dass sofort D7 von Schieberegister 3 an dessen Ausgang Q7 anliegt. 2) Die ansteigende Flanke des ersten CLK-Pulses schiebt D6 des Schieberegisters 3 in seinen Ausgang Q7. Das bedeutet wohl dass man sofort nach dem SH/LD-Puls den Wert von D7 des dritten Schieberegisters in den 8051 lesen muss weil er sonst mit dem ersten CLK-Puls verloren geht. Ausserdem muss man wohl nur 23 CLK-Pulse aussenden, um die verbleibenden 23 Eingänge einzulesen.
H-G S. schrieb: > 1) Ein Puls an SH/LD (von High auf Low und wieder auf High) bewirkt dass > sofort D7 von Schieberegister 3 an dessen Ausgang Q7 anliegt. Hattest du von einem Eingang mit der Bezeichnung "LOAD" ein anderes Verhalten erwartet? Die Daten erscheinen mit der fallenden Flanke am Pin. So steht es im Datenblatt.
Georg G. schrieb: > Hattest du von einem Eingang mit der Bezeichnung "LOAD" ein anderes > Verhalten erwartet? Die Daten erscheinen mit der fallenden Flanke am > Pin. So steht es im Datenblatt. Nunja, es hätte ja sein können dass ein internes Register/Latch geLOADet wird mit dem Signal. Etwa wie beim 74hc595 den ich auch in dem Projekt verbaut habe... Aber es scheint dass diverse Kippstufen geladen werden, und der Ausgang der letzten Kippstufe ist eben auch noch Ausgang des Gesamtwerks.
Ich habe das Programm auf Einlesen und dann 23x CLK+Einlesen umgestellt und siehe da es funktioniert. Natürlich erst nachdem ich Programmteile etwa 3 mal neu schreiben/eingeben musste wegen Bugs. Ist vielleicht nicht gut wenn die Glotze nebenbei läuft :-)
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.