Hallo, ich bin Anfaänger mit AVR und versuche seit ner Woche ein EA DOGM163E - LCD-Display (5V) an nem ATTiny2313 im 4Bit-Modus laufen zu lassen. (SPI habe ich auch versucht, ohne Erfolg) Den Code habe ich im Netz gefunden ( nur Port C auf Port D geändert) * PD4 = RS * PD5 = Enable * PD0-PD3 = D4-D7 * R/W ist n.c. Allerdings bekomme ich keine Anzeige auf dem Display ? Gibt es einen Trick, wie man sehen kann, ob das Teil überhaupt geht ? Habe die PINS (PD0 bis PD5) mit ner LED geprüft, es flackert auch was. Die F_CPU ist angepasst... Ich weiß echt nicht weiter...
Marco Beyer schrieb:
> * R/W ist n.c.
Muss am Display auf GND, sonst wird das nix.
Habe beides schon probiert ( 5V und GND ). Gibt es an dem Display einen "Test", den man abfragen kann, wenn das Teil geht ?
lcd_write mit seinen 2 Nibbles kann bei der Initialisierung erst verwendet werden, wenn der 4bit Modus fertig ausgehandelt ist. Davor wird das zweite Nibble logischerweise missverstanden. Doku zum Display-Controller ST7036 lesen, da steht die korrekte Initialisierung für 4-Bit Modus drin. NB etwas Kosmetik: PORTD = PORTD | ( 1<<DDD5 ) ; DDD5 gehört zu DDRD. Also: PORTD |= ( 1<<PD5 ) ;
Apropos EA DOG: Die Dinger ähneln zwar der gängigen HD44780-Displays, anschlusstechnisch gibt es aber Unterschiede. In der Initialisierung auch. Hast du ein Schaltbild von deiner Verschaltung? Such lieber Code speziell für solche EA DOG Displays, keinen Standardcode für die HD44780-Displays.
habe leider keinen anderen Code gefunden, der ohne Probleme bei mir läuft. Habe die Port-Einstellung geändert. Die Anzeige bleibt leer...
@Peter: So ganz kommentarlos einem Anfänger den Code auf Basis der Anschlussvariante SPI unterzuschieben...
Das Display ist wie im Datenblatt angeschlossen (auf Steckbrett). 5V 4Bit...
Was ist mit CSB passiert? Das Teil kann man auch seriell ansprechen. Das zu passt Peters Code. Zu deinem 4-Bit Interface passt er nicht. Könnte aber, da Steckbrett, für dich einfacher sein, den Anschluss auf SPI zu ändern und seinen Code zu verwenden.
CSB int auf GND. Den SPI-Code würde ich auch testen, muß ihn aber erstmal zum laufen bringen... Der Takt sollte stimmen, sonst würde die LED an PB0 nicht mit 1Hz blinken...
bei Peters Code kommen noch die Fehler... Main.o: In function `main': X:\AVR-Programme\LCD-Display_2\default/../Main.c:7: undefined reference to `lcd_init' X:\AVR-Programme\LCD-Display_2\default/../Main.c:9: undefined reference to `lcd_pos' X:\AVR-Programme\LCD-Display_2\default/../Main.c:10: undefined reference to `lcd_text_' X:\AVR-Programme\LCD-Display_2\default/../Main.c:11: undefined reference to `lcd_pos' X:\AVR-Programme\LCD-Display_2\default/../Main.c:12: undefined reference to `lcd_text_' make: *** [LCD-Display_2.elf] Error 1 Build failed with 5 errors and 1 warnings... Weiß noch nicht warum
Weil Peter möglicherweise eine etwas urtümliche Umgebung verwendet. Anbei aktualisiert. Wirst aber trotzdem nicht drum herum kommen, beide .c Files zusammen zu übersetzen.
OK, der Code läuft. Mußte noch #include "lcd_drv.c" in MAIN.c hinzufügen... Ich werde mal das Steckbrett umbauen. Danke aber erstmal für eure schnelle Hilfe Aber ich muß dann doch in der MAIN.H die Ports zuordnen. (oder das Steckbrett danach anschließen)
1 | #define LCD_DI SBIT( PORTB, 3 )
|
2 | #define LCD_DDR_DI SBIT( DDRB, 3 )
|
3 | |
4 | #define LCD_RS SBIT( PORTB, 2 )
|
5 | #define LCD_DDR_RS SBIT( DDRB, 2 )
|
6 | |
7 | #define LCD_SCK SBIT( PORTB, 0 )
|
8 | #define LCD_DDR_SCK SBIT( DDRB, 0 )
|
9 | |
10 | #define LCD_CS SBIT( PORTB, 1 )
|
11 | #define LCD_DDR_CS SBIT( DDRB, 1 )
|
Ich habe laut Schaltplan SI, CLK, RS & CSB Ich nehme mal an SI=DI, RS=RS, CLK SCK & CSB=CS, bin ich da richtig ?
Marco Beyer schrieb: > #include "lcd_drv.c" > in MAIN.c hinzufügen... Geht auch ist aber trotzdem ein falscher Weg. Womit arbeitest Du, dem Studio? Dann einfach das zweite .c File zum Projekt hinzufügen. > Ich nehme mal an SI=DI, RS=RS, CLK SCK & CSB=CS, bin ich da richtig ? Ja.
Das zweite .c-File ist hinzugefügt. Aber wenn ich #include "lcd_drv.c" rausnehme geht es manchmal und nach dem Neustart von AVR-Studio gehts dann mal wieder nicht...
Hey, viele Dank für die Hilfe, mit SPI kann ich endlich mal was sehen. Es steht schon mal "Hallo" in der ersten Zeile. Laut Code sollte noch "Peter" darunter stehen, aber ich denke mal das liegt an den Einstellungen in der MAIN.h, da es für EA_DOGM162 ausgelegt ist. In der LCD_DRV.c kann man das ja änder, aber wie ???
1 | #ifdef EA_DOGM081
|
2 | lcd_command( 0x31 ); |
3 | lcd_command( 0x1C ); |
4 | lcd_command( 0x51 ); |
5 | lcd_command( 0x6A ); |
6 | lcd_command( 0x74 ); |
7 | #elif defined EA_DOGM162
|
8 | lcd_command( 0x39 ); |
9 | lcd_command( 0x1C ); |
10 | lcd_command( 0x52 ); |
11 | lcd_command( 0x69 ); |
12 | lcd_command( 0x74 ); |
13 | #else
|
14 | #error No LCD type defined !!!
|
15 | #endif
|
1 | #ifdef EA_DOGM081
|
2 | lcd_command( 0x31 ); |
3 | lcd_command( 0x1C ); |
4 | lcd_command( 0x51 ); |
5 | lcd_command( 0x6A ); |
6 | lcd_command( 0x74 ); |
7 | #elif defined EA_DOGM162
|
8 | lcd_command( 0x39 ); |
9 | lcd_command( 0x1C ); |
10 | lcd_command( 0x52 ); |
11 | lcd_command( 0x69 ); |
12 | lcd_command( 0x74 ); |
13 | #elif defined EA_DOGM163
|
14 | lcd_command( 0x39 ); |
15 | lcd_command( 0x1D ); |
16 | lcd_command( 0x50 ); |
17 | lcd_command( 0x6C ); |
18 | lcd_command( 0x7C ); |
19 | #else
|
20 | #error No LCD type defined !!!
|
21 | #endif
|
und
1 | void lcd_pos( u8 line, u8 column ) |
2 | {
|
3 | switch( line ){ |
4 | #ifdef EA_DOGM163
|
5 | case 2: column += 0x10; |
6 | case 1: column += 0x10; |
7 | #else
|
8 | case 1: column += 0x40; |
9 | #endif
|
10 | }
|
11 | lcd_command( 0x80 + column ); |
12 | }
|
Peter
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.