logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Program do obsługi USART RS232 w AVR za pomocą Terminala.

Chivo 08 Paź 2011 15:59 3923 19
REKLAMA
  • #1 10005541
    Chivo
    Poziom 26  
    Witam

    Napisałem program do obsługi portu szeregowego, ale mam mały problem. Mianowicie chce, aby gdy do procka wyśle ustaloną liczbę (145) to na wyświetlaczu pojawi się napis (Test RS232) i procek wyśle w odpowiedzi liczbę 7. Gdy wysyłam inną liczbę to wyświetla napis XXX i wysyła odebraną liczbę. Problem jest w pętli if ponieważ jak wyśle liczbę zaczynającą się na 1 (1,11,15,102 itp.) to procek reaguje tak jakby to była liczba 145.
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Pozdrawiam, Rafał
  • REKLAMA
  • #2 10005585
    Konto nie istnieje
    Konto nie istnieje  
  • #3 10005590
    Chivo
    Poziom 26  
    Chyba jako bajt. W terminalu wpisuje 145 i naciskam wyślij

    Dodano po 7 [minuty]:

    Do procesora chce wysłać ramkę: start dane stop. Procek ma sprawdzić czy pola start i stop są ok (mają ustalone wartości np:100 i 200) sprawdzić dane i coś zrobić
  • #4 10005635
    piotrva
    VIP Zasłużony dla elektroda
    w JAKIM terminalu?
    Może liczbę wysyłasz jako 3 znaki?
    No skoro sam nie jesteś pewny i piszesz chyba to warto zacząć od tego sprawdzanie.
    Poza tym trochę dziwne jest to odbieranie "ramki" w przerwaniu - zastosuj jakiś normalny bufor cykliczny...
  • #5 10005656
    Chivo
    Poziom 26  
    Czyli mam wykorzystać funkcję zwykłego odbioru po rs232???? Jak procesor wie, że dane przyszły???
  • REKLAMA
  • #6 10005790
    piotrva
    VIP Zasłużony dla elektroda
    A może zacznijmy od tego jakim terminalem wysyłasz te dane? I jak to robisz?
  • #7 10005817
    Chivo
    Poziom 26  
    Używam tego programu:
    Program do obsługi USART RS232 w AVR za pomocą Terminala.
  • #8 10005837
    piotrva
    VIP Zasłużony dla elektroda
    Ja z tym terminalem miałem pewne problemy swego czasu.
    A swoją drogą nie możesz na LCD wyświetlić tego co przychodzi z komputera?
    Poza tym (o ile dobrze pamiętam) to tym sposobem wysyła się chyba znaki, a nie liczbę. Najlepiej wyrzuć na LCD to co odbierasz.
  • REKLAMA
  • #9 10005856
    Chivo
    Poziom 26  
    Jeśli odbierze dobrą liczbę to wyświetla napis a jak złą to inny napis. Czego użyć do odbioru danych przerwania czy funkcji z dokumentacji??
  • #10 10005863
    Konto nie istnieje
    Konto nie istnieje  
  • #11 10005875
    Chivo
    Poziom 26  
    Czyli kod jest dobrze???Czy może ktoś go sprawdzić??
  • REKLAMA
  • #13 10005889
    Chivo
    Poziom 26  
    Wpisałem #145 i zamiast 145 odbieram 209 więc coś chyba dalej jest nie tak
  • #14 10005912
    Konto nie istnieje
    Konto nie istnieje  
  • #15 10005917
    Chivo
    Poziom 26  
    Odebrane dane wyświetlam w terminalu
  • #16 10005935
    Konto nie istnieje
    Konto nie istnieje  
  • #17 10007842
    Chivo
    Poziom 26  
    Zmieniłem na coś takiego. Proszę o sprawdzenie.
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #18 10007981
    Konto nie istnieje
    Konto nie istnieje  
  • #19 10008301
    Chivo
    Poziom 26  
    Umiem już zapalać diody i obsługiwać LCD a teraz się uczę RS232. Poprawiłem kod a jak mam go sprawdzić czy działa??
    
    //procedura odbioru RS232 ramki z PC
    SIGNAL(SIG_USART_RECV) 
    {
    	  if((UDR!='\r') && (UDR!='\n'))
    	  {
             rx_buf[rx_cnt++] = UDR;  
    	  }  
          else
          {
             rx_buf[rx_cnt] = '\0';
    		 rx_cnt=0;
    		 if(rx_cnt==rx_size)   //pelny bufor
             {
    		    tx_buf[0]=7;
    		    usart_transmit(tx_buf[0]);
             }
          }
          
    }
    


    Dodano po 1 [godziny] 13 [minuty]:

    Poprawiłem kod ale jak wyśle liczbę 1 cyfrową to procek wysyła 7 1 raz jak 2 cyfrową to dwa razy a trzy cyfrową to 3 razy. Chce żeby wysyłał tylko 1 raz dla podanej przeze mnie liczby np: jak wyśle 4 to odeśle 7 a dla innych liczb nie wysyła nic.
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Dodano po 17 [minuty]:

    Kolejna wersja nie działa. Po wysłaniu 5 powonieniem odebrać 7.
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Dodano po 3 [godziny] 27 [minuty]:

    Na podstawie tej strony http://cklimasz.strefa.pl/avr_rs232.htm napisałem program.
    Do procka wysyłam sekwencję :1CRLF ale nic mi nie odsyła
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #20 10010094
    Konto nie istnieje
    Konto nie istnieje  
REKLAMA