Ktoś z was ma doświadczenie z uruchamianiem wyświetlaczy HD44780 na (relatywnie) współczesnych mikrokontrolerach? Mam urządzenie zbudowane w oparciu o PIC32MX795F512L. Do tej pory korzystałem z wyświetlacza HD44780 (4x20) za pośrednictwem ekspandera na I2C. Niestety komunikacja była dość wolna - tym bardziej, że układ reprezentuje rewizję, która miała hardware'owego buga i na tym konkretnym porcie I2C trzeba było ponawiać konfigurację przed każdą kolejną transmisją.
W wolnej chwili postanowiłem więc przeprojektować moduł wyświetlacza i w miejscu ekspandera zastosowałem dwukierunkowy translator poziomów TXB0108. Dwukierunkowy, bo zamierzam korzystać z funkcji odczytu flagi zajętości (była ona również wykorzystywana w wersji z I2C).
Przepisałem sterownik, wywalając z niego obsługę I2C. Zamiast tego komunikację oparłem na na GPIO. Po podpięciu nowej wersji interfejsu LCD okazało się, że działa on tylko częściowo. Mianowicie jeśli wyłączę obsługę linii RW (i zamiast sprawdzania flagi zajętości dam standardowego delay'a 120 us) to wszystko działa zupełnie poprawnie. A to oznacza, że GPIO są skonfigurowane poprawnie i komunikacja w stronę wyświetlacza działa.
Problem pojawia się, gdy próbuję włączyć obsługę RW i czytać flagę zajętości. Wtedy wyświetlacz niby się inicjuje i nawet jest w stanie poprawnie wyświetlić kilka tekstów, ale w chwilę później układ się zawiesza (podejrzewam, że własnie na pętli sprawdzania bitu zajętości) i zalicza reset WDT. I tak w kółko...
Próbowałem dodawać delay'e 1-10 us po zmianach stanów linii RW i EN, a także po zmianie konfiguracji pinów skaładających się na czterobitową magistralę danych (wejście lub wyjście), jednak nie przyniosło to żadnego rezultatu.
Ktoś ma pomysł co może być nie tak?