www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Schieberegister und Latch


Autor: Lars R. (larsr)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lars R. (larsr)
Datum:

Bewertung
0 lesenswert
nicht 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.)

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>(Interrupts werden schon verwendet.)

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

Nicht 195. => 165

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lars R. (larsr)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lars R. (larsr)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lars R. (larsr)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lars R. (larsr)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich habe den entsprechenden Ausschnitt kopiert:


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

Was soll das Bild aussagen?

Autor: Bensch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Lars R. (larsr)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lars R. (larsr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@falk

Danke für deine klärenden Worte!

Autor: Gerhard. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.