Witajcie, realizuję ostatnio niewielki projekt, głównie w celach edukacyjnych, by więc z jego pomocą nauczyć się jak najwięcej postanowiłem go nieco utrudnić - mimo pozostawienia na płytce wielu wolnych pinów, wykorzystałem rejestr przesuwny do sterowania wyświetlaczem (HD44780). Znalazłem kilka gotowych projektów, jednak ich użycie byłoby sprzeczne z przyświecającymi mi ideałami. W czasie realizowania napotkałem kilka problemów, lecz powoli zbliżałem się do celu, niestety, na razie utknąłem i jestem zmuszony naginać swoje zasady. Oto kod:
main.c:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
hd33780.h:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
hd44780.c:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
A to lista problemów:
- niemożność wykonania jakiejkolwiek instrukcji w pętli głównej.
- dziwne zachowanie funkcji sprawdzającej koniec tablicy znaków.
- kiedy do mojej biblioteki - HD44780.h dodam jakąkolwiek funkcję, choćby nieużywaną wszystko przestaje działać zupełnie jak w przypadku opisu pierwszego błędu. W przypadku taką funkcją jest LCD_KOMENDA(), wszystko jest w porządku tak długo jak jest ona zaremowana.
- po odłączeniu od układu zasilania i ponownym jego przyłączeniu ekran pozostaje pusty. Chociaż inicjalizacja (chyba) jest przeprowadzana poprawnie, sądząc po aktywnych dwóch liniach i tym, że jak wspomniałem pozostaje on pusty (instrukcja CLR), a może nie: nie widać kursora!
By nie zaśmiecać posta zdecydowałem się nie dodawać plików odpowiedzialnych za obsługę samego rejestru, to dlatego, że jestem absolutnie pewien jego poprawnego działania, wynika to z wielu testów. Kilka o nim informacji:
- inicjalizacja rejestru polega na przypisaniu mu zdefiniowanych w pliku nagłówkowym portów.
- REJ_WYSYL(uint8_t bajt) - wysyła bajt informacji informacji na rejestr oraz włącza zatrzask (STCP)
ps.
zdaję sobie sprawę, że analizę półbajtów można zrealizować w dalece bardziej elegancki sposób, obecne rozwiązanie zastosowałem by uprościć odszukiwanie błędów, optymalizacją zamierzam zając się na końcu.
Za wszelkie próby pomocy/ podanie jakichkolwiek wskazówek dziękuję.
Pozdrawiam!