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



Teraz jest 8 kwi 2026, o 14:50


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 1 ] 
Autor Wiadomość
PostNapisane: 25 sie 2018, o 16:51 
Offline
Użytkownik

Dołączył(a): 24 sty 2017
Posty: 33
Pomógł: 0

Witam.
Kupiłem kiedyś ten (wspomniany w temacie) LCD. I przyszedł czas na napisanie sterownika. LCD podłączyłem pod ATB z uC ATMega32 taktowany 11059200Hz. Szyna równoległa 8-bit. Zacząłem od podstaw, czyli inicjalizacji oraz uruchomienia trybu znakowego. Wziąłem w łapę notę i coś tam napisałem. Udało się zainicjalizować, wyświetlać 4 linie. Więc jakby sukces. Ale to był jakby prototyp biblioteki... przed każdym odczytem i zapisem danych używałem instrukcji delay. Jestem amatorem, ale wiem, że wyświetlacz podłączony równolegle powinien działać szybko. Więc przyszedł czas na kontrolę Busy Flag wyświetlacza.
I tu zaczęły się schody. Wstawiłem w funkcji wysyłającej dane lub instrukcje do LCD sprawdzanie Busy Flag jak poniżej. Dodatkowo podłączyłem "debugger" :)

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


Funkcja check_BF ma jak wiadomo za zadanie odczytanie 8-go bitu szyny danych LCD. Zatem ją odczytuję:

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

I po tym wyświetlacz przestał działać. Program kończył działanie na TEST_LED_ON; Więc ewidentnie BF nie jest odczytane. Spędziłem wiele godzin na rozkminianie dlaczego. Może coś źle zdefiniowałem porty, kierunki, przypisania itd.. Ale nie. Wszystko OK. Przeszukiwałem Internet. Trafiłem na poniższy trop z arduino dotyczący kontroli BF:

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

Dodałem zatem do kodu co poniżej:

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

Efekt jest taki że LCD działa perfekcyjnie.
Ma ktoś pojęcie dlaczego tak się dzieje? W specyfikacji ST7920 są podane czasy "Exec time" czyli czas wykonania instrukcji. Przy zapisie instrukcji i danych ten czas to 72us. Jedyny wyjątek Read Busy Flag... jest 0us. Dlaczego w takim razie brak tej 1us uniemożliwia odczytanie BF? Studiowałem też bibliotekę Mirka do HD44780. Przed odczytem BF nie ma delay'ów, a działa.
Zatem dlaczego tu są takie cuda?

Dzięki za wskazówki



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: 1 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 6 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