Aufgrund akuten Pinmangels möchte ich mein Arduino mit Ein- und Ausgangsregistern erweitern. Ausgangsregister sind kein Problem die bekomme ich zum laufen nur bei den Eingangsregistern hänge ich im Moment. Ich möchte zwei der 74HC165 von SGS-Thomson verwenden (Datenblatt im Anhang) Es gibts zwar zahlreiche Tutorials, jedoch stimmen die Pinbezeichnungen mit meinem nicht überein. Über das Register sollern Nur Taster geschalten werden Eine weitere Frage wäre noch ob man die 4 Datenleitungen des LCDs an das Ausgangsregister hängen kann? Danke im vorraus, Nico
Nicolas L. schrieb: > Ausgangsregister sind kein Problem die bekomme ich zum laufen nur bei > den Eingangsregistern hänge ich im Moment. > > Es gibts zwar zahlreiche Tutorials, jedoch stimmen die Pinbezeichnungen > mit meinem nicht überein. Und welche Pin-Bezeichnungen hättest du gerne? Bei den Eingangsregistern brauchst du eine Leitung um die Daten von den Eingangspins in das Schieber zu übernehmen und einen Takteingang, um sie zum µC rüberzutackern. Die anderen Eingänge mußt du lt. Datenblatt so mit festen Pegeln belegen, dass sie nicht stören. Den negierten Ausgang läßt du einfach offen. Für eine Kaskadierung brauchst du noch die seriellen Eingang.
Welchen Port nun - ploadPin - clockEnablePin - dataPin - clockPin ist. Ich hätte folgenden Code verwendet: http://www.arduino.cc/playground/Code/ShiftRegSN74HC165N
Hallo Von welchem Hersteller dein Shitf-Reg stammt ist hier nicht relevant, die Pin-Belegung aller 74xx165 ist gleich. Du kannst dir also das Datenblatt des Herstellers aussuchen wo dir die Bezeichnungen am besten verständlich sind. da1l6
Im datenblatt gibt es sowohl den Q7 als auch den /Q7 Pin. Welcher ist jetz der Daten Pin und muss beim kaskardieren dieser einfach mit dem Serial Pin des 1. Registers verbunden werden ?
Hallo Der Strich steht für invertiert. Also willst du vermutlich den anderen (nicht invertieren) pin benutzen. da1l6
Liest Du die Quelltexte eigentlich, die Du verwenden willst? > int ploadPin = 8; // Connects to Parallel load pin the 165 > int clockEnablePin = 9; // Connects to Clock Enable pin the 165 > int dataPin = 11; // Connects to the Q7 pin the 165 > int clockPin = 12; // Connects to the Clock pin the 165 Die einzelnen Anschlüsse erkennt man gut anhand der Funktion, die im Datenblatt bzw. im Quelltext beschrieben wird. parallel load = shift/load clock enable = clock inhibit Q7 = QH clock = clock
Neugier schrieb: > parallel load = shift/load > clock enable = clock inhibit > Q7 = QH > clock = clock Das war dass wo ich mir nicht sicher bin, und selbstverständlich lies ich mir den Quellcode durch. Der Register ist jetz soweit angeschlossen, Code drauf nur er schmeist mit im Serial Monitor wirre Werte raus. Mal High mal Low,...
Der 165er ist ein piso (parrallel in serial out) nimm den 164er für die inputs, dann klappts auch
Zum letzteren: 165er passt schon, es sollen ja 8 Leitungen parallel in den 165er eingelesen werden und diese dann seriell ausgegeben werden, damit sie der Arduino seriell einlesen kann. Ansonst - so gehts: Das unter der Erklärung des Arduino-Befehls 'shiftIn()' erwähnte 'If you're interfacing with a device that's clocked by rising edges, you'll need to make sure that the clock pin is low before the first call to shiftIn(), e.g. with a call to digitalWrite(clockPin, LOW).' beim 165 bitte vergessen und trotz Shiften mit steigender Flanke mit clock = H beginnen (da sonst das 1. (höchste) Bit nicht eingelesen wird. Zum Testen ist wichtig dass die 8 parallelen Eingänge auf GND oder Vcc liegen, da sonst die Werte 'herumspringen' (können). Bei mir funktioniert's so sehr gut (wobei ich, da nur ein 165er dranhängt der clockEnablePin fix auf GND liegt): int ploadPin = 8; // Connects to Parallel load pin of the 165 - // LowActive = L = Latch, H = Shift int dataPin = 11; // Connects to the Q7 pin of the 165 - // Data-Pin MSB-First (D7) int clockPin = 12; // Connects to the Clock pin of the 165 - // Shift = Rising Edge byte SerData = 0; // zum Speichern der 8 Bits unter Setup pinMode(ploadPin,OUTPUT); //Datenrichtung Latch, Clock, Data festlegen pinMode(clockPin,OUTPUT); pinMode(dataPin,INPUT); unter loop // 165er-Daten einlesen // 1. Daten durch L latchen digitalWrite(clockPin, HIGH); // entgegen Info: auch bei steigender Flanke Takt zuerst auf H lassen digitalWrite(ploadPin, LOW); delay(5); // 5 ms warten digitalWrite(ploadPin, HIGH); // 2. Daten einlesen SerData = shiftIn(dataPin, clockPin, MSBFIRST); Chris
Solange Du die Eingänge des Schieberegisters nicht beschaltet hast, ist klar, dass da zufällige Werte bei heraus kommen. Denn die Eingänge sind hochohmig.
Vergiss den 74HC165. Nimm den 74HC595. http://www.nxp.com/documents/data_sheet/74HC_HCT595.pdf Der hat extra ein Eingangsregister. Mit einem Extrapuls kopiert man dann die alle 8bit auf einen Schlag zum Ausgangsregister.
Parallel-rein-Seriell-raus ist schon anders als Seriell-rein-Parallel-raus. Ich würde für Eingänge schon auf den HC165 setzen. Ausnahme ist so was wie ein Tastenfeld abfragen, das ginge mit geschickter Beschaltung auch mit HC595.
Moin, nur so als Anregung. Lass das Gedöns mit den Schieberegistern und nimm was, wo du mehr bekommst :) Versuch mal so was hier: http://de.farnell.com/webapp/wcs/stores/servlet/Search?st=i2c+port+expander&catalogId=15001&categoryId=700000004227&langId=-3&storeId=10161 Grüße,
Huch, was für ein Nekromant hat denn den Thread hier ausgegraben. Muss das sein?
Den Quatsch mit langsamen I2C für Port-Expander verstehe ich nicht. Maximal (mit Glück und richtigen Komponenten) 1 MBit Durchsatz, eher 400 kHz und weniger. Die MCP23S17 via SPI können da wesentlich schneller angesprochen werden. Wobei das mit Schieberegister schneller, einfacher und günstiger geht. So 'nen Portexpander kostet ein Vielfaches eines simplen Schieberegisters. Und Nekromantie ist hier doch normal. Die Antwort von Gestern wiederholte ohnehin nur, was wenige Beiträge drüber vor 1 1/2 Jahren schon stand.
Dirk K. schrieb: > Die Antwort von Gestern wiederholte ohnehin nur, was wenige Beiträge > drüber vor 1 1/2 Jahren schon stand. Dann lies den alten Teil vom Thread mal genau. Es ist wohl wenig förderlich, wenn Unfug wie von irgendwer unkommentiert am Ende des Threads stehen bleibt. irgendwer schrieb: > Der 165er ist ein piso (parrallel in serial out) > nimm den 164er für die inputs, dann klappts auch
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.