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

ATmega128 i komunikacja z PC RS232

kris_jr 27 Cze 2010 14:31 2580 8
REKLAMA
MediaMarkt Black Week
  • #1 8236768
    kris_jr
    Poziom 10  
    Witam,
    Usiłuję zmusić ATmegę128 do komunikacji z komputerem przez RS-232. Niestety mam z tym duży kłopot.
    Procesor chodzi z kwarcem na 16MHz, a transmisja do komputera ma się odbywać poprzez wbudowany w procesor USART z prędkością 115,2kbps. Transmisja ma być w zasadzie ciągła do póki są dane do wysłania (a będą cały czas) i jedynie procesor będzie nadawał cokolwiek do komputera i nie przewiduję żadnej zwrotnej komunikacji.
    Poniżej zamieszczę fragmenty programu gdzie jest skonfigurowany USART i tam gdzie ma się odbyć wysyłanie. Pomiędzy wysyłka poszczególnych bajtów procesor prowadzi też komunikację SPI z przetwornikiem i zbiera próbki oraz wykonuje obliczenia. Nie używam przerwań gdyż zarówno SPI jak i USART jest zautomatyzowany a i tak muszę czekać po kolei na próbki potem to przefiltrować, policzyć i wysłać do komputera. SPI jest o wiele szybsze niż te 115,2kbps więc zbieram próbki w czasie gdy odbywa się transmisja RS'em.

    ATmega128 i komunikacja z PC RS232 ATmega128 i komunikacja z PC RS232 ATmega128 i komunikacja z PC RS232 ATmega128 i komunikacja z PC RS232

    Wydaje mi się że program napisany jest dobrze, a przynajmniej dobrze działa w symulatorze AVR Studio, ale w praktyce już nie udaje mi się skomunikować z komputerem. Więc może coś przeoczyłem, albo mam mylne pojęcie o zasadach takiej komunikacji.
    Posiadam Laptopa z systemem Windows Vista, który nie ma wbudowanego żadnego "terminala" czy coś w tym rodzaju. Pościągałem z sieci kilka programów do tego takich jak: Hercules 3.2.3.0, Hyper Terminal 6.4, Terminal 1.0.1, Serial monitor (ser232mon), ale mimo ustawienia odpowiedniego portu com, prędkości transmisji 115.2k, oraz formatu ramki (1bit startu, 8bitów danych, bez bitu parzystości, 1bit stopu) nie udało mi się nic odebrać.

    Niepokoi mnie nieco fakt iż w dokumentacji procesora przy ustawieniach prędkości transmisji jest stosowana ustawiana programowo podziałka która w zależności od wybranej prędkości transmisji i częstotliwości oscylatora daje różnej wielkości błąd w stosunku do ustandaryzowanej prędkości transmisji. I tak w przypadku fosc=16MHz i transmisji 115,2kbps może być -3,5% czyli 111,168kbps lub +2,1% czyli 117,62kbps i nie może być idealnie. Zastanawiam się czy w ogóle jest dopuszczalna taka różnica w prędkości transmisji i czy ten błąd nie może być powodem braku komunikacji.

    Poza tym może coś robię nie tak, może coś źle zmontowałem, a może taka transmisja musi się odbywać dwukierunkowo (musi być jakoś sterowana)?
    Może fakt, że nie posiadam portu szeregowego w komputerze tylko używam przejściówki RS232->USB uniemożliwia prawidłową transmisję? Chociaż mało to prawdopodobne bo używam tej samej przejściówki i tej samej prędkości do programowania i wszystko działa jak należy.

    Bardzo proszę o pomoc bo już nie wiem co mam robić.

    tu jeszcze fragment układu do sprawdzenia:

    ATmega128 i komunikacja z PC RS232

    Dodano po 4 [godziny] 44 [minuty]:

    Może jeszcze usystematyzuję te problemy.
    Dobrze by było gdyby ktoś umiał mi odpowiedzieć między innymi na pytania:
    1. Czy wspomniane odstępstwa -3,5% lub +2,1% od standardowej teoretycznej prędkości transmisji mogą mieć wpływ na poprawność transmisji?
    2. Czy można używać USART'a do komunikacji w standardzie RS232 w taki sposób jak ja to zrobiłem. Czyli uruchamiam w procesorze tylko nadajnik i tylko procesor nadaje, a niczego nie odbiera.
    3. Czy sama struktura ramki jest już wystarczająca do właściwej transmisji czy może trzeba posługiwać się jeszcze jakimiś dodatkowymi sygnałami sterującymi transmisją (w najprostszej formie)?
    4. Czy wspomniane programy (trochę się wysypują pod Vistą) i system operacyjny, a także używanie wirtualnego portu com przy zastosowaniu przejściówki RS232->USB mogą być przyczyną braku prawidłowej komunikacji? (jak wspomniałem przejściówka z programatorem sprawuje się bardzo dobrze)
    5. Może są jeszcze inne aspekty na które nie zwróciłem uwagi, a moga być kluczowe dla transmisji?

    Będę bardzo wdzięczny za wszelką pomoc
  • REKLAMA
    MediaMarkt Black Week
  • #2 8239000
    flapo213
    Poziom 21  
    Witaj,

    No w asemblerze to raczej Ci nie pomogę, HW wydaje się ok, ale kwarc chyba faktycznie źle jest 3.5% to za duży błąd, musisz zastosować kwarc z odpowiednią końcówką czyli np. 11.059MHz lub inny podobny właśnie po to są te kwarce z tymi właśnie końcówkami żeby np. Uart dobrze śmigał. Na początek to zmień kwarca, odnośnie kodu to ciężko mi stwierdzić mogę Ci co najwyżej kawałek kodu w C podesłać odnośnie konfiguracji UARATA.

    PS.

    Ale przy dobrej konfiguracji ATMegi powinieneś chociaż krzaki widzieć, sprawdź przejściówkę z innym działajacym urządzeniem np z drugą przejściówką czy coś otrzymujesz. Ściągnij sobie RS sniffera to będziesz mógł podsłuchać sobie czy coś Ci przychodzi po RS-ie.

    Pozdrawiam i życzę sukcesów.
  • REKLAMA
    MediaMarkt Black Week
  • #3 8239033
    tadzik85
    Poziom 38  
    Choć tez w asemblerze ci niewiele mogę pomóc, w dokumentacji masz gotowe funkcje do obsługi UARTU zawarte warto z nich skorzystać.
  • #4 8239163
    kris_jr
    Poziom 10  
    Bardzo dziękuję za podpowiedzi. Spróbuję z tym snifferem i zobaczę co się będzie działo. Co do kwarcu to jeśli będzie to jedyne rozwiązanie to spróbuję podmiany, choć trochę ucierpi procesor na szybkości czego wolałbym uniknąć.

    do tadzik85 dziękuję za informację, choć akurat dokumentację przeczytałem, ale mam jedną uwagę dla wszystkich którzy trafią na ten temat a będą chcieli wykorzystać tą radę. Otóż te gotowe funkcje nie działają na ATmedze w takiej formie jak są zawarte w dokumentacji. Tam jest podany przykład, który może i działa na mniejszych procesorach, ale w ATmedze128 rejestry USART'a są poza zakresem dla funkcji tam użytych dlatego trzeba delikatnie przerobić procedurę tak jak ja to zrobiłem w zamieszczonym fragmencie dotyczącym wysyłania.

    Natomiast różnica, którą wprowadziłem we fragmencie dotyczącym uruchomienia i konfiguracji USART'a polega na uruchomieniu tylko nadajnika (w stosunku do nadajnika i odbiornika w przykładzie) oraz ustawieniu innej prędkości transmisji i nieco inny format ramki tzn. bez bitu parzystości.
    Wydaje mi się że samo ustawienie zrobione jest prawidłowo, ale może jednak coś powinno być tu ustawione inaczej z jakiegoś powodu, którego nie wziąłem pod uwagę?
  • #5 8242710
    kris_jr
    Poziom 10  
    Jeszcze jedno pytanie:
    Czy to że we wtyczce 9-pinowej nie mam zwartych ze sobą pinów 4-6 i 7-8 (widziałem że gdzieś ktoś tak zwierał te wyprowadzenia) może powodować komplikacje z wysyłaniem przez RS232?
  • #6 8242737
    tadzik85
    Poziom 38  
    Ja miałem tak ze w przypadku hyperterminala nie chciało to działać bez zwartych tych nóżek, Jednak nie zawsze jest to wymagane, niektóre aplikacje nie wykorzystują w ogóle tych sygnałów.
  • #7 8242772
    kris_jr
    Poziom 10  
    Wykryłem jeden problem z układem, ale nie wiem czy to jest powodem kłopotów. Zauważyłem że na płytce mam jeden "zimny lut" i to akurat na nóżce zasilającej od procesora. Jest to nóżka 52. Niestety podczas próby poprawienia tego doszło do katastrofy, gdyż odsysarka wyrwała mi tą nóżkę i to przy samej obudowie procesora :( Jest niby jeszcze dróga nóżka zasilająca 21 i ona jest w porządku.

    I teraz prośba o pomoc:

    1. Czy to że ta nóżka 52 była źle przylutowana mogło sprawiać kłopoty z RS'em i być może jeszcze inne problemy z działaniem procesora?

    2. Czy bez tej nóżki, czyli na jednym zasilaniu procesor może dalej prawidłowo pracować (być może z jakimiś ograniczeniami) czy też niezbędne są oba zasilania do jakiejkolwiek pracy procesora?

    3. Jeżeli jest ona niezbędna to czy można jakoś wyskrobać/ ukruszyć obudowę żeby się do niej dostać i ją chwycić lutem, czy szkoda w ogóle wysiłku i trzeba zaopatrzyć się w nowy procesor, a być może robić płytkę od nowa (bo pad też został wessany)
  • #8 8242950
    adambehnke
    Poziom 24  
    Jak ja rozpoczęłem zabawę z atmegami to także w pierwszych prototypach używałem tylko jednej nóżki zasilającej. Oczywiście było to chyba z mojej głupoty. Występowały wówczas problemy z pracą procesora. W sumie jak procesor miałby być zasilany z jednej nóżki to nie robili by kilku. Musiałeś zdrowo podgrzać tą nóżkę aby ją oderwać. Ale użyj topnika do smd , lupy i kawałka drucika i wszystko da się przylutować. Oczywiście posiadając mini grot do stacji lutowniczej. Ja także miałem takie przypadki z oderwanymi nóżkami w tqfp100.
  • #9 8243881
    gaskoin
    Poziom 38  
    do odsysania cyny z tak maleńkich nóżek nie używa się armaty :) najlepiej jest nadmiar zebrać plecionką miedzianą, albo wziąć jakiś stary kabel miedziany, zdjąć izolację i działa tak samo.

    jako terminal polecam http://hw-server.com/software/termv19b.html zawsze używam tylko RX TX i GND i działa, do HT mam jakiś uraz.
REKLAMA