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



Teraz jest 29 mar 2024, o 02:26


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
 Tytuł: UART
PostNapisane: 18 lis 2012, o 16:26 
Offline
Użytkownik

Dołączył(a): 07 sty 2012
Posty: 136
Pomógł: 0

Witam
Próbuję zrobić dwustronną komunikację z komputerem na UART. Korzystam z bibliotek z książki. Problem w tym że funkcja odbioru jest jako char. Próbowałem to zmienić by wysyłając jedynkę szło włączyć komunikację. No ale wysyłając jedynkę mikrokontroler odczytuje to jako 09. Nawet kiedy zmieniłem rodzaj danych w przerwaniu obsługującym odbiór:
Kod:
ISR( USART_RXC_vect ) {
    uint8_t tmp_head;
    uint8_t data;


W zasadzie tylko tyle zrobiłem jeśli chodzi o zmianę.
Kod:
uint8_t l;

W pliku main zadeklarowałem sobie zmienną.
A potem zrobiłem coś takiego:
Kod:
l=uart_getc();

Niestety z tego co zaobserwowałem to dalej nie przesyła mi liczby.
Proszę o jakąś wskazówkę.
Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: UART
PostNapisane: 18 lis 2012, o 18:38 
Offline
Moderator
Avatar użytkownika

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

No ale kolega myśli, że to czy przesyłamy liczbę czy znak ASCII zależy od tego jaki typ zmiennej damy ?????? uint8_t albo char ? :( toż to nieporozumienie i to dość straszne.

zadam może pytanie, jeśli wezmę sobie taką zmienną:

char z = 'A';

to co ja mam w tej zmiennej z ??? liczbę czy znak ? i proszę w miarę dokładnie uzasadnić każdą z odpowiedzi.

_________________
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  
 Tytuł: Re: UART
PostNapisane: 18 lis 2012, o 20:23 
Offline
Użytkownik

Dołączył(a): 07 sty 2012
Posty: 136
Pomógł: 0

No rozumiem już o co chodzi.
Niemniej chciałem taki test zrobić z przesyłaniem cyfr, wartości. Założenie końcowe było że przesyłam przez terminal poziomy PWM.

------------------------ [ Dodano po: 10 minutach ]

Wysyłam konkretną liczbę: 1.
Używam Bray Terminal.
Zrobiłem podgląd tej wartości na LCD i wyświetla się 09.
Proszę o jakieś wskazówki...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: UART
PostNapisane: 18 lis 2012, o 20:50 
Offline
Moderator
Avatar użytkownika

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

kyp napisał(a):
No rozumiem już o co chodzi..


ale może powiedz czego nie rozumiesz ?

czytałeś książkę całą ? po kolei ?

czytałeś o typach danych ? o łańcuchach tekstowych ? .... próbuję dojść gdzie utknąłeś .... żeby lepiej pomóc

_________________
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  
 Tytuł: Re: UART
PostNapisane: 18 lis 2012, o 21:04 
Offline
Użytkownik

Dołączył(a): 07 sty 2012
Posty: 136
Pomógł: 0

Czytałem książkę, powtórzę to sobie przez ten tydzień jeszcze raz i zobaczę. Niestety cierpię na straszny brak czasu
dlatego zadaje czasem tyle pytań na forum, bo nie mam czasu na samodłubanie.
Generalnie nie rozumiem jak wysłać tą liczbę. Jeśli w terminalu wysyłam znak ascii to wystarczy ze odpowiednio zakoduję cyfrę.
Nie rozumiem jak ma działać ta funkcja do obioru, przy cyfrach. Zwraca ona przecież zmienną char, którą jeśli dobrze rozumiem jest jakimś konkretnym znakiem. Mam ją potem przetworzyć jakoś na inną zmienną?. Eksperyment raz mi się udał. Chodziło o to by po wysłani jedynki program wysyłał jakieś wartości do komputera. Ale teraz chcę zadawać wartość PWM by sterować obrotami silnika DC. Jest to przymiarka, bo w przyszłości chcę to robić z telefonu bo bluthoot (czy jak się to pisze).
To ściągania i zadawania wartości korzystam z tego programu:
https://sites.google.com/site/terminalbpp/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: UART
PostNapisane: 19 lis 2012, o 08:00 
Offline
Użytkownik

Dołączył(a): 07 sty 2012
Posty: 136
Pomógł: 0

Tak też uczynię.
Dziś w autobusie powtarzałem typy zmiennych, jak będę wracał z pracy to powtórzę te funkcję.
Wrzucę może też jak wygląda mój "genialny" kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: UART
PostNapisane: 21 lis 2012, o 19:59 
Offline
Użytkownik

Dołączył(a): 07 sty 2012
Posty: 136
Pomógł: 0

Poczytałem i kurcze myślałem że zrozumiałem ale dalej nie kapuje:/
Ostatecznie przetestuję to w niedzielę, bo kurka trochę późno wracam z pracy.
Inaczej się zapytam.
Na komputerze w terminalu nadaję znaki, nie wartości?
A jeśli bym chciał komunikować dwie atmega między sobą jedna nadawałaby int, to druga przy tych bibliotekach z książki
odbierze int?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
 Tytuł: Re: UART
PostNapisane: 21 lis 2012, o 22:29 
Offline
Moderator
Avatar użytkownika

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

jeszcze raz - jak przesyłasz a terminala znak

1

to co wg ciebie leci do procesora ?

jakiś WYIMAGINOWANY znak ? kod ASCII ? czy może liczba ????

kolego wszystko naraz ;)

znak ASCII 1 posiada kod 41, więc tak na prawdę z terminala leci JEDEN BAJT o wartości = 41 (dziesiętnie) a to że nazywamy go znakiem to sprawa umowna. Bo przecież procesor nie ma ludzkiego mózgu i nie wie co to znaczy ZNAK. On MUSI zobaczyć liczbę

i teraz przenosimy się do procka - skoro odebrał liczbę 41 to co to znaczy ?

1. odebrał liczbę ?
2. odebrał znak ?
3. odebrał kod ASCII ?

to zależy od programisty czyli od ciebie jak to zinterpretujesz w programie przecież. Bo procesor to niestety "tępak"

ale jeśli ty przygotujesz zmienną

char a;

i do niej przypiszesz ten bajt, a później wyślesz ją na LCD to umawiamy wyświetli się obraz ASCII znaku o kodzie 41 czyli co ???

1

gdybyś przesłał z terminala znak

A

to do procka doleci kod ASCII = 65 i tak samo

No dobra - ale teraz ciebie boli to .......... KURCZĘ a jak przesłać liczbę ??? NO TAK SAMO , robisz sobie zmienną np:

uint8_t a i jeśli do niej przypiszesz nadlatujący bajt o wartości 41 to umawiamy się, że skoro wczytałeś go do zmiennej typu uint8_t to w programie traktujemy ten bajt jako liczbę i ma ona wartość = 41('1') albo 65('A')

równie dobrze możesz zrobić typ

int a, co za różnica i tak samo odebrać ten bajt do zmiennej a i co ??? i masz w niej liczbę 41 albo 65

więc pytam po raz kolejny - czym się różni przesyłanie danych liczbowych czy znakowych ??????

NO NICZYM .....

owszem możesz powiedzieć - ale ja się UPARŁEM i chcę przesłać liczbę np 2 a nie jakieś tam 41 :(

no tak z terminala nie wyślesz bajtu o wartości = 2 bo nie ma takiego znaku ASCII, ale co za problem wysłać znak ascii '2' ???

jak go wyślesz to przypiszesz go do zmiennej np

int a;

wtedy w a będziesz miał wartość 42, no dobra i jak zrobić z tego 2 ? proste

a = a - '0';

czyli

a = 42 - 40;

kod znaku ASCII '0' = 40, więc jeśli od kodu 42 ('2') odejmiesz kod 40('0') to otrzymasz upragnioną liczbę 2

pokazałem ci tu jakąś tam metodę prostej zamiany znaków ASCII w języku C na liczby dziesiętne ....

tyle że jest to opisane w książce - ale widzę że nie czytałeś tego - i ciekaw jestem dlaczego ?

_________________
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  
 Tytuł: Re: UART
PostNapisane: 22 lis 2012, o 07:49 
Offline
Moderator
Avatar użytkownika

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

Gwyn bardzo dobrze, że tak to uzupełniłeś .... mam nadzieję, że to da wiele do myślenia autorowi

_________________
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  
 Tytuł: Re: UART
PostNapisane: 22 lis 2012, o 21:31 
Offline
Użytkownik

Dołączył(a): 07 sty 2012
Posty: 136
Pomógł: 0

Dziękuję bardzo za pomoc:)
W niedzielę dam znać czy coś ruszyło.
Jeszcze raz wielkie dzięki:)



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

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