Witam
Jestem poczatkujący z uP i po "zabawie" z migającymi diodami i klawiaturką chcę odpalić LCD. Czytam tu już setny post o tym, ale ciągle nie wychodzi. Mam zestaw uruchomieniowy "nowy Elektronik 300-k". Programuje pod ATmegą16. LCD tam jest HY-1601C4 1x16, który poniekad jest zgodny z HD44780. Przebrnąłem juz przez podłaczenie i teraz cche go zainicjalizować i jest problem. Mam te osiem pół zaczernionych i postępuję wg. instrukcji z datasheet HD44780 i wg. pdfa znalezionego na elektrodzie ( z "elektronika dla wszystkich"). Steruije w trybie 8bit. Moj program wygląda astepująco: (szyna danych podłączona do portu D, RS do B0, R/W do B1, E do B2.
#include <avr/io.h>
#include <util/delay.h>
void Inicjalizacja(void)
{
DDRB=0xFF; // Ustawiam port B jako wyjścia
DDRD=0xFF; // Ustawiam port D jako wyjścia
}
void _delay_s(unsigned int __s) //opoznienie w sekundach
{
unsigned int iles;
for(iles=1;iles<=(__s*5);iles++) _delay_ms(200);
}
int main(void)
{
Inicjalizacja(); // Wywołanie funkcji inicjującej port B i D
_delay_ms(50);
PORTD |=_BV(4);
PORTD |=_BV(5);
_delay_ms(10);
PORTD |=_BV(4);
PORTD |=_BV(5);
_delay_us(150);
PORTD |=_BV(4);
PORTD |=_BV(5);
_delay_ms(20);
PORTD |=_BV(4);
PORTD |=_BV(5);
PORTD &=~_BV(3);
PORTD &=~_BV(2);
_delay_ms(20);
PORTD &=~_BV(4);
PORTD &=~_BV(5);
PORTD |=_BV(3);
_delay_ms(20);
PORTD &=~_BV(3);
PORTD |=_BV(0);
_delay_ms(20);
PORTD &=~_BV(0);
PORTD |=_BV(2);
PORTD |=_BV(1);
PORTD |=_BV(0);
}
No i po tej procedurze dalej jest te 8 pól zaczernionych- nic się nie dzieje. I pytanie czemu? Podczas inicjalizacji w ogóle trzeba coś robić z E? Co robię źle?(może nie wszystko;-))
Jestem poczatkujący z uP i po "zabawie" z migającymi diodami i klawiaturką chcę odpalić LCD. Czytam tu już setny post o tym, ale ciągle nie wychodzi. Mam zestaw uruchomieniowy "nowy Elektronik 300-k". Programuje pod ATmegą16. LCD tam jest HY-1601C4 1x16, który poniekad jest zgodny z HD44780. Przebrnąłem juz przez podłaczenie i teraz cche go zainicjalizować i jest problem. Mam te osiem pół zaczernionych i postępuję wg. instrukcji z datasheet HD44780 i wg. pdfa znalezionego na elektrodzie ( z "elektronika dla wszystkich"). Steruije w trybie 8bit. Moj program wygląda astepująco: (szyna danych podłączona do portu D, RS do B0, R/W do B1, E do B2.
#include <avr/io.h>
#include <util/delay.h>
void Inicjalizacja(void)
{
DDRB=0xFF; // Ustawiam port B jako wyjścia
DDRD=0xFF; // Ustawiam port D jako wyjścia
}
void _delay_s(unsigned int __s) //opoznienie w sekundach
{
unsigned int iles;
for(iles=1;iles<=(__s*5);iles++) _delay_ms(200);
}
int main(void)
{
Inicjalizacja(); // Wywołanie funkcji inicjującej port B i D
_delay_ms(50);
PORTD |=_BV(4);
PORTD |=_BV(5);
_delay_ms(10);
PORTD |=_BV(4);
PORTD |=_BV(5);
_delay_us(150);
PORTD |=_BV(4);
PORTD |=_BV(5);
_delay_ms(20);
PORTD |=_BV(4);
PORTD |=_BV(5);
PORTD &=~_BV(3);
PORTD &=~_BV(2);
_delay_ms(20);
PORTD &=~_BV(4);
PORTD &=~_BV(5);
PORTD |=_BV(3);
_delay_ms(20);
PORTD &=~_BV(3);
PORTD |=_BV(0);
_delay_ms(20);
PORTD &=~_BV(0);
PORTD |=_BV(2);
PORTD |=_BV(1);
PORTD |=_BV(0);
}
No i po tej procedurze dalej jest te 8 pól zaczernionych- nic się nie dzieje. I pytanie czemu? Podczas inicjalizacji w ogóle trzeba coś robić z E? Co robię źle?(może nie wszystko;-))