Witam!
Właśnie próbuję obsłużyć wyświetlacz oparty na sterowniku HD44780 w trybie 4-bitowym za pomocą ATtiny26 i mam z tym dziwny problem. Gdy proc nie jest wsadzony do podstawki - wszystko oczywiście działa tzn. na wyświetlaczu wyświetla się jedna zaczerniona linia. Jednak gdy wepnę ATtiny z programem, który ma obsłużyć wyświetlacz, po inicie zaczerniają się 2 linie i to w dodatku nie w pełni (jakby z połową kontrastu). Nie wyświetlają się znaki, które powinny się wyświetlić. Czemu tak się dzieje? Zasilam go z baterii paluszków 4x1.5V, przechodzi jeszcze przez diodę więc jest na niej spadek do ok. 5V. Czy możliwe, że tak się dzieje bo nie mam w układzie stabilizatora napięcia?Jak powinien wyglądać prawidłowy układ?
Dodam, że testowałem procedury initu/komunikacji z LCD przez LPT i wszystko śmiga.
Oto schemat układu, na którym teraz pracuję:
A oto kod:
Szukałem już wszędzie, ale nic z tego nie wyszło... Proszę o pomoc, długo się z tym męczę i nie widać efektów.
Jestem początkujący jeżeli chodzi o tego typu układy więc wybaczcie jeżeli nie wiem czegoś co jest dla Was oczywiste
Pozdrawiam,
Piotrek.
Właśnie próbuję obsłużyć wyświetlacz oparty na sterowniku HD44780 w trybie 4-bitowym za pomocą ATtiny26 i mam z tym dziwny problem. Gdy proc nie jest wsadzony do podstawki - wszystko oczywiście działa tzn. na wyświetlaczu wyświetla się jedna zaczerniona linia. Jednak gdy wepnę ATtiny z programem, który ma obsłużyć wyświetlacz, po inicie zaczerniają się 2 linie i to w dodatku nie w pełni (jakby z połową kontrastu). Nie wyświetlają się znaki, które powinny się wyświetlić. Czemu tak się dzieje? Zasilam go z baterii paluszków 4x1.5V, przechodzi jeszcze przez diodę więc jest na niej spadek do ok. 5V. Czy możliwe, że tak się dzieje bo nie mam w układzie stabilizatora napięcia?Jak powinien wyglądać prawidłowy układ?
Dodam, że testowałem procedury initu/komunikacji z LCD przez LPT i wszystko śmiga.
Oto schemat układu, na którym teraz pracuję:
A oto kod:
#define F_CPU 12000000L
#include <avr/io.h>
#include <util/delay.h>
// PORTA PINS
#define RSPIN 0x02
#define RWPIN 0x04
#define EPIN 0x08
#define RS_PIN_ENABLE PORTA |= RSPIN
#define RS_PIN_DISABLE PORTA &= ~RSPIN
#define RW_PIN_ENABLE PORTA |= RWPIN
#define RW_PIN_DISABLE PORTA &= ~RWPIN
#define E_PIN_ENABLE PORTA |= EPIN
#define E_PIN_DISABLE PORTA &= ~EPIN
typedef unsigned char byte;
void SendOrder(byte order)
{
RS_PIN_DISABLE;
E_PIN_ENABLE;
PORTA &= 0x0F;
PORTA |= order&0xF0;
E_PIN_DISABLE;
_delay_ms(1);
E_PIN_ENABLE;
PORTA &= 0x0F;
PORTA |= (order<<4)&0xF0;
E_PIN_DISABLE;
_delay_ms(1);
}
void SendData(byte data)
{
RS_PIN_ENABLE;
E_PIN_ENABLE;
PORTA &= 0x0F;
PORTA |= data&0xF0;
E_PIN_DISABLE;
_delay_ms(1);
E_PIN_ENABLE;
PORTA &= 0x0F;
PORTA |= (data<<4)&0xF0;
E_PIN_DISABLE;
_delay_ms(1);
}
void LCDinit()
{
_delay_ms(50);
E_PIN_DISABLE;
RS_PIN_DISABLE;
for(int i=0; i<3; i++)
{
E_PIN_ENABLE;
//PORTA &= 0x0F;
//PORTA |= 0x30;
PORTA &= 0x3F;
E_PIN_DISABLE;
_delay_ms(10);//5
}
E_PIN_ENABLE;
PORTA &= 0x0F;
PORTA |= 0x20;
E_PIN_DISABLE;
_delay_ms(1);
SendOrder(0x28); // interfejs 4-bity, 2-linie, znak 5x7
SendOrder(0x08); // wyłącz LCD, kursor i miganie
SendOrder(0x01); // czyść LCD
SendOrder(0x06); // bez przesuwania w prawo
SendOrder(0x0C);
}
int main()
{
DDRA = 0xFF;
DDRB = 0xFF;
PORTA = 0x00;
PORTB = 0x00;
LCDinit();
SendData('t');
SendData('e');
SendData('s');
SendData('t');
}
Szukałem już wszędzie, ale nic z tego nie wyszło... Proszę o pomoc, długo się z tym męczę i nie widać efektów.
Jestem początkujący jeżeli chodzi o tego typu układy więc wybaczcie jeżeli nie wiem czegoś co jest dla Was oczywiste
Pozdrawiam,
Piotrek.