Forum: Mikrocontroller und Digitale Elektronik Frage zu 8-Line To 3-Line Encoder im Midi-Projekt


von W. S. (wole)


Lesenswert?

Hallo,
im Projekt Midi_Rekorder wurde vorgeschlagen, "als Erweiterung ein 
8-Line To 3-Line Priority Encoder (z. B.SN74LS348) für die Taster 
einzusetzen".

Ich plane eine Midi-Schaltung, bei dem  ca. 100 Taster inkl. LEDs zum 
Einsatz kommen.

Demzufolge werde ich immer zu wenig IO-Pins zur Verfügung haben.
Wie kann man sich die Schaltung bspw. mit einem 8/3-Encoder vorstellen?

wole

von Seltener Gast (Gast)


Lesenswert?

W. S. schrieb:

> Wie kann man sich die Schaltung bspw. mit einem 8/3-Encoder vorstellen?

Die sieben Taster sind dann nicht mehr direkt an den IO-Pins des µC 
angeschlossen, sondern an je einem Eingang des Prioritätsencoders. Die 
drei Ausgänge des Prioritätsencoders führen auf drei IO-Pins und liefern 
die "Nummer" der gedrückten Taste als 3-Bit-Binärzahl. Eigentlich 
solltest du an jeden Eingang des Prioritätsencoders einen 
Pullup-Widerstand anschließen (auch wenn es bei LS-Bausteinen 
theoretisch auch ohne funktioniert).

Wenn du allerdings nicht sieben, sondern hundert Taster hast, dann 
solltest du einen anderen Weg gehen, indem du diese (gemeinsam mit den 
LEDs) in einer Zehn-mal-zehn-Matrix anordnest. Dann brauchst du für alle 
Taster und LEDs zusammen höchstens dreißig µC-Pins, bei geschickter 
Realisierung sogar noch weniger. Wie es für die LEDs geht, steht hier:

  http://www.mikrocontroller.net/articles/LED-Matrix

Über die zusätzliche Einbindung der Taster denke einmal selbst nach. Ein 
Tipp dazu: Du kannst die Hälfte der IO-Pins (z.B. jene für die Zeilen) 
für LEDs und Taster gemeinsam verwenden. Falls du am µC einen freien 
A/D-Wandler Pin hast, kannst du die gedrückten Tasten einer Zeile über 
diesen einlesen und brauchst dann anstatt der zehn zum Einlesen 
benutzten IO-Pins nur mehr diesen einen A/D-Pin (und zehn Widerstände, 
um die einzelnen Spalten per A/D-Wandler unterscheiden zu können). 
Anregungen dazu (welche aber an deine Anforderungen angepasst werden 
müssten) gibt's hier:

  Beitrag "Taster-Matrix mit AD-Wandler"

Solltest du dann immer noch zuwenige Ports haben, kannst du die Anzahl 
deiner Ports mit (hintereinander geschalteten) Schieberegistern beliebig 
erweitern. Unabhängig davon, wie viele Schieberegister du verwendest, 
brauchst zu deren Anschluss nur (insgesamt) drei IO-Pins.

  http://www.mikrocontroller.net/articles/AVR-Tutorial:_Schieberegister

Eine Einsparung von IO-Pins für LEDs und Taster (ohne Verwendung eines 
A/D-Wandlers) ist alternativ auch durch das sogenannte "Charlieplexing" 
möglich - das geht aber nur mit echten IO-Pins und nicht mit 
Schieberegistern, da die Pins hier immer zwischen Ein- und Ausgang 
umgeschaltet werden müssen. Es gibt im Forum einige Threads zu diesem 
Thema.

von W. S. (wole)


Lesenswert?

Vielen Dank für die ausführliche Antwort!

Ich habe nicht alles genau verstanden, weil ich noch keine Schaltung 
selbst gebaut habe. Ich versuche gerade, lesend den Hardware-Kram zu 
verstehen. Wenn ich eine Chance sehe, das alles zu "blicken", dann gehts
erst mit den praktischen Erfahrungen weiter.

> Über die zusätzliche Einbindung der Taster denke einmal selbst nach.
Siehe oben :-) Wenn ichs mal kapiert habe, dann - ja. Ich kann einen 
Schaltplan nur mit Mühe und viel "raten" entziffern. Soweit zu meinem 
nicht vorhandenen Basiswissen (das ich gerade etwas erweitere).

> Tipp dazu: Du kannst die Hälfte der IO-Pins (z.B. jene für die Zeilen)
> für LEDs und Taster gemeinsam verwenden. Falls du am µC einen freien
> A/D-Wandler Pin hast
Hat das zufällig was mit den "ADC"-Pins zu tun?

>, kannst du die gedrückten Tasten einer Zeile über
> diesen einlesen und brauchst dann anstatt der zehn zum Einlesen
> benutzten IO-Pins nur mehr diesen einen A/D-Pin (und zehn Widerstände,
> um die einzelnen Spalten per A/D-Wandler unterscheiden zu können).
Das ist gerade etwas zu harter Tobak für mich :-(

> Anregungen dazu (welche aber an deine Anforderungen angepasst werden
> müssten) gibt's hier:
>
>   Beitrag "Taster-Matrix mit AD-Wandler"
>
> Solltest du dann immer noch zuwenige Ports haben, kannst du die Anzahl
> deiner Ports mit (hintereinander geschalteten) Schieberegistern beliebig
> erweitern.
Ist das ne software-seitige Geschichte?


Vielen Dank für die Links! Ich werde mir das anschauen. Gut ist ja schon 
mal, dass es anscheinend machbar ist, meine Idee zu realisieren. Aber da 
werde ich wohl noch das eine oder andere Mal auf Deinen/Euren Rat 
angewiesen sein.

Viele Grüße
wole

von Seltener Gast (Gast)


Lesenswert?

W. S. schrieb:

>> Über die zusätzliche Einbindung der Taster denke einmal selbst nach.

> Siehe oben :-) Wenn ichs mal kapiert habe, dann - ja.

Kein Problem. Auch dazu gibt's Beiträge im Forum, z.B. diesen hier:

  Beitrag "Tastatur Matrix mit LED Monitor"

>> A/D-Wandler Pin

> Hat das zufällig was mit den "ADC"-Pins zu tun?

Ja, das ist dasselbe. ADC = analog-to-digital converter = 
Analog-/Digital-Wandler = A/D-Wandler

>> Solltest du dann immer noch zuwenige Ports haben, kannst du die Anzahl
>> deiner Ports mit (hintereinander geschalteten) Schieberegistern beliebig
>> erweitern.

> Ist das ne software-seitige Geschichte?

Naja, Software brauchst du dazu auch. Aber zuerst ist es einmal 
Hardware. Das müsste aus dem von mir geposteten Tutorial-Link eigentlich 
hervorgehen ;-)

von W. S. (wole)


Lesenswert?

Wow - ich glaube, jetzt macht Nachdenken langsam Sinn :-))

>>> Solltest du dann immer noch zuwenige Ports haben, kannst du die Anzahl
>>> deiner Ports mit (hintereinander geschalteten) Schieberegistern beliebig
>>> erweitern.
>
>> Ist das ne software-seitige Geschichte?
>
> Naja, Software brauchst du dazu auch. Aber zuerst ist es einmal
> Hardware. Das müsste aus dem von mir geposteten Tutorial-Link eigentlich
> hervorgehen ;-)
Stimmt. Das habe ich gestern auch gesehen.

Ich werde mal etwas zeichnen und nachdenken... und weiter lernen... 
vielleicht klappts doch noch dieses Jahr, dass ich ne Schaltung 
hinbekomme...

*** Vielen Dank an Alle, die ihr Wissen in diesem Forum weitergeben! ***

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.