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.

[ATMEGA162][C]RS232 różnica na laptopie i stacjonarnym

janas1 19 Sie 2009 22:37 2359 18
  • #1 19 Sie 2009 22:37
    janas1
    Poziom 11  

    Witam

    Mam pytanie czy ktorys z forumowiczow spotkal sie z podobnym problem.
    Otóż transmisja skonfigurowana jest następujaco 9600 bit, 8bitow danych, bit stopu, brak sterownia przeplywem. mikrokontroler wspolpracuje ze srodowiskiem labview z ktorego wysylane jest 72 bajty danych ( tu ustawione jest identycznie ) .Procek odbiera wszystko w trybie przerwaniowym i wszystko byloby ok gdyby nie fakt ze na laptopie nie mam zadnych bledow transmisji, mimo braku jakichkolwiek zabezpieczen ( sprawdzania poprawnosci ) a gdy podlacze to samo urzadzenie do komputera stacjonarnego , wlacze ten sam program w labview dane po prostu gdzies gina i cala transmisja sie wykrzacza.Wymienialem juz maxa 232 i kondensatory z nim wspolracujace lecz nie mam pojecia co moze byc przyczyna takiego zachowania . Macie moze jakies sugestie ??
    Jutro wkleje kod programu może to w jakis sposob pozwoli na analize problemu .



    Poprawiłem tytuł - Proszę nie stosować slangu. [c_p]

    0 18
  • #2 19 Sie 2009 23:12
    atom1477
    Poziom 43  

    No ale zaraz. Wysyłasz z kompa więc jak to możliwe że na kompie mogą być błędy?

    0
  • #3 19 Sie 2009 23:31
    janas1
    Poziom 11  

    wysylam z kompa zgadza sie , nie wiem jak moga pojawiac sie bledy , tak jak pisalem to samo oprogramowanie (plik) otwieram w labview na lapku i na stacjonarnym , na lapku transmisja idzie bez problemu ( wysylanie cykliczne ) a na stacjonarnym mi sie komletnie wykrzacza ( testowane na 3 stacjonarnych na uczelni, zaden dobrze nie dziala ) , wiem ze porty sa wporzadku bo po zwarciu linii tx z rx wszystko przechodzi , nie wiem jakies inne poziomy napiec czy cos.
    Odnosnie bledow na kompie chodzi mi o to ze odebrane bajty w przerwaniu odsylam przez rsa do kompa , odbieram i odrazu odsylam i widze ze do powiedzmy 50 idzie w porzadku a reszty juz mi nie przesyla tak jakby ich nie odebrano

    0
  • Pomocny post
    #4 19 Sie 2009 23:35
    GrEG0
    Poziom 14  

    Używasz wewnętrznego generatora RC czy zewnętrzny kwarc ?
    U mnie czasami też występowały błędy gdy używałem wew. generatora RC.

    0
  • Pomocny post
    #5 19 Sie 2009 23:39
    atom1477
    Poziom 43  

    No to trzeba było napisać że odsyłasz dane do kompa.
    Poziomy napięć w laptopie mogą byc mniejsze, ale jak masz MAX232 to i tak niepowinno być problemów.
    Pokaż schemat.

    0
  • #6 19 Sie 2009 23:41
    janas1
    Poziom 11  

    zewnetrzny kwarc 16 Mhz tylko dlaczego to dziala na lapku , zero bledow , a na normalnym niechce przejsc , piszac niechce przejsc mam na mysli iz dane ktore odbieram wysylam pozniej do ukladow tlc5940 ( drivery led) ale robie to w ten sposob ze po kazdym odebranym bajcie zwiekszam licznik i gdy osiagnie on 72 (ostatni bajt okresla czego dotycza dane ) ustawiana jest flaga ,sprawdzana w glownej petli programu , po czym dane wysylane sa do ukladow na stacjonarnym tak jak pisalem wykrzacza sie na 50 najcie okolo , a nieraz wogole nie idzie
    [ATMEGA162][C]RS232 różnica na laptopie i stacjonarnym

    0
  • Pomocny post
    #7 19 Sie 2009 23:55
    atom1477
    Poziom 43  

    Czekaj czekaj.
    Wysyłasz dane z kompa do AVR, tak?
    Potem z AVR do tych układów TLC5940?
    I jednocześnie spowrotem do kompa i to to właśnie nie działa?

    Dodano po 5 [minuty]:

    A chociaż kompresować do GIF umiesz?

    0
  • #8 20 Sie 2009 00:04
    janas1
    Poziom 11  

    przy zwartych rx z tx ( wtyczka na sztywno ) calosc przechodzi bez problemow , tak wiec to nie wina kompa przynajmniej od tej strony - inne urzadzenia np mierniki itd pracuja na nim normalnie po rs , kondensatory itd na pewno sa dobre , napiecie zasilajace caly uklad to pewne 5V z zasilacza laboratoryjnego lub zasilacza od atari , uzywam skretki ekranowanej polaczonej z kawalkiem zwyklego przewodu ( polaczenie komp a uklad ) tak wiec moze to to ale nie rozumiem dlaczego na latopie jak pisalem calosc chodzi bezblednie , moj promotor stwierdzil tylko ze to blad programowy ( bez patrzenia w kod i tyle) , moje zdanie jest inne choc nie wiem jaka jest odpowiedz , aha dodam jeszcze ze na kompie stacjonarnym w domu na poczatku tez nie dzialalo a teraz jest ok , nie wiem czary ?? wymienic kwarc ? moze zwolnic transmisje ?bo na predkosci mi jakos specjalnie nie zalezy

    Dodano po 5 [minuty]:

    wysylam z kompa do avr i jednoczesnie w obsudze przerwania odbioru wysylam do kompa ( to do kompa to tylko w celu sprawdzenia ) i pozniej jak licznik inkrementowany w przerwaniu osiagnie wartosc 72 ustawiam flage ktora testowana jest w petli glownej , i jezeli ta flaga jest ustawiona wysylam ta tablice przez spi do tlcekow , tylko ze na stacjonarnym nie przechodza wszystkie bajty , zabezpieczylem sie moze dosc naiwinie w ten sposob ze jezeli licznik liczacy odebrane bajty bedzie wiekszy niz 72 zeruje go przez co moge wkryc bledy w transmisji ( dlatego ze zmienna numer kasowana jest pozniej - jezeli tryb_vg jest rowny zero lub jeden ) , a na stacjonarnym mam tak zawsze z uwagi ze po pierwszym wyslaniu przechodzi ok 50 bajtow i nastepne wysylanie to znow 50 , kod moze pomoc ??? z tym ze jest w nim balagan na maksa.
    umiem sorry, o teraz widze dodaj obrazek :)

    Code:
     
    
    void uart_start(void)
        {
          UBRR0H=0;
          UBRR0L=103;//6;
          UCSR0B=(1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0);
          UCSR0C=(1<<URSEL0)|(1<<UCSZ01)|(1<<UCSZ00);   
     
        }

    Code:

    SIGNAL (SIG_USART0_RECV)
    {

     tab_dan_g[numer]=UDR0;
     uart_wyslij(tab_dan_g[numer]);
       
       if(numer==72)
        {
          moje_flagi.bits.flaga1=true;
          tryb_vg=tab_dan_g[72];   
       
       }

      numer++;

           if(numer>73)
          {
             numer=0;
             uart_wyslij(88);
             uart_wyslij(88);
             uart_wyslij(88);
             uart_wyslij(88);
          }
     
    }

    0
  • #9 20 Sie 2009 08:40
    loocasm
    Poziom 14  

    Jakoś nie podoba mi się odsyłanie każdego bajtu od razu po odebraniu go... Teoretycznie zanim AVR skończy odsyłać bajt - może przyjść do niego kolejny, i co wtedy...?
    Ja bym to zrobił tak, że poczekałbym na odbiór całej ramki 72-bajtowej, po czym bym ją odesłał spowrotem.

    No chyba, że te 72 bajty nie są wysyłane ciągiem, a pojedynczo, stosunkowo rzadko?

    0
  • #10 20 Sie 2009 09:26
    janas1
    Poziom 11  

    nawet po wyrzuceniu tej linijki ktora odsyla bajt od razu , problem nadal pozostaje , probowalem juz - zeby jak najmniej kodu bylo w obsludze przerwania .Pozatym ciekawi mnie i w sumie to jest moj problem dlaczego jak podlacze uklad do laptopa to wszystko smiga wysmienicie.

    0
  • Pomocny post
    #11 20 Sie 2009 09:32
    tmf
    Moderator Mikrokontrolery Projektowanie

    Moze glupie pytanie - masz prawidlowo polaczone masy w komputerze i AVR? Laptop ma zupelnie inny zasilacz niz PC, PC jest podlaczony do gniazdka z przewodem ochronnym?

    0
  • Pomocny post
    #12 20 Sie 2009 10:50
    loocasm
    Poziom 14  

    Skąd wiesz, że problem pozostaje, skoro na PC nie masz wiadomości zwrotnej....? Po zachowaniu się tych sterowników?

    0
  • #13 20 Sie 2009 11:15
    janas1
    Poziom 11  

    tmf : masa jest polaczona prawidlowo tzn. masa urzadzenia podlaczona jest do masy wtyczki ktora wkladam do kompa .
    U mnie zaden komp nie ma podlaczenia do " bolca" ze wzgledu na to ze nie mam takiego kontaktu ( na tej konfiguracji uklad dziala na lapku ) . na uczelni z kolei sa wtyczki z ochronnym i tam wlasnie to na stacjonarnych nie chodzi a na lapku oczywiscie smiga

    oocasm : tak jak usune ta linijke z przerwania to wiem ze uklad nie dziala prawidlowo (po wyslaniu danych jasnosc nie ulega zmianie ) wlasnie po zachowaniu ukladow, ale dokladajac petle ktora wysyla zawartosc tablicy ktora jest zapelniana danymi odbieranymi , w petli glownej , tez widze ze dane sie nie zgadzaja .

    Sprobuje zwolnic transmisje moze to bedzie rozwiazaniem problemu , z tym ze dopiero w piatek bede mogl powiadomic jak przebiegla proba

    0
  • Pomocny post
    #14 20 Sie 2009 11:30
    atom1477
    Poziom 43  

    Masz zły sposób sprawdzania poprawności transmisji.
    Komp stacjonarny może powodować jakiś mały impuls na linii TXD podczas uruchamiania się komputera.
    Więc AVR odbiera go jako bajt. Potem wysyłasz 72 Bajty, ale AVR odbiera 71 bo wcześniej już odebrał jeden.
    I na koniec odbiera ten 72-gi i traktuje go jako ten ostatni bajt kontrolny. A on nim nie jest.
    Powinieneś raczej zrobić znacznik początku ramki, znacznik końca ramki i liczyć CRC. I przypadku błędu nie kasować całej ramki, lecz przesuwać ją o jeden (usuwać pierwszy bajt).

    0
  • #15 20 Sie 2009 11:41
    janas1
    Poziom 11  

    atom1477: no dobrze a jezeli wkladam wtyczke od rsa na wlaczonym juz kompie stacjonarnym i dopiero wtedy odpalam uklad to blad o ktorym piszesz, z pierwszym bajtem powinien zostac wyeliminowany -przynajmniej tak mi sie wydaje , ale to co robie z tym prockiem to tak naprawde zupelna dla mnie nowosc bo wczesniej umialem migac tylko dioda , a poczatkowo stracilem jakies dwa miesiace na asemblera po czym stwierdzilem ze kod staje sie tak nieczytelny ze sam sie w nim gubie .
    jezeli chodzi o liczenie ramki to masz racje ( poczatek ramki ) tylko ze to wymagaloby zmiany oprogramowania w labview a nie mam juz na to czasu :( .
    rozumiem ze liczenie sumy kontrolnej wymagaloby oprogramowania zarowno po stronie mikrokontrolera jak i labwiev .
    najsmieszniejsze w tym wszytkim jest to ze uklad podlaczylem u siebie do stacjonarnego przed chwila i tez smiga ,tylko te kompy uczelniane sa jakies oporne i tak jak pisalem widze ze po ok 50 bajtach nic juz wiecej nie chce przejsc
    czy zwolnienie transmisji mogloby ewentualnie pomoc ?

    czy piszac znacznik masz na mysli jakis dodatkowy bajt,bajty ktore mikrokontroler sprawdza np. jezeli odebrano na poczatku dwa zera to znaczy ze nastepne bajty sa danymi , jezeli odebrano jedno zero to znaczy ze nalezy przesunac cala ramke tak ? i to samo na koncu czyli znow powiedzmy dwa zera i traktuj bajty jako dane do napotkania dwoch zer po sobie ??

    dobra sprobuje najpierw zwolnic transmisje , jezeli to nie pomoze to sprobuje wykonac mniej lub bardziej udolnie to co napisalem wyzej .

    Dzieki narazie za wszelka pomoc bo dotychczas uslyszalem tylko ma Pan problem , napisze za jakies dwa dni czy to pomoglo

    0
  • #16 20 Sie 2009 12:25
    tmf
    Moderator Mikrokontrolery Projektowanie

    Detekcje ramki mozesz tez zrobic inaczej. Jesli pomiedzy ramkami uplyewa dluzszy czas niz pomiedzy bajtami w ramce to mozesz zrobic tak, ze nieodebranie kolejnego bajtu w zadanym czasie zeruje licznik bajtow w ramce. Wtedy nawet przypadkowe smieci nie powoduja tragedii. Do tego mozna dac jeszcze inne testy - typu odbierasz kolejne bajty, az nie bedzie nastepnego i bierzesz pod uwage tylko ostatnie 72.

    0
  • #17 20 Sie 2009 19:16
    janbernat
    Poziom 38  

    janas1 napisał:
    , aha dodam jeszcze ze na kompie stacjonarnym w domu na poczatku tez nie dzialalo a teraz jest ok , nie wiem czary ??


    Dodano po 1 [minuty]:

    janas1 napisał:

    U mnie zaden komp nie ma podlaczenia do " bolca" ze wzgledu na to ze nie mam takiego kontaktu ( na tej konfiguracji uklad dziala na lapku ) . na uczelni z kolei sa wtyczki z ochronnym i tam wlasnie to na stacjonarnych nie chodzi a na lapku oczywiscie smiga


    To może nie szukać w programie?
    Najłatwiej to w domu włączyć kompa do gniazda z zerowaniem, sprawdzić-a potem bez zerowania-sprawdzić ponownie.
    A jeszcze w wersji bez zerowania wtyczkę wetknąć tak jak była a potem odwrotnie.

    0
  • #18 22 Sie 2009 11:40
    robin_pl
    Poziom 12  

    janas1 napisał:
    [...]Procek odbiera wszystko w trybie przerwaniowym i wszystko byloby ok gdyby nie fakt ze na laptopie nie mam zadnych bledow transmisji, mimo braku jakichkolwiek zabezpieczen ( sprawdzania poprawnosci ) a gdy podlacze to samo urzadzenie do komputera stacjonarnego , wlacze ten sam program w labview dane po prostu gdzies gina i cala transmisja sie wykrzacza.


    A może to wina Windows'ów? Co jest na laptopie a co na stacjonarnym? O ile używasz Windows'ów ;)

    0
  • #19 23 Sie 2009 16:03
    downybear
    Poziom 10  

    Witaj,
    Różnica między laptopem a stacjonarnym jeśli chodzi o RS232 może być baaardzo duża.
    Współczesne laptopy maja najczęściej jedynie USB, natomiast stacjonarne mają starą, poczciwą 16550 lub jej warianty.

    Jeżeli masz RS232 przez USB, to transmisja nie wykorzystuje przerwań PC, a wielkość bufora zależy od kostki USB/RS i/lub softu sterownika (VCP).

    Natomiast 16550 ma TYLKO 16- bajtów bufora, a więc jeśli idziesz bez sterowania przepływem, to wszystko być może, najczęściej niezbyt dobrze.... i wszystko zależy od jakości softu obsługującego RS w PC - bez sterowania przepływem musi być duży priorytet dla RS-a, a komputer musi też być odpowiednio szybki żeby dał radę powyjmować te bajty z 16550.

    Podłącz przejściówkę USB/RS do PC-ta i zobacz tą drogą. Jeśli się poprawi, to masz jasność.

    Mariusz

    0