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



Teraz jest 8 sty 2025, o 14:27


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 10 lip 2014, o 16:26 
Offline
Użytkownik

Dołączył(a): 03 lut 2014
Posty: 37
Pomógł: 0

Dzień dobry.

Wysyłam do atmegi 644p znaki z komputera poprzez adapter rs232. Atmega jako potwierdzenie odrazu odsyła te znaki w niezmienionej formie. Mam jednak problem, gdyż nie chcą się poprawnie wyświetlić na wyświetlaczu.

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


Proszę o pomoc :)



Ostatnio edytowano 10 lip 2014, o 18:51 przez cwanish, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lip 2014, o 16:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

Oczywiście do wyświetlania pojedynczych znaków potrzeba funkcji w stylu "lcd_putc(char Char);".
Nie wiem czy taką posiadasz dlatego powinno zadziałać wywołanie takiej funkcji: "LCD_WRITE_DATA(UDR0);".

"Krzaki" pojawiają się dlatego, że funkcja "lcd_puts" spodziewa się w argumencie wskaźnika na c-string tzn. miejsce w pamięci, które zakończone będzie znakiem NULL. Kiedy otrzymuje wartość liczbową (taką jest wartość z rejestru UDR0), kompilator stara się ją zrzutować niejawnie na żądany typ (char*), jednocześnie informując o swoim świadomym działaniu poprzez ostrzeżenie.
W związku z tym, że dane w UDR0 ulegają zmianie to również wyświetlane są przeróżne dane umieszczone w pamięci.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lip 2014, o 18:42 
Offline
Użytkownik

Dołączył(a): 03 lut 2014
Posty: 37
Pomógł: 0

Dziękuję, Twoja odpowiedź jest bardzo zrozumiała.

W bibliotece o tym wyświetlaczu mam tylko trzy funkcje - ostatnia jaka została to:

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

Ta funkcja potrzebuje dwóch argumentów - nie mam pojęcia do czego aż dwóch ale zadziałało gdy dwa razy podałem ReceivedByte (wcześniej było UDR0 = ReceivedByte)

Jeśli to jest oczywiste i nie wymaga wysiłku to może ktoś mi powiedzieć do czego który argument?



Ostatnio edytowano 10 lip 2014, o 18:53 przez cwanish, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lip 2014, o 20:19 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 kwi 2013
Posty: 418
Lokalizacja: Rzeszów
Pomógł: 102

Jest to funkcja do bezpośredniego wysterowywania linii wyświetlacza.
Argument "v" to wartość jaka zostanie przesłana do kontrolera. Natomiast "rs" powoduje odpowiednie ustalenie stanu na linii RS wyświetlacza. Dla rs == 0 wartość "v" będzie interpretowana jako komanda, a dla rs != 0 będą to dane.

Pozorne działanie funkcji dla obu parametrów równych UDR0 mogło mieć miejsce, ponieważ gdy rs == UDR0, a UDR0 != 0, wtedy do wyświetlacza zapisywane są dane, które w tym wypadku są tożsame z UDR0 == v.

Najlepiej sięgnij do książki, albo innego źródła po większe szczegóły, ponieważ ciężko pokrótce wszystko dokładnie omówić.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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