Forum: Mikrocontroller und Digitale Elektronik Arduino + 74HC165


von Nicolas L. (nicolas_l41)


Angehängte Dateien:

Lesenswert?

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

von Michael A. (Gast)


Lesenswert?

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.

von Nicolas L. (nicolas_l41)


Lesenswert?

Welchen Port nun
- ploadPin
- clockEnablePin
- dataPin
- clockPin
ist.
Ich hätte folgenden Code verwendet:
http://www.arduino.cc/playground/Code/ShiftRegSN74HC165N

von da1l6 (Gast)


Lesenswert?

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

von Nicolas L. (nicolas_l41)


Lesenswert?

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 ?

von da1l6 (Gast)


Lesenswert?

Hallo

Der Strich steht für invertiert. Also willst du vermutlich den anderen 
(nicht invertieren) pin benutzen.

da1l6

von Neugier (Gast)


Lesenswert?

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

von Nicolas L. (nicolas_l41)


Lesenswert?

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,...

von irgendwer (Gast)


Lesenswert?

Der 165er ist ein piso (parrallel in serial out)
nimm den 164er für die inputs, dann klappts auch

von Chris F. (Gast)


Lesenswert?

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

von stefanus (Gast)


Lesenswert?

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.

von Helmut S. (helmuts)


Lesenswert?

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.

von Dirk K. (dekoepi)


Lesenswert?

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.

von nicht"Gast" (Gast)


Lesenswert?

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,

von nicht"Gast" (Gast)


Lesenswert?

Huch,

was für ein Nekromant hat denn den Thread hier ausgegraben. Muss das 
sein?

von Dirk K. (dekoepi)


Lesenswert?

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.

von N.B. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.