Atmega8 LCD, Taster, Optokoppler Multiplexing

Obi

Neues Mitglied
01. Dez. 2013
2
0
0
38
Donaustauf, Germany
Sprachen
Hi,
Also folgendes Thema.
Ich haben an einem Atmega8 ein LCD mit HD44780 Controller und gleichzeitig an den gleichen pins 4 Taster hängen.
Das ganze funktioniert soweit alles einwandfrei, aber ich wollte die 4 Taster durch optische Drehencoder von Grayhill's 62p Serie ersetzen. Die Drehencoder haben einen gemeinsamen GND für beide Richtungen, was bei meiner bereits vorhanden Schaltung mit multiplexing leider nicht gut ist.
Nun hab ich mir gedacht nehm zusätzlich noch optokoppler. Steuere diese mit meinen Encoder an und ersetzen die Taster einfach durch die Ausgänge der Koppler.
Ich reiche einen Schaltplan heut nachmittag nach.
Was haltet ihr davon?
MfG Stefan
 
Ich verstehe den Sinn des Optokopplers in dieser Schaltung nicht so ganz.

Ein Drehencoder hat zwei Ausgänge, A und B. Wenn Du den drehst, hast Du zwei Rechtecksignale an beiden Ausgängen, die aber versetzt sind. Sprich, wenn Du den Encoder im Uhrzeigersinn drehst, wechselt Ausgang A eher auf HIGH als B, gegen Uhrzeigersinn ist es genau umgekehrt. Das kannst Du auch im Datenblatt sehen. Deswegen frage ich mich, was Du mit den Optokoppler willst?
 
Hallo Stefan,

also deine Taster parallel zum LCD sind schon so eine Besonderheit. Wenn man die nicht entsprechend anschließt dann blockieren sie die Ausgabe auf dem Display. Du wirst wahrscheinlich nur dann gedrückt haben wenn du wußtest das das Programm grade eine Eingabe erwartet. Wenn man aber drückt wenn das LCD auch grade Daten bekommen soll, dann würgt man die LCD-Ausgabe ab. Das Problem wird dir bei den Incrementalgebern wohl sehr oft begegnen. Du wirst die Dinger nicht so anschließen und auswerten können wie es von Bascom vorgesehen ist wenn sie parallel zum LCD angeschlossen werden sollen.

Was die Optokoppler dazwischen sollen kann ich mir auch nicht so richtig denken. :confused: Eigentlich total sinnlos :p

Sieh dir mal mein halbfertiges/angefangenes/stillgelegtes/... Projekt TWI-1Wire-Analyzer im Projektebereich an. Dort habe ich vier Tasten parallel zum LCD betrieben die einem nicht in die Quere kommen können. So in der Art müßten die Incrementalgeber auch angeschlossen werden.

Gruß
Dino
 
Hallo,

also ich halte das für keine gute Idee - Display und Encoder an den gleichen Pins.
Taster mag ja noch gehen, aber Encoder liefern - je nach Stellung - ein statisches Signal an den Ausgängen, in diesem Fall nimmst du dir die vermutlich einzige Debug-Möglichkeit.
Wenn du echtes Multiplexing machen willst, brauchst du zusätzliche Gatter, die eine saubere Umschaltung ermöglichen, aber da stellt sich natürlich die Frage - was soll das ganze?
Die zusätzlichen Gatter benötigen auch Platinenplatz und sind nicht umsonst - da kannst du auch gleich einen größeren ATMega nehmen, der hat mehr Pins und kostet auch nicht die Welt.

gp177
 
Hallo,

Taster mag ja noch gehen, aber Encoder liefern - je nach Stellung - ein statisches Signal an den Ausgängen, in diesem Fall nimmst du dir die vermutlich einzige Debug-Möglichkeit.
Wenn du echtes Multiplexing machen willst, brauchst du zusätzliche Gatter, die eine saubere Umschaltung ermöglichen, aber da stellt sich natürlich die Frage - was soll das ganze?
Die zusätzlichen Gatter benötigen auch Platinenplatz und sind nicht umsonst - da kannst du auch gleich einen größeren ATMega nehmen, der hat mehr Pins und kostet auch nicht die Welt.
also für Anfänger ist so eine Lösung sicher nicht geeignet. Extra Gatter benötigt man aber auch nicht. Man benötigt lediglich einen weiteren Pin.

