2 LCD Module an einem AVR in C

OP #2532295
Lesenswert?

Hallo,

kann mir jemand helfen?

Ich hab hier die LCD Lib von Peter Fleury. Wie kann ich mit der 2 
Displays ansteuern? Habe bei den 2 Displays nur die Enable Ports an dem 
Mega32 auseinander, Datenports usw. sind zusammengeschlossen.

Oder kann ich auch einfach "per Hand" die Enable Ports auf 0 oder 1 
ziehen, ohne das die Lib was davon "mitbekommt"?
Die schreibt schließlich nur Daten - aber welches Display was davon 
empfängt ist egal, oder?

Grüße
Gast #2532327
Lesenswert?

Dominik Rein schrieb:
> Oder kann ich auch einfach "per Hand" die Enable Ports auf 0 oder 1
> ziehen, ohne das die Lib was davon "mitbekommt"?

Probier mal die enable Routine gegen eine eigene zu ersetzen, in der du 
den Parameter (LCD1 oder 2) übergibst und in dessen Abhängigkeit den 
entsprechenden enable bedient.

Ingo
Gast #2532329
Lesenswert?

"Per Hand E bedienen" geht nicht, weil die Funktionen in der Library 
ebenfalls E bedienen.

Du kannst aber 1-2 "Selectleitungen" am µC opfern und mit externen 
Logikgattern über eine Kombination aus E und Selectleitung das jeweilige 
LCD auswählen.

Zwei Selectleitungen und (ein halbes) Quad 2-input AND gate 74HCT08 
(74xx) wäre nicht so kompliziert. Wenn du noch ein NOT Gatter 
irgendwo frei hast, reicht eine Selectleitung.
#2533291
Lesenswert?

Dominik Rein schrieb:
> Ich hab hier die LCD Lib von Peter Fleury. Wie kann ich mit der 2
> Displays ansteuern?

Diese Lib habe ich noch nie probiert.
Wenn ich mich richtig erinnere, ist sie ein Weg, um ganz einfache Sachen 
höllisch kompliziert hinzuschreiben, bis keiner mehr durchsieht.

Bei meiner LCD-Lib ist es ein Kinderspiel, 2 LCD anzusteuern.
Man definiert sich einfach eine zusätzliche Variable lcd_select und 
wählt damit das LCD aus. Beim Init kann man auch beide LCDs auswählen, 
d.h. in einem Rutsch initialisieren. Natürlich gehen auch mehr LCDs.

In der Funktion lcd_nibble() setzt man dann den E-Pin entsprechend:
1
...
2
  if( lcd_select & 1<<0 )
3
    LCD_E0 = 1;
4
  if( lcd_select & 1<<1 )
5
    LCD_E1 = 1;
6
  _delay_us( 1 );                       // 1us
7
  LCD_E0 = 0; 
8
  LCD_E1 = 0;

Hier noch meine Lib:
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=102296


Bequemer Weise selektiert man das LCD beim Setzen der Position anhand 
der Zeile.
Hat man z.B. zwei 4-zeilige LCDs, dann ist Zeile 0..3 LCD0 und Zeile 
4..7 LCD1.



Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren