Добрый день!
Подключаю дисплей UG-5664 к ATmega128.
Но он почему-то не работает. Пытаюсь хотя бы проинициализировать, чтобы выводился "мусор", но экран молчит. Контроллер нормальный, схема включения дисплея тоже вроде верна, сам дисплей живой.
Смотрел исходники самого производителя - там мудрёный код, но принцип инициализации от моего не отличается.
Помогите, пожалуйста.
Код
#include "ioavr.h"
#include "intrinsics.h"
#define SetBit(x,y) (x|=(1<<y))
#define ClrBit(x,y) (x&=~(1<<y))
#define XTAL_MHz 7.3728
#define delay_us(us) __delay_cycles((unsigned long int)us*XTAL_MHz)
#define delay_ns(ns) delay_us(ns/1000)
#define delay_ms(ms) delay_us(ms*1000)
#define DATA_PORT PORTC
#define DATA_DDR DDRC
#define CONFIG_PORT PORTA
#define CONFIG_DDR DDRA
#define CS 5
#define RES 3
#define WR 1
#define RS 2
#define RD 0
#define BS0 6
#define BS1 7
void LCD_WriteCommand(unsigned char data)
{
ClrBit(CONFIG_PORT, RS);
ClrBit(CONFIG_PORT, CS);
ClrBit(CONFIG_PORT, WR);
DATA_PORT = data;
SetBit(CONFIG_PORT, WR);
SetBit(CONFIG_PORT, CS);
SetBit(CONFIG_PORT, RS);
}
void LCD_WriteData(unsigned char data)
{
SetBit(CONFIG_PORT, RS);
ClrBit(CONFIG_PORT, CS);
ClrBit(CONFIG_PORT, WR);
DATA_PORT = data;
SetBit(CONFIG_PORT, WR);
SetBit(CONFIG_PORT, CS);
SetBit(CONFIG_PORT, RS);
}
void LCD_Init(void)
{
ClrBit(CONFIG_PORT, RES);
delay_ms(40);
SetBit(CONFIG_PORT, RES);
LCD_WriteCommand(0xFD);
LCD_WriteData(0x12);
LCD_WriteCommand(0xAE);
LCD_WriteCommand(0xB3);
LCD_WriteData(0x91);
LCD_WriteCommand(0xCA);
LCD_WriteData(0x3F);
LCD_WriteCommand(0xA2);
LCD_WriteData(0x00);
LCD_WriteCommand(0xA1);
LCD_WriteData(0x00);
LCD_WriteCommand(0xA0);
LCD_WriteData(0x14);
LCD_WriteData(0x11);
LCD_WriteCommand(0xB5);
LCD_WriteData(0x00);
LCD_WriteCommand(0xAB);
LCD_WriteData(0x00);
LCD_WriteCommand(0xB4);
LCD_WriteData(0xA0);
LCD_WriteData(0xFD);
LCD_WriteCommand(0xC1);
LCD_WriteData(0x9F);
LCD_WriteCommand(0xC7);
LCD_WriteData(0x0F);
LCD_WriteCommand(0xB9);
LCD_WriteCommand(0xB1);
LCD_WriteData(0xE2);
LCD_WriteCommand(0xD1);
LCD_WriteData(0x82);
LCD_WriteData(0x20);
LCD_WriteCommand(0xBB);
LCD_WriteData(0x1F);
LCD_WriteCommand(0xB6);
LCD_WriteData(0x08);
LCD_WriteCommand(0xBE);
LCD_WriteData(0x07);
LCD_WriteCommand(0xA5);
LCD_WriteCommand(0xAF);
}
int main( void )
{
DATA_DDR = 0xFF;
DATA_PORT = 0x00;
CONFIG_DDR = 0xFF;
CONFIG_PORT = 0x00;
SetBit(CONFIG_PORT, RD);
LCD_Init();
while(1)
{};
}
Схема включения