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