Moin
Ich habe hier ein 128 x 64 Pixel Grafik-LCD mit zwei KS0108 Controllern drauf.
Das LCD wollte ich auf einem Steckbrett mit einem ATmega16 (16MHz) in C in Betrieb nehmen.
Für diesen Zweck wollte ich die GLCD-Routine von ape nehmen.
http://www.mikrocontroller.net/topic...-glcd-routinen
Ich habe also das LCD an den Controller angschlossen, alle mir nötig vorkommenden Änderungen vorgenommen, geflasht und -> fail.
Das LCD bleib immer "schwarz", also alle Pixel sind an. Ist das ein Zeichen dafür, dass das LCD nicht mal initialisiert?
Zur Pinbelegung:
Verstehe ich das richtig, dass in der ks0108.h davon ausgegangen wird, dass die Pins "kontinuiertlich" sind? Also dass man zwei Ports hat, und bei den Datenleitungen wird immer 0-7 verwendet?
Hier meine ks0180.h (an der ks0108.c habe ich nichts geändert):
Code:#include <inttypes.h> #include <avr/pgmspace.h> #ifndef KS0108_H #define KS0108_H // Ports #define LCD_CMD_PORT PORTD // Command Output Register #define LCD_CMD_DIR DDRD // Data Direction Register for Command Port #define LCD_DATA_IN PINA // Data Input Register #define LCD_DATA_OUT PORTA // Data Output Register #define LCD_DATA_DIR DDRA // Data Direction Register for Data Port // Function Paramters #define INCREMENT_X 0 #define NO_INCREMENT_X 1 // Command Port Bits #define D_I 0x00 // D/I Bit Number #define R_W 0x01 // R/W Bit Number #define EN 0x02 // EN Bit Number #define CSEL1 0x03 // CS1 Bit Number #define CSEL2 0x04 // CS2 Bit Number // Chips #define CHIP1 0x00 #define CHIP2 0x01 // Commands #define LCD_ON 0x3F #define LCD_OFF 0x3E #define LCD_SET_ADD 0x40 #define LCD_SET_PAGE 0xB8 #define LCD_DISP_START 0xC0 // Fill Modes #define BLACK 0xFF #define CLEAR 0x00 // Uncomment for slow drawing // #define DEBUG struct displayPos { uint8_t x; uint8_t y; uint8_t page; }; struct font { uint8_t width; uint8_t height; PGM_P charData; }; // Function Prototypes void ks0108Enable(void); void ks0108Fill(uint8_t mode); void ks0108GotoXY(uint8_t, uint8_t); void ks0108Init(void); void ks0108SetDot(uint8_t, uint8_t); void ks0108ClearDot(uint8_t, uint8_t); void ks0108PutChar(char c, struct font font); void ks0108NewLine(uint8_t fontHeight, uint8_t offset); void ks0108PutString(char *string, struct font font); void ks0108PutStringP(PGM_P string, struct font font); char ks0108ReadData(uint8_t incXAdd); void ks0108WriteCommand(uint8_t cmd, uint8_t chip); void ks0108WriteData(uint8_t data); #endif
Ich habe die Leitungen DB0-DB7 des LCDs an PA0-Pa7 angeschlossen.
Die CMD-Leitungen sind entsprechend an PD0 - PD4 angeschlossen.
Reset habe ich extern mit einem Pullup nach Vcc versehen und einem 100nF KerKo nach Masse.
Wo ist mein Fehler?
Greez Jey







Zitieren

Lesezeichen