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



Teraz jest 19 kwi 2024, o 02:10


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 8 ] 
Autor Wiadomość
PostNapisane: 13 lis 2017, o 21:43 
Offline
Użytkownik

Dołączył(a): 25 maja 2014
Posty: 89
Lokalizacja: Krosno
Pomógł: 0

Witam, chciałbym się z wami podzielić moją malutką biblioteką do obsługi UART.

Jest to pierwsze moje wystąpienie z kodem C na tym forum! :mrgreen:

Założenia:
1. Praca oparta o przerwania nadajnika i odbiornika.
1. Ilość przesyłanych danych mała do kilkudziesięciu bajtów.
2. Praca na dwóch buforach Tx i Rx.
3. Transmisja oparta o znaki ASCII


W moim przykładzie obsługa sprowadza się do wykorzystania:

1. USART_UDRE_vect - przerwanie od pustego buforu nadajnika
2. USART_RXC_vect - przerwanie od odebranej danej przez UART.
3. Bufor Tx - bufor danych wysyłanych, wielkość buforu ustalana na stałe
4. Bufor Rx - bufor danych odbieranych, wielkość buforu ustalana na stałe
5. Flaga "Jest_dana_z_RX" - flaga ustawiana kiedy zostanie odebrana cała ramka, czyli jeśli zostanie odebrany znak "CR" (0x0D)

Dane wysyłane do uC muszą być zakończone znakiem "CR" (0x0D)

Dane wysyłane z uC muszą być zakończone zerem (0x00). - zero oznacza, że uC ma przestać wysyłać dane.

Flaga "Jest_dana_z_RX" wykorzystywana do obsługi odebranych danych, patrz przykład kod poniżej.


Napisałem 4 funkcje obsługujące UART:
1. Inicjalizacja Uarta
2. Wysłanie pojedynczego znaku
3. Wysłanie danych z RAM
4. Wysłanie danych z ROM

Poniżej przedstawiam kod:

UART_ATMega.h

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


UART_ATMega.c

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



Poniżej obrazek z terminala dla tego testowego programu.

Obrazek

Proszę o opinie, może jakieś ciekawe podpowiedzi ? utrzymując założenie, że obsługa ma być stosunkowo prosta i na przerwaniach :) .

Pozdrawiam

_________________
Artur



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lis 2017, o 07:30 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

A co to ma wspólnego z DIY?
Może jednak warto się zastanowić gdzie się umieszcza
swoje pytania?

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lis 2017, o 07:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 mar 2015
Posty: 202
Pomógł: 15

MirkoT napisał(a):
A co to ma wspólnego z DIY?
Może jednak warto się zastanowić gdzie się umieszcza
swoje pytania?


A to, kolego , że jest to projekt programistyczny. Nazwy działów czytamy że zrozumieniem.
Pozdrawiam

Wysłane z mojego HTC One_M8 przy użyciu Tapatalka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lis 2017, o 08:29 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

A przepraszam!
Chyba jeszcze spałem jak to pisałem.
Jeszcze raz przepraszam :oops:

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lis 2017, o 10:38 
Offline
Użytkownik
Avatar użytkownika

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

Tak na szybko:
- Nie masz kontroli przepełnienia buforów w czasie ich wypełniania.
- po co taka kombinacja z końcem - CR w jedną 0x00 w druga stronę?

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 lis 2017, o 19:54 
Offline
Użytkownik

Dołączył(a): 25 maja 2014
Posty: 89
Lokalizacja: Krosno
Pomógł: 0

Witam,
rskup napisał(a):
Nie masz kontroli przepełnienia buforów w czasie ich wypełniania.


Nie zrobiłem, ale w sposób świadomy (trochę lenistwo... :oops: ). Choć w zasadzie powinny być więc dorobię.
Tylko muszę się zastanowić jak sobie obsłużyć przekroczenie rozmiaru, tak aby było prosto i mało kodu:).

rskup napisał(a):
po co taka kombinacja z końcem - CR w jedną 0x00 w druga stronę?


Przerobiłem w obu kierunkach na końcu wymagane znak "CR" (0x0D) :) he he dzieki temu dwie linie kodu mniej:)


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


Dzięki za uwagi :)

_________________
Artur



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lis 2017, o 17:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

Witam,
Artur_26 napisał(a):
Tylko muszę się zastanowić jak sobie obsłużyć przekroczenie rozmiaru...

Ja bym poszukal w rozdziale 10_ GB. widzę że masz :)
Głownie przerwanie ISR( USART_RXC_vect){........:) ,
oraz funkcję ....uart_getc(void){.....// (w jakim celu funkcja zwraca typ int ? )
w funkcji uart_get_str(); jest to w jakimś celu sprawdzane. :)
hmm.. no bo po co nam uszkodzona ramka danych ? pewnie tylko do śmietnika. :)
a nadpisanie bufora odbiorczego poza jego rozmiarem (gdy np odbiór się chwilowo przerwie bez znaku końca i pojawią następne dane od któregoś tam znaku ),
zmienna Licznik_Bufora_RX może przekroczyć dozwolony rozmiar Wielkosc_Bufora ,
wiadomo czym skutkuje. :)
pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 lis 2017, o 19:45 
Offline
Użytkownik

Dołączył(a): 25 maja 2014
Posty: 89
Lokalizacja: Krosno
Pomógł: 0

Daro69 napisał(a):
...
Daro69 napisał(a):
zmienna Licznik_Bufora_RX może przekroczyć dozwolony rozmiar Wielkosc_Bufora , wiadomo czym skutkuje. :)


heh przekonałem się na własnej skórze jak robiłem sobie bibliotekę do nRF24L01 tyle, że w obsłudze SPI. W czasie testów bufor SPI ustawiłem na 16 bajtów :), a jak już wypróbowałem komunikację pomiędzy dwoma nRF24L01 przesyłając sobie kilka bajtów, to zapomniałem, że bufor SPI ma tylko 16 bajtów. I jakie moje zdziwienie było, kiedy wysłałem więcej niż 15 bajtów a na terminalu (bo tak sobie testowałem) pojawiły się tzw. krzaki:)) i szczerze mówiąc to zanim do tego doszedłem to mi trochę zeszło więc.....
Ale LENISTWO czasem bierze górę hihi.
Więc dzięki za motywację.

Pozdrawiam

_________________
Artur



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

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