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



Teraz jest 15 sty 2026, o 21:01


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 19 sie 2013, o 22:36 
Offline
Nowy

Dołączył(a): 14 sie 2013
Posty: 9
Pomógł: 0

Witam
Męczę si z transmisją danych z PC do ATmegi16. Założenie jest takie ,że chcę wysyłać algorytm funkcjonowania programu w procesorze w postaci procedur. Pisałem wcześniej przy okazji innego problemu. Teraz z PC-ta chciałbym wysłać konfigurację. Ta konfiguracja zapisze się w EEPromie i oczywiście w pamięci RAM. Cały problem polega na tym ,że brakuje mi wiedzy na temat odbioru danych przez USART. Oczywiście USART działa , jest zainicjowany, mogę wysyłać do PC-ta jakieś napisy ale nie za bardzo rozumiem jak odbierać dane i jak je obrobić. Chodzi o to ,że doszedłem do tego ,żę rejestr UDR "trzyma" sobie odebraną daną w postaci chara.
No i oczywiście brnę dalej. Zainicjowałem przerwania i jak wyślę sobie z terminala literkę to dalej na wyświetlaczu wyświetla mi się literka. No wszystko OK tylko co dalej ? Jakbym chciał wysłać np. liczbę 1000000 ? Pewnie od strony PC zostanie to pokrojone na bajty i w postaci 0F 42 40 po kolei wysłane. No i tu kapota. Powinienem stworzyć jakiś bufor gdzie gromadziłbym te dane ? Jak ten bufor później przerobić ,żebym dostał tą liczbę 1000000 w postaci np. ulong ? Na początku jeszcze wymyśliłem ,że żeby urządzenie odbierało musi dostać znak "<" jako początek transmisji a potem ">" jako koniec
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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


Następnie w PC wysyłam ">120<" wrzucam to na wyświetlacz i otrzymuję .... <<<<< ( na forum nie ma emotikona główki walącej w ścianę ale właśnie to wtedy czuję)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 sie 2013, o 23:12 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27446
Lokalizacja: Szczecin
Pomógł: 1045

Masz Bluebooka ?

http://atnel.pl/mikrokontrolery-avr-jezyk-c.html

zajrzyj sobie do rozdziału o UDP przy Ethernecie. Nie przerażaj się - nie musisz czytać o ethernecie i UDP ale tam jest pokazane jak parsować stringi i dlaczego przesyłać wszystko jako ASCII a nie kombinacje dziwne z binarką. A jeśli miałbyś przypadkiem Greenbooka

http://atnel.pl/jezyk-c-pasja-programowania.html

to ostatni rozdział bardzo miło by cię zaskoczył ....

ale ok do rzeczy - jak masz przesłać liczbę to zamieniaj ją na kody ASCII i wysyłaj w ten sposób a linię kończ znakiem ENTER - to jedynie słuszna droga a szczególnie na początek - gdy zaczynasz

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sie 2013, o 16:24 
Offline
Nowy

Dołączył(a): 14 sie 2013
Posty: 9
Pomógł: 0

Nie mam "Bluebooka" ani "Greenbooka".
Ja się zastanawiam jak odebrać większą daną , kiedy na co poczekać itd.
Z tego co się orientuję to i tak z komputera czy to będzie PuTTy czy nawet mój program na kompie to i tak wysyłane dane są podzielone na "paczki" w ASCII. I tak dla przykładu w VB jest serialport.write(text as String) - czyli wszystko co wpiszę i tak zostaje potraktowane jako zbiór charów i wysyłanych pojedynczo. Ten znak odbieram w buforze UDR i on tam siedzi dopóki go nie zabiorę albo nie zostanie nadpisany przez kolejny znak. Teraz mam zagwozdkę jak zbudować bufor ,który złapie mi wszystkie dane i poskleja je do kupy.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 sie 2013, o 16:46 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27446
Lokalizacja: Szczecin
Pomógł: 1045

No właśnie czyli dobrze myślisz - wszystko ładnie opisałeś -

RobertM napisał(a):
Teraz mam zagwozdkę jak zbudować bufor ,który złapie mi wszystkie dane i poskleja je do kupy.


teraz zostaje tylko zaimplementować w procku jakiś bufor cykliczny i z niego odebrać taki string a następnie go parsować (czyt. analizować) - czyli np jak nadleci ci "255" to zamienić to już w C wbudowanymi funkcjami na liczbę

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sie 2013, o 19:38 
Offline
Nowy

Dołączył(a): 14 sie 2013
Posty: 9
Pomógł: 0

Naprowadzisz trochę jak zrealizować bufor, a potem jak tablicę charów przerobić na "ulong" i skasować tablicę ?
Bo tak wydaje mi się ,że trzeba to zrobić



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 sie 2013, o 20:31 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Komunikacją szeregową na forum zajmował się kolega Antystatyczny Nieco inne spojrzenie na RS232, a do zamiany łańcucha znaków na liczbę są funkcje z biblioteki <stdlib.h> a w twoim przypadku potrzeba użyć strtoul. Tablicę "skasujesz" jak wpiszesz '\0' do 0 komórki tablicy.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 sie 2013, o 10:01 
Offline
Nowy

Dołączył(a): 14 sie 2013
Posty: 9
Pomógł: 0

Dzięki za podpowiedzi. Zrobione



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