Witam wszystkich,
Mam mały problem z dokładnym zrozumieniem funkcji do odczytu bajtu z wyświetlacza LCD (HD 44780) opisanej w bluebooku Pana Mirka.
Najpierw tworzymy funkcję do odczytu połówki bajtu jako, że pracujemy w trybie 4-bitowym.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
A następnie funkcję do odczytu całego bajtu:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
A teraz moje wątpliwości. Po pierwsze co dokładnie odczytujemy? Jak rozumiem, nie jest to, np. zawartość wyświetlacza wysłana dajmy na to chwilę wcześniej na wyświetlacz, ale co to dokładnie jest. Od czego zależy wartość która zostanie zwrócona przez tę funkcję? I kolejna sprawa, o ile przy wysyłaniu bajtu "na dwa razy" nie mam wątpliwości o tyle przy odczytywaniu już tak. Funkcja lcd_readHalf w moim rozumieniu sprawdza wartości (czy 0 czy 1) na na 4 bitach i ustawia je odpowiednio na miejscach od 0 do 3 w bicie. Ok, ale potem w funkcji _lcd_read_byte my przesuwamy odczytaną wartość o 4 miejsca w lewo i odczytujemy 4 kolejne bity. Problem w tym, że mam wrażenie, że np. jeśli wartość do odczytu to bitowo: 0b11001001, to po wywołaniu tej funkcji otrzymamy wartość: 0b10011001. Czyli w moim rozumieniu odczytamy dwa razy młodszą część bajtu tylko, że raz ją przesuniemy o 4 w lewo a drugi raz nie. Czy ktoś może mi wytłumaczyć jak to jest naprawdę i jak to działa, że otrzymujemy poprawną wartość, pełny odczytany bajt, a nie dwa razy połówkę bajtu przesuniętą lub nie w lewo, tak jak mi się wydaje?