개발 환경은 코드비젼 사용하구 있습니다.
회로도는 ..제가 그린게 아니라서 없어요..그냥 달랑 받은거 한장 있음
대충 회로도 설명을 드리자면....
PORTA가 74573래치와 연결 되어서 있어서 어드레스와 데이터를 분리합니다.
ALE는 AVR의 PORTG.2 와 연결 되어 있구요, OE는 GND
LCD 연결은...A1->RS , A0->R/w...E->항상 LOW입니다. 데이터는 8비트라서 PA0에 연결 되어 있습니다.
여기서 의문이 있는데 RS와 RW가 573에서 분리해낸 어드레스 A1,A0에 연결 되어 있는데, 이렇게 제어가 가능한지가 의문이 생깁니다.
#define LCD_DATABUS (*(unsigned char *) 0x2000)
#define LCD_CONTROL (*(unsigned char *) 0x2100)
이렇게 메모리 번지 지정했구요..
레지스터 설정은..
MCUCR = 0x80;
XMCRA = 0x44;
XMCRB = 0x80;
이렇게 해서
LCD Command 명령을 날리는 함수를 이렇게 작성했습니다.
void LCD_command(unsigned char command)
{
LCD_CONTROL = 0x00;
LCD_DATABUS = command;
delay_us(10);
LCD_CONTROL = 0x01;
LCD_CONTROL = 0x00;
delay_us(50);
}
데이터 쓰는 함수는
void LCD_data(unsigned char data)
{
LCD_CONTROL = 0x01;
LCD_DATABUS = data;
LCD_CONTROL = 0x03;
delay_us(10);
LCD_CONTROL = 0x02;
delay_us(50);
}
void LCD_string(unsigned char command, flash char *string)
{
LCD_command(command);
while(*string != '\0')
{
LCD_data(*string);
string++;
}
}
그리고 메인에서
LCD_init();
// Global enable interrupts
#asm("sei")
LCD_string(0x80,"1234567890");
아무리 타이밍을 조정해 보고 해 도 디스플레이가 안됩니다. 도와 주세요.
데이터시트참조해드릴테니까 한번봐보세요~
그리고 오실로스코프로 신호가 제대로 나오는지 찍어보시는게
판단하기 제일빠르실꺼에요~
차근차근 오실로스코프로 데이터시트랑 다 확인해 보고 나서 해결했습니다.