Forum: Compiler & IDEs LCD mit 2 Controllern


von MüllersFranz (Gast)


Lesenswert?

Hallo,
ich habe ein LCD mit 2 Controllern, also auch 2 Enable-Leitungen.
Mit einer funktionierts auch, nur was ist mit der 2ten? Ich verwende
die LCD-Lib von P. Fleury und weiss da nicht so ganz, was ich machen
soll? Einfach 4 Lines angeben und Enable 1 + 2 zusammenanschließen?
Gruß
Martin

von Frank (Gast)


Lesenswert?

einfach wie 2 Displays verwenden. Die Datenleitungen sind für Beide
gemeinsam vorhanden und die Daten werden mit dem jeweiligen Enablepin
an das passende Display geschickt. Wenn du beide zusammenschaltest
passiert entweder garnix oder beide Displayteile zeigen dann dasselbe
an. Also du gibst ein Zeichen aus und es erscheinen Zwei.

bye

Frank

von MüllersFranz (Gast)


Lesenswert?

Hallo,
kennst du die LCD-Liv von Fleury? Die muss ich ja irgendwie
modifizieren, oder? Oder wie meinst du das mit "wie 2 Display"
verwenden? Dass die Leitungen bis auf Enable gemeinsam genutzt werden
ist mir schon klar, nur muss dass Programm ja wissen, wann es welches
Enable nutzen soll.

von Roland P. (pram)


Lesenswert?

Ich kenn die Lib jetzt nicht auswendig, hab sie zwar schon mal benutzt
aber weiß nicht ob sie 2 Displays unterstützt.
Falls nicht kannst dir ja 2 Makros schreiben die du vor jedem Befehl
absetzt:

#define USE_DISP1 ...setze Enable1, lösche Enable2...
#define USE_DISP2 ...setze Enable2, lösche Enable1...

dann gehts los:

USE_DISP1;
lcd_init(); // LCD1 initialisieren

USE_DISP2;
lcd_init(); // LCD2 initialisieren

USE_DISP1;
lcd_putc('A'); // Zeichen auf 1. Disp. ausgeben.
... usw

Wird halt schwierig wenn du Text über mehrere Zeilen ausgeben
möchtest.

Gruß
Roland

von MüllersFranz (Gast)


Lesenswert?

Hallo,
ich bin da noch nicht so erfahren, muss ich die makros in die
hauptdatei schreiben? Habs so versucht:
#define lcd1 PORTB |= (1<<3) | (0<<2);
#define lcd2 PORTB |= (0<<3) | (1<<2);
aber hat nicht geklappt.
die Enables hängen an PortB 1 + 2

von Rolf Magnus (Gast)


Lesenswert?

> Habs so versucht:
> #define lcd1 PORTB |= (1<<3) | (0<<2);

Damit schaltest du bit 3 ein und bit 2 schaltest du nich ein (und auch
nicht aus).

#define lcd2 PORTB |= (0<<3) | (1<<2);

Damit schaltest du bit 2 ein und bit 3 schaltest du nicht ein (und auch
nicht aus).
Du könntest es damit versuchen:

#define lcd1 PORTB |= (1<<3) &= ~(1<<2)
#define lcd2 PORTB &= ~(1<<3) |= ~(1<<2)

> aber hat nicht geklappt.

Grundregel: Immer dazu schreiben, was nicht geklappt hat und wie sich
das bemerkbar gemacht hat.

> die Enables hängen an PortB 1 + 2

Warum änderst du dann die bits 2 und 3?

von Rolf Magnus (Gast)


Lesenswert?

Ups, meinte natürlich:

#define lcd1 PORTB |= (1<<3) &= ~(1<<2)
#define lcd2 PORTB &= ~(1<<3) |= (1<<2)

von Roland P. (pram)


Lesenswert?

also ob das Bitgeschiebe jetzt stimmt weiß ich nicht. Es gibt /gab doch
mal so schöne Befehle wie SBI/CBI im Gcc.
Ich würd die Bits auf alle Fälle nacheinander setzen, sonst kennt man
sich schnell nicht mehr aus:
PORTB &= ~ (1 << PB1); PORTB |= (1 << PB2);

Das DDRB muss übrigens auch richtig gesetzt sein, damit PB1+2 erst mal
Ausgang werden. (Am Besten mal im Avrstudio durchsimulieren, ob
überhaupt am Port was ankommt)

Gruß
Roland

von MüllersFranz (Gast)


Lesenswert?

Mir ist da noch was gekommen und zwar muss ich in der lcd.h ja angeben,
wo enable angeschlossen ist. D.h. die lcd.c wird das auch irgendwo
benutzen. Wenn ich also davor im Hauptprogramm was ändere, wird das
doch sicher von der lcd.h mit jedem Kommando das ich daraus benutze bei
Bedarf neu eingestellt -> die Makros haben keine Wirkung mehr.

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.