AT90CAN mit T6963C Display Controller läuft nicht.
Hi, auch nach langem suchen hab ich nichts gefunden, das mir bei meinem
problem hilft, daher ein weiterer post.
Ich habe die Display implementierung in ein modul gepackt:
Code:
/*
240 x 180 LCD "lcd.c"
*/
#include <avr/io.h>
#include <util/delay.h>
#include "lcd.h"
// P R O T O T Y P E N
void lcd_init(void);
void lcd_putc(char sign);
void lcd_data(void);
void lcd_commando(void);
void lcd_reset(void);
void lcd_status(void);
void lcd_clear_ram(void);
void lcd_clear(void);
// G L O B A L E V A R I A B L E N
uint8_t LCD_DATA;
uint8_t LCD_CMD;
uint8_t LCD_STATUS;
void lcd_init(void)
{
//LCD Reset
lcd_reset();
// Adress Pointer setzen (0x0000)
LCD_DATA = 0x23;
lcd_data();
LCD_DATA = 0x01;
lcd_data();
LCD_CMD = 0x24;
lcd_commando();
//TEXT HOME ADDRESS
LCD_DATA = 0x00;
lcd_data();
LCD_DATA = 0x00;
lcd_data();
LCD_CMD = 0x40;
lcd_commando();
// GRAPHIC HOME ADDRESS
LCD_DATA = 0x02;
lcd_data();
LCD_DATA = 0x00;
lcd_data();
LCD_CMD = 0x42;
lcd_commando();
//TEXT AREA
LCD_DATA = 0x14;
lcd_data();
LCD_DATA = 0x00;
lcd_data();
LCD_CMD = 0x41;
lcd_commando();
//GRAPHIC AREA
LCD_DATA = 0x14;
lcd_data();
LCD_DATA = 0x00;
lcd_data();
LCD_CMD = 0x43;
lcd_commando();
// Offset Pointer setzen
LCD_DATA = 0x02;
lcd_data();
LCD_DATA = 0x00;
lcd_data();
LCD_CMD = 0x22;
lcd_commando();
//DISPLAY MODE
//0x97 is the appropriate commando (text, cursor blink)
LCD_CMD = 0x9C;
lcd_commando();
//MODE SET
LCD_CMD = 0x80;
lcd_commando();
//CURSOR_DEFINIEREN
//2 line cursor:
LCD_CMD = 0xA2;
lcd_commando();
//CURSOR POINTER SETZEN
LCD_DATA = 0x00;
lcd_data();
LCD_DATA = 0x00;
lcd_data();
LCD_CMD = 0x21;
lcd_commando();
}
void lcd_reset(void)
{
ENABLE_RESET;
_delay_us(10);
// pull RST up
DISABLE_RESET;
}
void lcd_commando(void)
{
//wait until proper status is available
do
{
lcd_status();
}
while (LCD_STATUS != MASK_1);
//set config for commando
WRITE_PORTA;
WRITE_PORTB;
ENABLE_COMMANDO;
ENABLE_WRITE;
DISABLE_READ;
// make COMANDO available on DATAPORT
PORTA = LCD_CMD;
CHIP_ENABLE;
_delay_us(DELAY_DATA_COMMAND);
CHIP_DISABLE;
}
void lcd_data(void)
{
//wait until proper status is available
do
{
lcd_status();
}
while (LCD_STATUS != MASK_1);
//set config for data
WRITE_PORTA;
WRITE_PORTB;
ENABLE_DATA;
ENABLE_WRITE;
DISABLE_READ;
// make DATA available on DATAPORT
PORTA = LCD_DATA;
CHIP_ENABLE;
_delay_us(DELAY_DATA_COMMAND);
CHIP_DISABLE;
}
void lcd_status(void)
{
//make porta input to read
READ_PORTA;
WRITE_PORTB;
// prepare controllines according to POWERTIP Datasheet
ENABLE_READ;
DISABLE_WRITE;
//chip enable
CHIP_ENABLE;
//portb sends commando
ENABLE_COMMANDO;
_delay_us(1);
//save status from port to var
LCD_STATUS = PINA;
CHIP_DISABLE;
DISABLE_READ;
LCD_STATUS &= (0x03);
}
void lcd_putc(char sign)
{
LCD_DATA = sign - 0x20;
lcd_data();
LCD_CMD = 0xC0;
lcd_commando();
}
nur leider bekomme ich auf dem Display nichts außer
hyroglyphen, regelmäßige streifen oder einfach garnichts zu sehen.
Das Display ist ein Powertip 240 x 128 Pixel Display.
Kann mir da jemand helfen ? Was mach ich falsch ?