An die A/B-Ausgänge der Encoder legt man Dioden die mit der Kathode am Encoder liegen. Die Anoden sind dann an den Atmel-Pins parallel zum LCD-Datenpin. Die gemeinsamen Anschlüsse der Encoder legt man zusammen an den zusätzlich benötigten Pin. Mit diesem Zusatzpin kann man nun die Encoder an oder ausschalten. Pin auf GND heißt dann Encoder an da man die Encoder dann in die Lage versetzt über die Dioden die Eingänge auf GND legen zu können. Pin wieder auf Vcc und die Encoder sind aus und das LCD ist ungestört.

Gruß
Dino
 
An die A/B-Ausgänge der Encoder legt man Dioden die mit der Kathode am Encoder liegen.
Wozu die Dioden?

A und B an den Controller (und somit auch an das Display).
C an einen extra Pin (sagen wir PortB.0).

Soll das LCD mit neuen Daten beschrieben werden:
- die Pins A und B auf Ausgang schalten
- den C Pin auf Eingang schalten, ohne PullUp (sprich hochohmig). Der Drehimpulsgeber hängt also quasi in der Luft.
Wenn fertig:
- Die Pins A und B auf Eingang schalten (mit PullUp)
- den C Pin wieder auf Ausgang schalten (also somit verbunden zu GND)
und denn halt die A und B Pins abfragen.

Wirklich elegant find ich das aber auch nicht. Ich würd da auch einen etwas größeren Controller vorziehen (größer im Sinne der Pinanzahl). Man kann ja auch die ISP Pins mit verwenden (jetzt nicht beim Impulsgeber aber für das LCD z. B.).
 
Hi,

Wozu die Dioden?

A und B an den Controller (und somit auch an das Display).
C an einen extra Pin (sagen wir PortB.0).

Soll das LCD mit neuen Daten beschrieben werden:
- die Pins A und B auf Ausgang schalten
- den C Pin auf Eingang schalten, ohne PullUp (sprich hochohmig). Der Drehimpulsgeber hängt also quasi in der Luft.
Wenn fertig:
- Die Pins A und B auf Eingang schalten (mit PullUp)
- den C Pin wieder auf Ausgang schalten (also somit verbunden zu GND)
und denn halt die A und B Pins abfragen.

ganz einfach. Es können auch mal A-C und B-C durchgeschaltet sein. Damit hat man dann ne Verbindung von 2 Datenleitungen. Wird wohl so nicht funktionieren. Die Dioden sind zur Entkopplung. Damit könnte man also bei 4Bit-Betrieb entweder 2 Incrementalgeber anschließen oder einen der auch nen Taster hat und einen weiteren einzelnen Taster. Also zB ...
PD.4 --- D4 --->|--- A-Imp --\_______
PD.5 --- D5 --->|--- B-Imp --/ . . . . . |
PD.6 --- D6 --->|--- Taster ----------+
PD.7 --- D7 --->|--- extra Taster -----+ gemeinsame Freischaltung für alle 4 Kontakte
PB.0----------------------------------+

Ich hoffe man kann die ASCII-Art entziffern :rolleyes:

Man muß nur drauf achten das die Abfrage der Taster nicht mit der Ausgabe auf dem LCD kollidiert.

Also nach der Ausgabe auf dem LCD PD4-7 als erstes auf Eingang und die PullUps anschalten und dann PB.0 auf GND und nach Abfrage der Taster PB.0 als erstes auf Vcc und PD4-7 auf Ausgang schalten (PullUps / Portstatus egal). Mit Interrupts darf man da bei der Tastenabfrage auch nichts machen damit die Abfrage nicht auf einmal mitten in die LCD-Ausgabe platzt. Andersrum natürlich auch nicht. Aber das man LCD-Ausgaben nicht in Interruptroutinen packt sollte eigentlich bekannt sein :p

Code:
Reset DDRD.4   ' PD4 auf Eingang
Reset DDRD.5   ' PD5 auf Eingang
Reset DDRD.6   ' PD6 auf Eingang
Reset DDRD.7   ' PD7 auf Eingang
SET PortD.4    ' PD4 PullUp anschalten
SET PortD.5    ' PD5 PullUp anschalten
SET PortD.6    ' PD6 PullUp anschalten
SET PortD.7    ' PD7 PullUp anschalten
Reset PortB.0  ' PB0 auf GND - Taster aktivieren

--- jetzt die Taster abfragen ---

Set PortB.0    ' PB0 auf Vcc - Taster abschalten (Dioden sperren)
Set DDRD.4     ' PD4 auf Ausgang
Set DDRD.5     ' PD5 auf Ausgang
Set DDRD.6     ' PD6 auf Ausgang
Set DDRD.7     ' PD7 auf Ausgang

Gruß
Dino
 
Ah, das hatte ich nicht bedacht, alles klar, nu machts Sinn :)
Sorry für die Verwirrung hier
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)