Hey, ich habe mir ein TG12864B-05 gekauft und möchte es mit einem Atmega 168PA betreiben. Das wichtigste sollte wie folgt angeschlossen sein: //PORT D0-D7 = Datenleitung //PORT B0 = D/I -> High = Data Signal | L = Instruction Signal //PORT B1 = R/W -> High = Read Mode | L = Write Mode //PORT B2 = EN -> High = Output data | L = Latches Data //PORT B3 = CS1 (H) -> Chip select for 0-63 //PORT B4 = CS2 (H) -> Chip select for 64-127 //PORT B5 = Reset (Auszug aus c file) VDD, VSS, LED+, LED- etc. erklärt sich denke ich von selbst. Bei der Kontrastspannung mit V0 und VEE bin ich mir zwar nicht zu 100% sicher gewesen mit der Umsetzung aber da ich mit dem Poti folgendes einstellen kann: http://abload.de/img/a3hudv.jpg Sollte es wohl funktionieren. Jetzt bleibt nur noch der Code. Ich habe es möglichst kompakt gehalten, man sollte sich also relativ schnell einen Überblick verschaffen können. Wäre sehr nett wenn mal jemand schaut. Bei Fragen stehe ich natürlich zur Verfügung. Schon mal danke und einen schönen Abend.
Und, funktioniert es? Kennst Du das Wort Abblockkondensatoren? Ein paar ms warten, bevor sich alles gerüttelt hat kann nicht schaden (50-100ms vor initlcd)
:
Bearbeitet durch User
Kennen ja, aber verwenden... Bisher lief jede Schaltung in Kombinaton mit Atmegas ohne. Ich hätte jetzt nur 22nF griffbereit, sollte das genügen?
Du musst noch den Befehl Display on an den Controller senden: RS_OFF; //Instruction senden setzen WriteDisplay(0x3F); //Befehl Display On // Tip von xxxxxxxx: Display Start Line bei seinen Displays nach Reset scheinbar nicht ok. // Das Bild ist dann in Y-Richtung verschoben. Dies soll helfen. NOP; NOP; WriteDisplay(0xC0); //Befehl Display Start Line 0 für jeden Controller senden RS_ON; //Zurück auf Daten
hI >// Tip von xxxxxxxx: Display Start Line bei seinen Displays nach Reset >scheinbar nicht ok. >// Das Bild ist dann in Y-Richtung verschoben. Dies soll helfen. > NOP; NOP; > WriteDisplay(0xC0); //Befehl Display Start Line 0 für jeden >Controller senden Das Startline-Register wird beim Reset auf 0 gesetzt. MfG Spess
Also ich habe nun folgendes gemacht: - Abblockkondensatoren zwischen VDD und VSS beim LCD sowie VCC UND GND beim Atmega - In der main methode warte ich anfangs noch 100ms - Meine Init Funktion sieht nun so aus:
1 | void lcd_init() |
2 | {
|
3 | |
4 | LCD_CMD_DDR |= (1<<DI) | (1<<RW) | (1<<EN) | (1<<CS1) | (1<<CS2) | (1<<RESET); |
5 | |
6 | lcd_chip_select(CHIP1|CHIP2); |
7 | |
8 | LCD_CMD_PORT &= ~(1<<RESET); |
9 | _delay_ms(30); |
10 | LCD_CMD_PORT |= (1<<RESET); |
11 | |
12 | lcd_write_cmd(LCD_ON,CHIP1|CHIP2); |
13 | lcd_write_cmd(LCD_DISP_START|0,CHIP1|CHIP2); |
14 | lcd_write_cmd(LCD_SET_ADD|0,CHIP1|CHIP2); |
15 | lcd_write_cmd(LCD_SET_PAGE|0,CHIP1|CHIP2); |
16 | }
|
Das Ergebnis kann man sich bestimmt denken, hat sich nicht viel getan :/
Ich fand es interessanter es selber zu versuchen - jedenfalls etwas. Ich orientiere mich ja schon an sowas. Sonst noch jemand eine Idee woran es liegen könnte?
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.