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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 1 maja 2025, o 19:18


    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: 27378
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 27378
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 27378
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 27378
    Lokalizacja: Szczecin
    Pomógł: 1043

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