Wbrew pozorom to moze być takze wina softu, w procedurze LCD_INIT trzeba sterownikowi wyraźnie podać ile ma linii uzywać, widocznie jedno liniowy kiedy dostaje daną o pozycji poza zakresem wysyła błędy i zawiesza komunikację.
Proponuje zdezasemblować kod, znależć LCD_INIT i tam trzeba zmienić konstantę ładowaną w ustawienia MODE wyświetlacza.
To przykładowa procedra LCD_INIT w AVR
Kod:
ldi lcd_data, HD44780_FUNCTION_SET | HD44780_FONT5x7 | [b]HD44780_TWO_LINE[/b] | HD44780_4_BIT ; // interfejs 4-bity, 2-linie, znak 5x7
rcall LCD_WriteCommand
ldi lcd_data,HD44780_DISPLAY_ONOFF | HD44780_DISPLAY_OFF ; // wy-¦czenie wyswietlacza
rcall LCD_WriteCommand
rcall delay40ms
rcall LCD_Clear
rcall delay40ms
ldi lcd_data,HD44780_ENTRY_MODE | HD44780_EM_SHIFT_CURSOR | HD44780_EM_INCREMENT ;// inkrementaja adresu i przesuwanie kursora
rcall LCD_WriteCommand
rcall delay40ms
ldi lcd_data,HD44780_DISPLAY_ONOFF | HD44780_DISPLAY_ON | HD44780_CURSOR_OFF | HD44780_CURSOR_NOBLINK ; // wlacz LCD, bez kursora i mrugania
rcall LCD_WriteCommand
rcall delay40ms
Kol SQ6ADE zgadza się , ale ja nigdy nie sprawdzam stanu BUSY, jak sie pisze w ASM to wystarczy dać mu 4 ms na zapisanie każdego znaku i nie przypominam sobie żebym widział jakieś błedy... no ale to moze zależeć tez od typu wyświetlacza.
EDIT : sorry przeczytałem schemat tam jest kod mcs-51 nie AVR, zrozumiałem że to zamiana 2 liniowego wyświetlacza na jednoliniowy , ale zasada powinna być ta sama , to musi być niekompaktybilność sprzetowa nowego wyświetacza ze starymi ustawieniami. Są deasamblery, a funkcje init łatwo znaleźć, tylko trzeba umieć programować w ASM. Poczytam jezszcze datashity tych wyświetlaczy i jak znajde rozbieżnosć to moge w wolnej chwili przerobić. A gdzie jest kod do tego miernika??