Forum: Mikrocontroller und Digitale Elektronik Schieberegister und Latch


von Lars R. (larsr)


Lesenswert?

Hallo,

Ich bin neu und hier und habe direkt eine Frage.

Für ein kleineres Projekt von mir, benötige ich mehrere Schieberegister 
um insgesamt 48 Taster an einen ATmega32 anzubinden.

Als Schieberegister würde ich entsprechend viele 74HCT165 verwenden. 
Allerdings müsste ich vor jedem Schieberegister Latches vorschalten um 
auch kürzere Tasterbetätigungen auswerten zu können. Dafür habe ich 
gedacht, könnte ich 4044 verwenden.

Jetzt ist es aber so, dass der Platz sehr begrenzt ist und ich nur sehr 
ungerne 18 ICs unterbringen möchte. Daher habe ich nach einem IC 
gesucht, welches ein Schieberegister und Latches beinhaltet. Dabei fiel 
mir die 74HCT597-Schaltung auf. Aber ich glaube, dass diese nicht die 
richtige für mein "Problem" ist.

Wer kann mir weiterhelfen? Konkret bräuchte ich eine Empfehlung, wie man 
so etwas am Einfachsten macht.

Grüße, Lars

von Helmut L. (helmi1)


Lesenswert?

Am einfachsten macht man sowas in einer Tastenmatrix. Dann brauchst du 8 
Eingaenge und 6 Ausgaenge. Du setzt immer einen Ausgang und fragst dann 
ab welcher von den 8 Eingaengen kommt. Danach hast du dann deine Taste 
gefunden. Und keine Angst wegen der geschwindigkeit dieser Abfrage , der 
Prozessor ist immer noch schneller als du die Tasten druecken kannst.
Bestes Beispiel dazu : eine PC - Tastatur.
Die Tasten sind auch in einer Matrix angeordnet.

Gruss Helmi

von Matthias L. (Gast)


Lesenswert?

