Forum: Mikrocontroller und Digitale Elektronik Frage zur Schaltzeit vom 74HC138N


von Wolfgang (wolle_wolle)


Angehängte Dateien:

Lesenswert?

Moin,

ich nutze den 3-8 Decoder 74HC138N (DIP16 Gehäuse), um den Zustand von 
16 mechanischen Tastschaltern mit einen Atmega328P zu verarbeiten. Der 
Decoder ist notwendig, weil ich nur 5 Anschlüsse am Atmega328P frei 
habe.

Schaltung:jeweils 2 Taster liegen an einem Ausgang (Y0 bis Y7) des 
Decoders, und jeweils 8 Taster sind zu einer Bank zusammen gefasst. 
Jeder Taster ist mit einer Diode gegen Übersprechen geschützt. Siehe 
Skizze, Sorry für die Handzeichnung, musste gerade schnell gehen.

Ich nutze PC0, PC1 und PC2 als Digital Output für die Adressleitungen 
(A, B und C am Decoder) sowie PB0 und PB1 als Digital Input mit internen 
Pull-Ups für den Anschluss der zwei Taster-Bänke.

Das funktioniert auch. Allerdings muss nach dem Umschalten der Decoder 
Ausgänge eine Zeitverzögerung einbauen, bevor die Taster-Zustände sicher 
gelesen werden können. Was mich etwas verwirrt, denn die Propagation 
Delay Time des 74HC138 liegt beim Betrieb mit 5V und Raumtemperatur 
immer unter der Cycle Time des Atmega (16MHz -> 62,5ns). Konkret muss 
ich 4 Cycle Times nach dem Wechsel der Adresse warten, erst dann sind 
die adressierten Schalter auch auf GND gesetzt. Ich hätte erwartet, dass 
ich nur eine Cycle Time warten muss.

Wo liegt mein Denkfehler?

von Christian E. (cerker)


Lesenswert?

An PB0 und PB1 müssen die schwachen internen Pullups die 
Leitungskapazität aufladen bei einem L-H Übergang (der letzte Taster war 
gedrückt, der nächste ist es nicht). Die haben so 30kOhm, bei 10pF 
Leitungskapazität (schnell zusammen in so einer Matrix) sind das schon 
300ns Zeitkonstante.

Nutze externe Pullups von 2-5kOhm dann sollte das passen.

Gruß,
Christian

von Jens M. (schuchkleisser)


Lesenswert?

Wolfgang schrieb:
> Wo liegt mein Denkfehler?

An der unendlichen Geschwindigkeit des Strom bei der Ausbreitung durch 
den Decoder in die Dioden und Schalter. :D
Und da ist ja auch (k)ein Pullup und vollkommen irrelevante 
Leitungskapazitäten im Weg.
Plus das der Prozessor schneller die Befehle abarbeitet, als die IO 
funktioniert: Das lesen des Eingangs aus dem Befehl n+1 passiert extrem 
knapp vor dem schreiben des Ausgangs im Befehl n.
Das ist einfach die Füsick, die dir da reinspielt.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Wenn ein Taster öffnet muss die Eingangskapazität des Atmega erst noch 
aufladen, der hängt dann in der Luft. Zwei Pull-up-Widerstände könnten 
helfen.

von Andreas B. (abm)


Lesenswert?

"Reading the Pin Value
Independent of the setting of Data Direction bit DDxn, the port pin can 
be read through the PINxn register bit. As shown in Ports as General 
Digital I/O, the PINxn register bit and the preceding latch constitute a 
synchronizer. This is needed to avoid metastability if the physical pin 
changes value near the edge of the internal clock, but it also 
introduces a delay."

von Wolfgang (wolle_wolle)


Lesenswert?

Muchas gracias für die schnellen Antworten! Ich hab tatsächlich nur in 
Richtung Decoder geschaut. Total vernagelt. Man sollte sowas nicht 
Morgens auf die Schnelle zusammen basteln, sondern erst mal einen Kaffee 
nehmen und denken...

von Michael B. (laberkopp)


Lesenswert?

Wolfgang schrieb:
> Wo liegt mein Denkfehler?

Deine HC138 Eingänge haben keine pull down Widerstände, da wird der 
Eingang nur durch den Leckstrom der Dioden nach Masse gezogen.

Lege 10k von jedem Eingang nach Masse.

16 Dioden, 1 IC und 8 Widerstände sind natürlich viel Aufwand für 16 
Taster.

von Wastl (hartundweichware)


Lesenswert?

Wolfgang schrieb:
> Ich hab tatsächlich nur in
> Richtung Decoder geschaut. Total vernagelt.

Mit zwei Käfern á la 74HC165 würdest du dir Leitungen zum
Controller sparen und weniger von hinten durch die Brust ins
Auge programmieren müssen. Dioden zum "Entstören" bräuchtest
du auch keine ....

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Wenn man genug Kaffee getrunken hat, kann man auch zur Erkenntnis 
gelangen, dass man sich den 74138 komplett sparen kann, indem man 
Charlieplexing macht (Mit 5 GPIOs gehen bis zu 4x5 = 20 Tasten).
https://en.wikipedia.org/wiki/Charlieplexing
Kapitel: Input data multiplexing

Gruss
WK

von Axel S. (a-za-z0-9)


Lesenswert?

Michael B. schrieb:
> Wolfgang schrieb:
>> Wo liegt mein Denkfehler?
>
> Deine HC138 Eingänge haben keine pull down Widerstände, da wird der
> Eingang nur durch den Leckstrom der Dioden nach Masse gezogen.
>
> Lege 10k von jedem Eingang nach Masse.

Soll das ein Scherz sein? Oder bist du nur 5 Tage zu früh?

Wolfgang schrieb:
> Ich nutze PC0, PC1 und PC2 als Digital Output

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.