Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 19 kwi 2026, o 04:26


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 25 sty 2017, o 15:28 
Offline
Nowy

Dołączył(a): 12 sty 2016
Posty: 6
Pomógł: 0

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:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


hd33780.h:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


hd44780.c:
Składnia: [ Pobierz ] [ Ukryj ]
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!



Ostatnio edytowano 25 sty 2017, o 16:30 przez agreitakj, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2017, o 15:53 
Offline
Użytkownik

Dołączył(a): 26 lip 2015
Posty: 269
Pomógł: 34

Tak na pierwszt zut oka zastanawia mnie definicja pinów lcd w pliku hd4470.h są zapisane w 8emkowym nie powinny być w szesnastkowym?
nie powinno być 0x16, 0x32 albo coś w tym stylu?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2017, o 16:17 
Offline
Nowy

Dołączył(a): 12 sty 2016
Posty: 6
Pomógł: 0

Przecież są zapisane w systemie szestnastkowym:
hex: dec: bin:
0x80 128 10000000
0x20 64 00100000
0x10 16 00010000
0x08 8 00001000
0x04 4 00000100
0x02 2 00000010
0x01 1 00000001

Każda z tych wartości reprezentuję bajt który należy wysłać do rejestru przesuwnego by ten ustawił jedynkę na danym pinie.

------------------------ [ Dodano po: 9 minutach ]

Zapomniałem zapisać:
prototyp funkcji: REJ_WYSYL(uint8_t PIN, uint8_t UstawCzyZeruj) - w pierwszym argumencie podajemy pin/piny, w drugim 1 - jeśli chcemy port ustawić, lub 0 - zerować.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 16 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO