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



Teraz jest 19 mar 2026, o 22:55


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 6 ] 
Autor Wiadomość
PostNapisane: 13 sty 2016, o 23:11 
Offline
Nowy

Dołączył(a): 24 lis 2015
Posty: 12
Pomógł: 0

Witam wszystkich. Na wstępie chciałbym dodać, że jestem początkującym programistą i korzystam z BB.
Mój problem dotyczy zmiany stanu diody przez UART'a. Problem polega na tym, że dioda nie zawsze zmienia swój stan mimo wysłania określonego znaku ASCII z terminala. Dioda na Przejściówce RS<--> USB mignie ale dioda nie zawsze zmieni swój stan. Bibliotekę UART'a mam z BB, prędkość przesyłu 9800bps, kwarc zewnętrzny 11,0592 MHz, FuseBity ustawione poprawni przez mkAVRCalculator, taktowanie procesora w Eclips Mars także ustawione na ww. Zauważyłem, że problem pojawia się w momencie, gdy w pętli głównej programu daj więcej niż jedną instrukcję 'if' z odbiorem znaku przez UART.

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


Przeprowadziłem również test echa, czyli wysyłałem z terminala znak ASCII odpowiedzialny za zapalenie diody i patrzyłem, czy procesor zwróci mi do terminala określoną literkę. Zauważyłem, że procesor zwracał literkę tylko jeżeli zapalił też diodę. Wygląda to jak by procesor nie zawsze odbierał znak. Co może być przyczyną tego błędu i jak można ewentualnie sobie z tym poradzić?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Ostatnio edytowano 13 sty 2016, o 23:46 przez k.wozniak, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 sty 2016, o 23:35 
Offline
Moderator zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 18 lip 2012
Posty: 3230
Lokalizacja: Kraków - obok FAB5 ATMEL'a
Pomógł: 91

topic7402.html

_________________
http://www.jaglarz.info



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 sty 2016, o 23:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Funkcja uart_getc() pobiera Ci daną odebraną z rs232. Sprawdzasz czy jest to pierwszy znak. A za chwilę robisz znowu to samo, czyli pobierasz kolejnych daną (już nową wartość) i sprawdzasz czy jest to następna litera. Więc jeden odebrany bajt sprawdzany jest tylko z jednym znakiem.
Musisz pobrać odebrany bajt do zmiennej i ją porównywać z kolejnymi znakami:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Oczywiście musisz jeszcze zadeklarować zmienną znak. Warunki możesz także zrobić na switch / case.

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sty 2016, o 00:09 
Offline
Nowy

Dołączył(a): 24 lis 2015
Posty: 12
Pomógł: 0

Rozwiązanie jak najbardziej działa, dziękuje :). Czyli w momencie wysłania jednego znaku, żeby nie zalegał on w buforze należy go przypisać do zmiennej, która pobierze cała ramkę - bajt z bufora?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sty 2016, o 00:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

uart_getc() pobiera znak z bufora i już tego znaku tam nie ma. Więc kolejne wywołanie uart_getc() nie pobierze tego pierwszego znaku, tylko już kolejny. Dlatego aby móc użyć tej samej wartości, to musisz pobrać z bufora znak do zmiennej i operować w warunkach na tej zmiennej.

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 sty 2016, o 08:44 
Offline
Użytkownik

Dołączył(a): 24 lis 2015
Posty: 36
Lokalizacja: Zakrzewko
Pomógł: 3

Zapraszam do obejrzenia filmów p. Mirka WIFI232 (RS232), tam mam masz opis jak rejestrować swoja funkcję i zapalać diodę LED



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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