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
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
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.
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
> 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.)
>(Interrupts werden schon verwendet.)
Timer Interrupts?? Das ist doch ideal. Da wird die Tasterauswertung
einfach dazugemacht.
Nicht 195. => 165
@ 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.
> 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.
> 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?
>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.
@ 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
>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
@ 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
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
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...
>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
> 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...
Wofuer brauchst du einen Reset Pin ? Beim Load wird doch direkt der zustand der Tasten eingelesen da kann doch nichts undefiniertes kommen. Gruss Helmi
>Ich habe den entsprechenden Ausschnitt kopiert:
Und? 74xx165 geht zum Tastereinlesen. Wo ist das PRoblem?
Was soll das Bild aussagen?
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.
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.
@ 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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.