Witam serdecznie.
Jakiś czas temu kupiłem sobie nowy wyjątkowo duży wyświetlacz LCD, ponieważ potrzebowałem taki do mojego projektu. Przed kupnem zorientowałem się w wyświetlaczach, i okazało się ze mój stary wyświetlacz ma sterownik HD44780, natomiast nowy ma HD44100FS. Na elektrodzie wyczytałem że - to nic nie szkodzi, najwyżej będę miał do dyspozycji 16 znaków w linii a nie 20. Moim głównym założeniem było zwiększenie czytelności interfejsu - więc mogłem sobie pozwolić na to ograniczenie. Podsumowując, myślałem że wystarczy wyciągnąć mój stary LCD 2x16 , wetknąć odpowiednio nowy, i będzie wszystko OK... niestety nic z tego.
Wyświetlacz przy wewnętrznym oscylatorze 1Mhz wyświetla poprawnie tekst - ale tylko w 1 linii. Do 2 linii nie ma dostępu.
Po dołączeniu do Atmegi32 kwarcu 16Mhz skuteczność poprawnego wyświetlania w 1 linii spadła do powiedzmy 60% (czyli 40% znaków przekłamanych), dostępu do 2 linii nadal nie ma. Po małej modyfikacji opóźnień w funkcji inicjalizacji LCD osiągnąłem poprawne wyświetlanie w 1 linii. Niestety nadal nie jestem w stanie przejść do 2 linii. Ani za pomocą moich funkcji - ani w nieskończoność wysyłając znaki do LCD (co przy sterowniku z mojego starszego LCD było możliwe).
Oczywiście stary LCD 2x16 z HD44780 działa poprawnie.
Przejrzałem datasheet do HD44100 i nie ma tam żadnych komend, jest tylko metoda aplikacji.
Czy spotkał się ktoś z takim problemem?
Załączam funkcję których używam :
Pozdrawiam
Dominik
Jakiś czas temu kupiłem sobie nowy wyjątkowo duży wyświetlacz LCD, ponieważ potrzebowałem taki do mojego projektu. Przed kupnem zorientowałem się w wyświetlaczach, i okazało się ze mój stary wyświetlacz ma sterownik HD44780, natomiast nowy ma HD44100FS. Na elektrodzie wyczytałem że - to nic nie szkodzi, najwyżej będę miał do dyspozycji 16 znaków w linii a nie 20. Moim głównym założeniem było zwiększenie czytelności interfejsu - więc mogłem sobie pozwolić na to ograniczenie. Podsumowując, myślałem że wystarczy wyciągnąć mój stary LCD 2x16 , wetknąć odpowiednio nowy, i będzie wszystko OK... niestety nic z tego.
Wyświetlacz przy wewnętrznym oscylatorze 1Mhz wyświetla poprawnie tekst - ale tylko w 1 linii. Do 2 linii nie ma dostępu.
Po dołączeniu do Atmegi32 kwarcu 16Mhz skuteczność poprawnego wyświetlania w 1 linii spadła do powiedzmy 60% (czyli 40% znaków przekłamanych), dostępu do 2 linii nadal nie ma. Po małej modyfikacji opóźnień w funkcji inicjalizacji LCD osiągnąłem poprawne wyświetlanie w 1 linii. Niestety nadal nie jestem w stanie przejść do 2 linii. Ani za pomocą moich funkcji - ani w nieskończoność wysyłając znaki do LCD (co przy sterowniku z mojego starszego LCD było możliwe).
Oczywiście stary LCD 2x16 z HD44780 działa poprawnie.
Przejrzałem datasheet do HD44100 i nie ma tam żadnych komend, jest tylko metoda aplikacji.
Czy spotkał się ktoś z takim problemem?
Załączam funkcję których używam :
Cytat:
void Wyslij_do_LCD(int8_t bajt)
{
//ustawienie EN
PORT_LCD |= _BV(EN_LCD);
//wysłanie 4 najstarszych bitów danych
PORT_LCD = (bajt & 0xF0)|(PORT_LCD & 0x0F);
//potwierdzenie wysłania danych (opadającym zboczem EN)
PORT_LCD &= ~(_BV(EN_LCD));
//zaczekaj cykl
asm volatile("nop");
//ustawienie EN
PORT_LCD |= _BV(EN_LCD);
//wysłanie 4 najmłodszych bitów danych
PORT_LCD = ((bajt & 0x0F)<<4)|(PORT_LCD & 0x0F);
//potwierdzenie wysłania danych (opadającym zboczem EN)
PORT_LCD &= ~(_BV(EN_LCD));
//zaczekaj 100 us - dla poprawnego wyświetlania
_delay_us(100);
}
void komendaLCD(int8_t x)
{ // wysyła komendę do LCD
PORT_LCD &= ~(_BV(RS_LCD));
Wyslij_do_LCD(x);
PORT_LCD |= _BV(RS_LCD);
}
void ustaw_kursorLCD(int8_t x, int8_t y)
{//przesowa kursor na (x,y)
komendaLCD(0x80 | (x + (0x40 * y)));
}
Pozdrawiam
Dominik