Chciałbym aby cokolwiek wyświetliło by się na wyświetlaczu GLCD. Niestety nie udaje mnie się zapalić nawet pojedynczego piksela. W programie stosuję bardzo długie opóźnienia _delay_ms(10); , ale to dlatego żebym widział jak przełączają się stany logiczne na magistralach. Proszę o pomoc w uruchomieniu wyświetlacza.
Wyprowadzenia wyświetlacza GLCD
Kod programu:
Wyprowadzenia wyświetlacza GLCD
Kod programu:
#include<avr/io.h>
#include<stdio.h>
#include<util/delay.h>
// port szyny danych
#define LCD_DATA_PORT PORTD
#define LCD_DATA_PIN PIND
#define LCD_DATA_DDR DDRD
// port sygnałów sterujących
#define LCD_CTRL_PORT PORTB
#define LCD_CTRL_PIN PINB
#define LCD_CTRL_DDR DDRB
// sygnały sterujące
#define LCD_EN PB0
#define LCD_RW PB1
#define LCD_RS PB2
#define LCD_CSA PB3
#define LCD_CSB PB4
#define LCD_RST PB5
#define DISPLAY_SET_X 0x40
#define DISPLAY_SET_Y 0xB8
#define DISPLAY_START_LINE 0xC0
#define ON 0x3F;
// ustawienie stanu na linii CSA
#define SET_CSA LCD_CTRL_PORT |= (1 << LCD_CSA)
#define CLR_CSA LCD_CTRL_PORT &= ~(1 << LCD_CSA)
// ustawienie stanu na linii CSB
#define SET_CSB LCD_CTRL_PORT |= (1 << LCD_CSB)
#define CLR_CSB LCD_CTRL_PORT &= ~(1 << LCD_CSB)
// ustawienie stanu na linii EN
#define SET_EN LCD_CTRL_PORT |= (1 << LCD_EN)
#define CLR_EN LCD_CTRL_PORT &= ~(1 << LCD_EN)
// ustawienie stanu na linii RW
#define SET_RW LCD_CTRL_PORT |= (1 << LCD_RW)
#define CLR_RW LCD_CTRL_PORT &= ~(1 << LCD_RW)
// ustawienie stanu na linii RS
#define SET_RS LCD_CTRL_PORT |= (1 << LCD_RS)
#define CLR_RS LCD_CTRL_PORT &= ~(1 << LCD_RS)
// ustawienie stanu na linii RST
#define SET_RST LCD_CTRL_PORT |= (1 << LCD_RST)
#define CLR_RST LCD_CTRL_PORT &= ~(1 << LCD_RST)
int main(void)
{
int i;
DDRD=0xFF;
DDRB=0xFF;
LCD_CTRL_PORT=0x00;
LCD_DATA_PORT=0x00;
SET_RST;
CLR_CSA;
CLR_CSB;
_delay_ms(10);
CLR_EN;
CLR_RS;
CLR_RW;
_delay_ms(10);
LCD_DATA_PORT = 0x3F;
SET_EN;
_delay_ms(10);
CLR_EN;
CLR_EN;
CLR_RS;
CLR_RW;
_delay_ms(10);
LCD_DATA_PORT = 0x40;
SET_EN;
_delay_ms(10);
CLR_EN;
CLR_EN;
CLR_RS;
CLR_RW;
_delay_ms(10);
LCD_DATA_PORT = 0xB8;
SET_EN;
_delay_ms(10);
CLR_EN;
_delay_ms(10);
CLR_EN;
CLR_RS;
CLR_RW;
_delay_ms(10);
LCD_DATA_PORT = 0xC0;
SET_EN;
_delay_ms(10);
CLR_EN;
for(i=0;i<255;i++)
{
_delay_ms(10);
CLR_EN;
SET_RS;
CLR_RW;
_delay_ms(10);
LCD_DATA_PORT = i;
SET_EN;
_delay_ms(10);
CLR_EN;
}
}