Hallo zusammen, ich hab mir bei Conrad volgendes LCD "Anag Vision AV4040BNBW-WJ" gekauft, hat 4 Zeilen a 40 Zeichen. Bisher hatte ich immer 4x20 Displays, erst normal angeschlossen über AVR-Port und später über I2C mit einem PCF8574 IC. IM Anhang meine bisher, funktionierende Display.h für I2C Nun steh ich vor dem Proplem , wie die Datei so umschreiben das ich die beiden Chips ansprechen kann. Enable1 hab ich auf P7 und Enable2 ist auf P6. Ich hab zum einen die Idee das ich LCD1 oder LCD2 auswähle und dann jeweils Zeile 1 oder 2, oder zum andern das wenn ich Zeile 3 und Zeile 4 angebe über SetCursor, automatisch auf LCD 2 umgeschalten wird. Wie gesagt, zu beiten Ideen fehlt mir das Wissen zur Umsetzung und hoffe hier auf Antworten. MFG Hendrik
@Hendrik (Gast) >Nun steh ich vor dem Proplem , wie die Datei so umschreiben das ich die >beiden Chips ansprechen kann. Sieht so aus. >Enable1 hab ich auf P7 und Enable2 ist auf >P6. >Ich hab zum einen die Idee das ich LCD1 oder LCD2 auswähle und dann >jeweils Zeile 1 oder 2, Kann man machen. >oder zum andern das wenn ich Zeile 3 und Zeile 4 angebe über SetCursor, >automatisch auf LCD 2 umgeschalten wird. Das ist besser. Denn im Normalfall will die Anwendung von den "dreckigen" Internas der Ansteuerung nichts wissen und nur einfach die Daten in die Zeilen schreiben. >Wie gesagt, zu beiten Ideen fehlt mir das Wissen zur Umsetzung und hoffe >hier auf Antworten. Was willst du denn noch hören? Eine Schritt für Schritt Anleitung, was man ändern muss? Du musst dir die aktuelle Zeile und Spalte in Variablen merken, daraus wird die Auswahl LCD1/2 abgeleitet. Dann vielleicht noch die Erzeugung von nutzderdefinierten Zeichen auf beide LCDs erweitern, aber das ist Kosmetik. Viel mehr muss man nicht machen. Idealerweise solltest du eine etwas bessere Software nutzen, dann ist auch das Umbauen einfacher. Beitrag "Re: I2CLCD Library für HD44780 LCDs"
Falk B. schrieb: > Idealerweise solltest du eine etwas bessere Software nutzen, dann ist > auch das Umbauen einfacher. > > Beitrag "Re: I2CLCD Library für HD44780 LCDs" Diese Library hatte ich schonmal ausprobiert, wegen HintergrundLED ein/aus schalten, habs aber wieder beiseite gelegt weil mir AtmelStudio ständig Fehler brachte.
Hallo, Im Prinzip sind Deine Ideen richtig, denn das 4x40 besteht aus zwei "normalen" 2x40 LCDs mit zwei getrennten Enable-Eingängen. Du kannst einfach ausprobieren, wie es reagiert und dem entsprechend mal den oberen oder den unteren Teil ansprechen. Die Initialisierung muß in jedem Schritt beide Teile ansteuern. MfG
Guten Morgen hab mir das wesentlich komplizierter vorgestellt als wie es warscheinlich ist. Da brauch ich wohl nur bei void I2C_SetDisplayCursor(uint8_t y, uint8_t x) reinschreiben, wenn zeile 1 und 2 dann #define E_HIGH1 0b10000000 wenn zeile 3 und 4 dann #define E_HIGH2 0b01000000 sozusagen, oder muss ich woanders noch was ändern ?
@ Hendrik (Gast)
>sozusagen, oder muss ich woanders noch was ändern ?
Natürlich. Überall dort, wo ein Schreib- ode Lesezugriff auf das LCD
erfolgt. Z.B. bei der Datenausgabe . . .
Falk B. schrieb: > Natürlich. Überall dort, wo ein Schreib- ode Lesezugriff auf das LCD > erfolgt. Z.B. bei der Datenausgabe . . . Ich denke das ich erstmal direkt LCD1 und 2 anspreche: // Wechsel zwischen LCD1 und LCD2 void I2C_UseDisplay(uint8_t lcd) { if (lcd==1) { #define E_HIGH 0b10000000 // Enable LCD 1 = High } IF (lcd==2 { #define E_HIGH 0b01000000 // Enable LCD 2 = High } } Ist denke erstmal die einfachere Lösung für mich zumindest, wenn ich soweit alles fertig gelötet habe, werd ich es mal so testen. Muss ich die LCD_I2C_Init da jetzt 2 x aufrufen für jedes LCD einzeln ?
@ Hendrik (Gast) >Ich denke das ich erstmal direkt LCD1 und 2 anspreche: Ich denke, du solltest erstmal ein bischen in einem C-Buch blättern > if (lcd==1) > { > #define E_HIGH 0b10000000 // Enable LCD 1 = High > } Das geht so nicht. Lerne den Unterschied zwischen einer Textersetzung per #define und einer echten Variable. >Muss ich die LCD_I2C_Init da jetzt 2 x aufrufen für jedes LCD einzeln ? Sinnvollerweis natürlich nicht, weil man beide Initialisierungen in der Funktion vornimmt.
Falk B. schrieb: > Das geht so nicht. Warning 1 "E_HIGH" redefined [enabled by default] So in etwa meckert AtmelStudio auch gerade rum. Na ich verschiebe das erstmal auf nächstes Jahr^^, ich wünsch euch einen guten Rutsch. MFG Hendrik
1 | #define LCD_ENA1 0x10; /* PA4 */ |
2 | #define LCD_ENA2 0x20; /* PA5 */ |
3 | |
4 | if ( curr_lcd_line > 1 ) /* Zeile 0,1 --> ENA1, Zeile 2,3 --> ENA2 */ |
5 | {
|
6 | lcd_ena = LCD_ENA2; |
7 | }
|
8 | else
|
9 | {
|
10 | lcd_ena = LCD_ENA1; |
11 | }
|
12 | PORTA = PORTA | lcd_ena; /* Enable strobe aufuehren */ |
13 | _delay_us (LCD_STROBE_DELAY); |
14 | PORTA = PORTA & ~lcd_ena; |
... sonst dauert das hier noch endlose Wochen ...
Ich weiss das das nicht ganz auf die I2C-Version passt. Hoffentlich sehen das die anderen auch ...
Hallo und ein "Gesundes Neues" von mir. Ich hab mir nochmal meine Gedanken gemacht,sprich gegoogelt und folgendes geschrieben void I2C_UseDisplay(uint8_t LCD) { if ( LCD == 1 ) // LCD 1 ( Zeile 1 und 2 ) { #undef E_HIGH // löscht E_HIGH #define E_HIGH 0b10000000 // definiert E_HIGH neu (Enable1(PA7)) } if ( LCD == 2 ) // LCD 2 (Zeile 3 und 4) { #undef E_HIGH // löscht E_HIGH #define E_HIGH 0b01000000 // definiert E_HIGH neu (Enable2(PA6)) } } von Atmelstudio kommt erstmal ein "Programm soweit okey". Sollte das so funktionieren ?
Hendrik schrieb: > Enable1 hab ich auf P7 und Enable2 ist auf > P6. warum 2 Bit verschwenden? 1 Bit reicht doch für 2 Zustände high low, ggffs. ein Inverter zum Display Wenn nicht gerade am I2C Umstzer das die Hinrgrundbeleuchtung geschaltet werden soll dann kann man dieses Bit nutzen. Die Hintergrundbeleuchtung würde ich lieber auf einen PWM Ausgang legen um zu dimmen
@Hendrik (Gast) >Ich hab mir nochmal meine Gedanken gemacht,sprich gegoogelt und >folgendes geschrieben Aber kein C-Buch gelesen, dann das dauert deutlich länger, bringt aber meist auch DEUTLICH mehr Erkenntnisse! > #undef E_HIGH // löscht E_HIGH > #define E_HIGH 0b10000000 // definiert E_HIGH neu (Enable1(PA7)) > } AUA!!! NEIN! Vergiss #define und sämtliche Präprozessoranweisungen! Du brauchst eine normale Variable. >Sollte das so funktionieren ? NEIN!
Hendrik schrieb: > Ich hab mir nochmal meine Gedanken gemacht Ich glaub das dauert doch so lange. LCD_40x4 schrieb: > ... sonst dauert das hier noch endlose Wochen ...
LCD_40x4 schrieb: > Ich glaub das dauert doch so lange. Sorry wenns zu lang dauert, wie Falk schon richtig erkannt hat, es fehlt ein richtiges C-Buch. Hab bis jetzt nur das "AVR" von Florian Schäffer. Für mich ist das hier alles Neuland, da nur Hobby. Bis jetzt kopier ich meine display.h ins neue Programm und schreibe meinen Text und oder zahlen , fertig. Die display.h hab ich bis jetzt in keiner Zeile verändern müssen.
Guten Abend zusammen, ich habe gestern zufällig diesen Adapter im Netz gefunden für 4x40 LCDs. https://www.cctools.eu/download/Anleitungen/1040_V1-1.pdf Ist, denke ich, eine gute Alternative und ich muss die vorhandene LCD Routinen nicht unnötig verändern. Ich danke trotzdem für eure Hilfe...
@ Hendrik (Gast) >https://www.cctools.eu/download/Anleitungen/1040_V1-1.pdf Naja. >Ist, denke ich, eine gute Alternative und ich muss die vorhandene LCD >Routinen nicht unnötig verändern. Das wäre aber ein gute Übung gewesen. Wenn du schon vor so einer eher kleinen Anpassung wegläufst, wird das nie was mit dem Programmieren.
Falk B. schrieb: > Das wäre aber ein gute Übung gewesen. Wenn du schon vor so einer eher > kleinen Anpassung wegläufst, wird das nie was mit dem Programmieren. da geb ich dir voll und ganz recht, aber LCD_40x4 schrieb: > LCD_40x4 schrieb: >> ... sonst dauert das hier noch endlose Wochen ... In diesem Sinne
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.