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



Teraz jest 24 kwi 2024, o 03:15


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 30 lip 2014, o 16:59 
Offline
Nowy

Dołączył(a): 19 paź 2013
Posty: 22
Pomógł: 0

Witam

Próbuje uruchomić UART1 na Atmega644p i nie wiem dlaczego ale nie działa. Poniżej kod:

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


Do procesora podłączam się przejściówką USB - RS232, terminal którego używam to Putty. Po podłączeniu terminala w sposób ciągły wyświetlają się 'krzaczki" jak na printscrinie:

Obrazek

Jezeli wcisne jakis klawisz z 10 - 15 razy to dopiero wtedy sie pojawi napis 'jest" na wyswietlaczu.
Prosze o pomoc co jest źle , dlaczego nie chce działac poprawnie.
Parametry transmisji to 9600,N,8,1. Takie parametry są również ustawione w Putty. Przejściówka raczej sprawna gdyż po zwarciu TxD z RxD echo działa.

Pozdrawiam

Marcin



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 lip 2014, o 17:29 
Offline
Użytkownik
Avatar użytkownika

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

  • Odblokowanie obsługi przerwania (1<<RXCIE1) bez funkcji do jego obsługi (domyślnie w takiej sytuacji wywoływane jest przerwanie BADISR_vect, jeżeli taka funkcja również nie istnieje to następuje skok do adresu 0, który resetuje uC). Właściwie cała linijka jest zbędna, bo poniżej jest praktycznie identyczny zapis do rejestru UCSR1B.
  • Możliwe, że niezgodne F_CPU (zdefiniowany zegar w opcjach projektu lub pliku makefile różni się od rzeczywistego źródła sygnału taktującego)
  • Zbędna konfiguracja: UCSR1C = (3<<UCSZ10); (domyślny stan rejestru po sygnale reset ref. pdf)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 lip 2014, o 17:53 
Offline
Użytkownik

Dołączył(a): 27 lis 2012
Posty: 289
Pomógł: 6

Dawno nie programowałem. Wiem że książka Mirka dotyczy ATMEGA 32 a nie 644. Rozkazy się tyci różnią, bo 32 ma 1 USART a 644 2 USART-y.
Przysyłam Ci kod który powinien zadziałać dla 644.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 lip 2014, o 09:59 
Offline
Nowy

Dołączył(a): 19 paź 2013
Posty: 22
Pomógł: 0

Poprawiłem błędy i program wygląda jak 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.


jednak nic to nie daje. F-CPU jest ok 16000000 i taki kwarc jest użyty. Wartość UBRR1 wynosi 103 co potwierdza wyswietlenie na wyswietlaczu. Co wiecej dzisiaj Putty zachowuje się poprawnie ale jezeli podłączony jest programator do procesora (wtyczka kanda) to po nacisnieciu dowolnego klawisza pojawi się na wyswietlaczu 'Jest' lecz "Brak' sie juz nie pojawi. Jezeli odłącze programator od procesora to wtedy nic nie działa (pojawia sie tylko na wyswietlaczu wartosc UBRR1 czyli 103). Co wiecej jezeli programator jest podłączony to w okienku Putty nie pojawiaja się znaki odpowiadajace nacisnietym klawiszą. Jezeli programator odłącze to znaki sie pojawiaja. Nic z tego nie rozumiem. Program banalny a nie da się uruchomic.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 lip 2014, o 11:22 
Offline
Nowy

Dołączył(a): 19 paź 2013
Posty: 22
Pomógł: 0

Dziwne zachowanie z podłączonym lub odłączonym programatorem były spowodowane brakem masy z komputera. Po podłączeniu masy program zachowuje się tak samo niezależnie czy programator jest podłączony czy nie. Jednak program nadal nie działa poprawnie.

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


Po włączeniu zasilania pojawia się napis 'Brak'. Po nacisnieciu dowolnego klawisza pojawia sie napis 'Jest' po 1000ms pojawia się 'Jest2' i tyle. Powinno się znowu pojawic 'Brak' ponieważ jest petla nieskończona while(1) a tak się nie dzieje. Wyglada tak jakby procesor raz odczytał znak z komputera i sie zawieszał po ostatniej instrukcji lcd(). Zauwazyłem że moge dodać wiecej instrukcji lcd() i wszystkie sie wykonaja jednak program nie powróci na poczatek petli while(1). Trzeba zresetowac procesor aby znowu pojawiło sie 'Brak'. Dlaczego tak się dzieje?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 lip 2014, o 12:33 
Offline
Użytkownik
Avatar użytkownika

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

Nie wiem jak jest skonstruowana funkcja "locate", ale jeśli jej drugim parametrem jest numer wiersza to napis "BRAK" nie powinien znikać z ekranu przez cały czas trwania programu, ponieważ kolejne napisy pojawiają się w drugiej linii.
Jeśli funkcja "locate" lub "lcd" zawiera instrukcję czyszczące ekran to oczywiście nie jest to żadna podpowiedź, bo zgodnie z kodem faktycznie nie powinno być problemów z kolejną iteracją pętli.

Spróbuj odczytać wartość rejestru UDR1 po pętli sprawdzającej:

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

Przy braku jego odczytu, flaga RXC1 ustawiona jest zawsze.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 lip 2014, o 15:36 
Offline
Nowy

Dołączył(a): 19 paź 2013
Posty: 22
Pomógł: 0

Dzieki. faktycznie powodem niepoprawnego działania programu było nieodczytywanie rejestru UDR1 a rozkład funkcji _delay_ms(1000) był akurat taki że napis 'Brak" sie wyswietlał lecz natychmiast nadpisywał go napis "Jest" gdyż flaga RXC1 była cały czas ustawiona.

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


I samo odczytywanie przez UART1 wygląda OK lecz nie bardzo rozumiem jak mam sprawdzac jaki znak został przesłany. Np gdy wcine klawisz A, którego kod ASCII jest 65 to myslę że na wyświetlaczu w pierwszym wierszu powinna się pojawić litera A a w drugim wierszu odpowiadajacy jej znak ASCII czyli 65. A po nacisnieciu litery A pojawia sie na wyswietlaczu kod ASCII 79 a w wierszu ponizej litera O. Próbowałem również w terminalu z BASCOMa - tam jest możliwość wysłania znaku ASCII. I podobnie jak wysyślę znak ASCII 65 to na LCD pojawi sie 79 oraz litera O. Dlaczego tak się dzieje.



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

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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO