Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Odbieranie danych UART C. Program nie odczytuje pierwszej paczki danych.

Pi0trek121 26 Lut 2012 23:45 2515 5
  • #1 26 Lut 2012 23:45
    Pi0trek121
    Poziom 23  

    Witam! napisałem prosty programik odbioru danych przez rs232, jednak program nie odczytuje mi pierwszej paczki danych (pierwszego bajtu) niestety po kilku godzinach szukania nie znalazłem błędu :( Programuje na atmedze 32

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 5
  • Pomocny post
    #2 26 Lut 2012 23:59
    mirekk36
    Poziom 42  

    no a zastanowiłeś się co robi twoja funkcja odbierz() ?

    przecież ona właśnie wyrzuca ci pierwszy a później każdy co drugi bajt z tych które próbujesz wyświetlić na PORTB na przysłowiowy śmietnik

    nie wspominając, że tak się nie robi PORTB = UDR;

    takie coś nie ma prawa dobrze działać nigdy niestety :(

    gdybyś zrobił

    PORTB = odbierz();

    no to bym zrozumiał ;)

    Dodano po 3 [minuty]:

    ha - to co robisz w tej linii - to niestety kosmos 1999

    UBRRH = (unsigned char)(UART_CONST >> 0xA);

    skąd coś takiego przepisałeś ?

    że nie wspomnę o tym

    UBRRL = (unsigned char)(UART_CONST & 0xFF);

    może warto po prostu zajrzeć do noty PDF ? tam masz inicjalizację pokazaną

    0
  • #3 27 Lut 2012 00:24
    Pi0trek121
    Poziom 23  

    Dzięki wielkie :) poprawiłem tak jak w pdf-ie i działa jak należy :)

    0
  • #4 03 Mar 2012 01:13
    Pi0trek121
    Poziom 23  

    Mam jeszcze jedno pytanie... jak można sprawdzać, czy następna dana została wysłana? Jakaś pętla sprawdzająca bit startu? albo coś podobnego? ma ktoś jakieś pomysły?

    0
  • #5 03 Mar 2012 06:51
    mirekk36
    Poziom 42  

    Teraz to odbiór na przerwaniach i bufory cykliczne - to załatwi wszystko.

    0
  • #6 03 Mar 2012 20:15
    Pi0trek121
    Poziom 23  

    A mógłbym prosić przykład takiego programu?

    Dodano po 3 [godziny] 3 [minuty]:

    Chciałem spróbować zrobić przerwanie na bit startu, jednak atmega nie obsługuje przerwań zewnętrznych na porcie odbioru danych :( ma ktoś pomysł jak sprawdzić bit startu?

    0