Głupio się pytać o taką trywialną sprawę. Przeglądałem rózne fora i google i nic nie moge wymyślić. Napisałem program na atmega16 podłaczonego z wys. na HD44780. RS-PORTA2, E-PORTA3, D4-D7 -PORT4-7. Jestem pewien, że wszystko jest dobrze podłaczone (R/W do GND), ale program do wyświetlacza i tak nie działa. Prosze o jakąs sugestie.
Proszę używać znaczników [code] - uzupełniłem.
[zumek]
#include <avr/io.h>
#define LCD PORTB
#define E 3
#define RS 2
#define SET_E LCD |= _BV(E)
#define CLR_E LCD &= ~_BV(E)
#define SET_RS LCD |= _BV(RS)
#define CLR_RS LCD &= ~_BV(RS)
void write_to_lcd(char x){
SET_E;
LCD = ((LCD & 0x0F) | (x & 0xF0));
CLR_E;
SET_E;
LCD = ((LCD & 0x0F) | ((x & 0x0F) << 4));
CLR_E;
}
void write_command(char x){
CLR_RS;
write_to_lcd(x);
}
void write_char(char x){
SET_RS;
write_to_lcd(x);
}
void write_text(char * s){
while(*s){
write_char(*s);
s++;
}
}
void lcd_init(void){
int x;
int i;
for(i = 0; i < 3; i++){
write_command(0x3F) ;
for(x=0;x<5000;x++){}
}
for(i = 0; i < 2; i++){
write_command(0x2E);
}
write_command(0x28); // interfejs 4-bity, 2-linie, znak 5x7
write_command(0x08); // wyłącz LCD, kursor i miganie
write_command(0x01); // czyść LCD
write_command(0x06); // bez przesuwania w prawo
write_command(0x0C); // włącz LCD, bez kursora i mrugania
}
int main(void){
int x;
for(x=0;x<5000;x++){}
DDRA = 0xFF;
PORTA = 0xFF;
lcd_init();
write_text("Ala ma kota :D");
while(1){}
}Proszę używać znaczników [code] - uzupełniłem.
[zumek]