Wenn es sich um 48 Taster handelt, dann ordne die (elektrisch) als 
Quadrat an. So entsteht eine 7x7 Matrix mit einer unbesetzten Stelle.
Zur Auswertung benötigst du lediglcih ZWEI 74HC165. Der hat 
entsprechende Latches schon mit drin. Weitere (externe sind nicht nötig.

Die Auswertung erfolgt dann in Software.

von Peter D. (peda)


Lesenswert?

Lars R. wrote:
> Als Schieberegister würde ich entsprechend viele 74HCT165 verwenden.
> Allerdings müsste ich vor jedem Schieberegister Latches vorschalten um
> auch kürzere Tasterbetätigungen auswerten zu können.

Deine Furcht ist vollkommen unbegründet.

Wenn die Tasten nicht von Aliens bedient werden, reicht eine Abfrage 
alle 50ms dicke aus, um keine menschliche Betätigung zu verpassen.

Eine normale Betätigung dauert etwa 300ms.


Peter

von Lars R. (larsr)


Lesenswert?

> Wenn es sich um 48 Taster handelt, dann ordne die (elektrisch) als
> Quadrat an. So entsteht eine 7x7 Matrix mit einer unbesetzten Stelle.
> Zur Auswertung benötigst du lediglcih ZWEI 74HC165. Der hat
> entsprechende Latches schon mit drin. Weitere (externe sind nicht nötig.

Habe ich eventell das Datenblatt des 74HC195 falsch gelesen? Also ich 
habe nur das eigentliche Schieberegister und sonst nichts im Diagram 
gesehen.

Weiteres Problem ist, dass ich nur ungefähr zehn Mal pro Sekunde die 
Tastenzustände einlesen kann, daher dachte ich eigentlich, dass 
Multiplexing dafür nicht geeignet ist. Außerdem habe ich so viele 
I/O-Pins nicht frei...

Der Microcontroller ist damit beschäftigt einen komplexen Bus zu 
bedienen, daher kann das Programm nicht zu jeder Zeit die Tasten 
einlesen. (Interrupts werden schon verwendet.)

von Matthias L. (Gast)


Lesenswert?

>(Interrupts werden schon verwendet.)

Timer Interrupts?? Das ist doch ideal. Da wird die Tasterauswertung 
einfach dazugemacht.

Nicht 195. => 165

von Falk B. (falk)


Lesenswert?

@  Lars R. (larsr)

>Habe ich eventell das Datenblatt des 74HC195 falsch gelesen? Also ich

Du meinst den 165er. Der hat kein Latch.

>Weiteres Problem ist, dass ich nur ungefähr zehn Mal pro Sekunde die
>Tastenzustände einlesen kann, daher dachte ich eigentlich, dass

Wirklich? Selbst wenn du das hundert mal pro Sekunde machst ist das kein 
Thema. Das Ganze dauert nur ein paar Durtzend Mikrosekunden.

>Multiplexing dafür nicht geeignet ist. Außerdem habe ich so viele
>I/O-Pins nicht frei...

Tja, dann musst du Schieberegister nehmen. Wobei die Für Multiplexing 
weniger geeignet sind, kann man aber machen.

>Der Microcontroller ist damit beschäftigt einen komplexen Bus zu

Was für ein Bus? Was macht denn der uC?

Mfg
Falk

P.S. Wenn du WIRKLICH nicht schnell pollen willst oder kannst musst du 
jeder Taste ein RS-FlipFlop spendieren. Dann kannst du auch superkurze 
Tastendrücke erfassen. Praktisch nötig ist das aber seltenst.

von Lars R. (larsr)


Lesenswert?

> Timer Interrupts?? Das ist doch ideal. Da wird die Tasterauswertung
> einfach dazugemacht.

Leider nicht. Dieser Interrupt wird ungefähr 2774 Mal in der Sekunde 
aufgerufen. Wenn ich da mit den I/O-Pins für die Taster arbeiten würde, 
dann würde ich Takte verpassen...

> Nicht 195. => 165

Sorry verschrieben.

von Lars R. (larsr)


Lesenswert?

> Wirklich? Selbst wenn du das hundert mal pro Sekunde machst ist das kein
> Thema. Das Ganze dauert nur ein paar Durtzend Mikrosekunden.

Und ein Takt im Bus dauert ungefähr 30 Mikrosekunden.

> Tja, dann musst du Schieberegister nehmen. Wobei die Für Multiplexing
> weniger geeignet sind, kann man aber machen.

Du würdest also Schieberegister und dennoch Multiplexing vorschlagen?

> Was für ein Bus? Was macht denn der uC?

Der Bus ist geräteintern und nicht normiert. Der Microcontroller 
schreibt alles mit und erlaubt Manipulationen an bestimmten Stellen des 
Bus.

> P.S. Wenn du WIRKLICH nicht schnell pollen willst oder kannst musst du
> jeder Taste ein RS-FlipFlop spendieren. Dann kannst du auch superkurze
> Tastendrücke erfassen. Praktisch nötig ist das aber seltenst.

Wären dafür 4044 geeignet?

von Matthias L. (Gast)


Lesenswert?

>d ungefähr 2774 Mal in der Sekunde..

UNSINN. Optimal! Das durch achte geteilt ergibt ca 350 Abtastungen (der 
gesamten Matrix) je Sekunde. Ein guter Wert.


> lediglcih ZWEI 74HC165.

Ich korrigiere mich: Zur Abfrage de 7x7 (max 8x8) Matrix benötigst du:

1x 74xx165
1x 74xx595
7x Widerstand.

von Falk B. (falk)


Lesenswert?

@ Lars R. (larsr)

>Leider nicht. Dieser Interrupt wird ungefähr 2774 Mal in der Sekunde
>aufgerufen. Wenn ich da mit den I/O-Pins für die Taster arbeiten würde,
>dann würde ich Takte verpassen...

Klingt nach Soft-UART. Auch auch hier kann man duch clevere 
Programmierung das angehen. Anstatt 2774 Mal pro Sekunde ALLE Tasten zu 
prüfen, macht man in seiner Multiplexroutine nur einen Schritt vorwärts. 
Damit hat man dann 2774/7 = 396 komplette Tastenabfragen/s.

MfG
Falk

von Helmut L. (helmi1)


Lesenswert?

>Leider nicht. Dieser Interrupt wird ungefähr 2774 Mal in der Sekunde
>aufgerufen. Wenn ich da mit den I/O-Pins für die Taster arbeiten würde,
>dann würde ich Takte verpassen...

Du kannst die Abfrage der Tasten ja auf mehrere Interrupts aufteilen.
Also in jedem Interrupt nur eine Tastenzeile einlesen. Das dauert doch 
nur ein paar uS.

Gruss Helmi

von Falk B. (falk)


Lesenswert?

@ Lars R. (larsr)

>Und ein Takt im Bus dauert ungefähr 30 Mikrosekunden.

>Der Bus ist geräteintern und nicht normiert. Der Microcontroller
>schreibt alles mit und erlaubt Manipulationen an bestimmten Stellen des
>Bus.

Uhhh, das klingt schon nach Stress! Selbst bei 16 MHz und einem RISC ala 
AVR sind das gerade mal 480 Takte / Bustakt. Hmmm.

>Wären dafür 4044 geeignet?

Ja.

MfG
Falk

von Peter D. (peda)


Lesenswert?

Wenn Du der Meinung bist, Dein MC ist schon so sehr ausgelastet, daß er 
nicht mal mehr die Tastenabfrage schafft, dann nimm doch nen 2. MC dafür 
und lies ihn per SPI aus.

Ich habe allerdings noch nie erlebt, daß ne Tastenabfrage eine 
zeitkritische Task in einem Projekt war. Der Mensch ist einfach zu 
langsam.


Peter

von Lars R. (larsr)


Lesenswert?

Zu erst einmal vielen Dank für die Antworten!

Peter Dannegger wrote:
> Wenn Du der Meinung bist, Dein MC ist schon so sehr ausgelastet, daß er
> nicht mal mehr die Tastenabfrage schafft, dann nimm doch nen 2. MC dafür
> und lies ihn per SPI aus.

Daran habe ich auch schon gedacht. Vielleicht werde ich es auch so 
machen.

> Ich habe allerdings noch nie erlebt, daß ne Tastenabfrage eine
> zeitkritische Task in einem Projekt war. Der Mensch ist einfach zu
> langsam.

Ich werde es einfach mal mit dem Einlesen im Bus-Takt versuchen. Es kann 
ja nicht schaden. Später kann ich es ja immer noch anders machen.

Allerdings hätte ich noch eine Frage:

Gibt es kein fertiges Schieberegister mit Latches an den Eingängen? 
(Also so etwas wie 74HCT595 nur "umgedreht"?) Wenn es so etwas gäbe, 
dann könnte ich praktisch die Software gerade so und nur mit kleinen 
Modifikationen übernehmen.

Welchen Zweck erfüllt denn eigentlich der 74HCT597? Ich verstehe den 
Sinn dieses zusätzlichen Eingangsregisters nicht...

von Matthias L. (Gast)


Lesenswert?

>Gibt es kein fertiges Schieberegister mit Latches an den Eingängen?
>(Also so etwas wie 74HCT595 nur "umgedreht"?) Wenn es so etwas gäbe,
>dann könnte ich praktisch die Software gerade so und nur mit kleinen
>Modifikationen übernehmen.


WIE OFT DENN NOCH??

Lies doch mal die Antworten:

74 xx 165

von Lars R. (larsr)


Lesenswert?

> WIE OFT DENN NOCH??
>
> Lies doch mal die Antworten:
>
> 74 xx 165

Ich habe den entsprechenden Ausschnitt kopiert:

http://img155.imageshack.us/img155/1767/165nq7.gif

Wo gibt es da so etwas, wie ich es suche??? Es gibt keinen Reset-Pin...

von Helmut L. (helmi1)


Lesenswert?

Wofuer brauchst du einen Reset Pin ?
Beim Load wird doch direkt der zustand der Tasten eingelesen da kann 
doch nichts undefiniertes kommen.

Gruss Helmi

von Matthias L. (Gast)


Lesenswert?

>Ich habe den entsprechenden Ausschnitt kopiert:


Und? 74xx165 geht zum Tastereinlesen. Wo ist das PRoblem?

Was soll das Bild aussagen?

von Bensch (Gast)


Lesenswert?

Mein Gott, Walter äh Lars,

wie kann man über ein so einfaches Bauteil so lange diskutieren? Der 165 
hat zwar keine Latches, aber Eingangsregister. Wo ist das Problem?

Wir nutzen den zu Tausenden, um Tasten einzulesen. Nimm das Teil und 
fertig.

von Lars R. (larsr)


Lesenswert?

Irgendwie habe ich das Gefühl, dass ihr mich entweder nicht versteht, 
oder nicht verstehen wollt. Versteht mich jetzt nicht falsch, aber ich 
bin durchaus in der Lage zu behaupten, dass ich wenigstens ansatzweise 
weiß, wovon ich rede.

Meine erste Frage war, wie liest man am Besten eine so große Anzahl 
Taster ein. Ihr habt mir empfohlen dafür Multiplexing zu verwenden und 
ich habe das zur Kenntnis genommen und werde versuchen dies so zu 
realisieren. So weit, so gut. Ich bin euch für diesen Hinweis dankbar 
und darüber brauchen wir nichts mehr weiter zu schreiben.

Allerdings hatte ich noch eine Frage, denn ich wollte wissen, wie man 
die Eingänge eines 74xx165 puffern kann und ob dazu ein 4044 geeignet 
ist. Dazu hätte ich gerne gewusst, ob es IC gibt, welcher die 
Funktionalität des 74xx165 UND des 4044 kombiniert.

Deshalb würde es mich interessieren, ob der 74xx597 so ein IC ist. Habt 
ihr meine Frage verstanden? (Allerdings hat mich das Datenblatt 
verunsichert.)

Angenommen ich will viele Eingang jede Minute einlesen, aber der Impuls 
dauert nur eine halbe Sekunde. Dann bräuchte ich Schieberegister und 
vorgeschaltete Puffer. Ich hätte dann eine Taktleitung, eine 
Datenleitung, eine Loadleitung und eine Resetleitung für die Puffer... 
(Deshalb meine Frage nach dem Reset-Pin!)

Ich hoffe, dass meine Frage jetzt deutlich geworden ist, ansonsten 
müsste ich eventuell eine Skizze anfertigen.

von Falk B. (falk)


Lesenswert?

@ Lars R. (larsr)

>Allerdings hatte ich noch eine Frage, denn ich wollte wissen, wie man
>die Eingänge eines 74xx165 puffern kann und ob dazu ein 4044 geeignet

Man muss die Eingänge nicht puffern. Für deine realtiv exotische 
Anwendung kann man RS-FlipFlops nehmen (4044), muss man aber nicht 
unbedingt.

>ist. Dazu hätte ich gerne gewusst, ob es IC gibt, welcher die
>Funktionalität des 74xx165 UND des 4044 kombiniert.

Nein.

>Deshalb würde es mich interessieren, ob der 74xx597 so ein IC ist. Habt

Nein.

>Ich hoffe, dass meine Frage jetzt deutlich geworden ist, ansonsten

Ist sie. Wenn du das wirklich so machen willst geht keine Weg an demn 
4044 vorbei. Oder eben halt ein zweiter AVR, welcher wesentlich weniger 
Platz benötigt.

Mfg
Falk

von Lars R. (larsr)


Lesenswert?

@falk

Danke für deine klärenden Worte!

von Gerhard. (Gast)


Lesenswert?

Der 74HC589 ist "umgedreht";-) Mit dem kann man 8 Einganege per SPI 
einlesen.

http://www.onsemi.com/pub_link/Collateral/MC74HC589A-D.PDF

Gerhard

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.