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

Xmega128 - Jak zacząć pracę z UART i ASF? Praktyczne wskazówki dla początkujących

Obywatel LutZek 08 Cze 2016 23:20 1674 9
  • #1 15729775
    Obywatel LutZek
    Poziom 13  
    Witam
    Choć temat nawiązuje do UARTu, to chodzi bardziej o to jak zacząć pracować z Xmegą w praktyce. Spodziewałem się, że przeprowadzka z Atmegi na Xmegę to będzie małe piwo.
    Chciałem zrobić prosty program typu echo, stwierdziłem – dla początkującego pewnie łatwizna – znajdę parę przykładów, przeanalizuję, spojrzę do dokumentacji, napiszę i po sprawie.
    Więc pierwsze po wyszukaniu – sporo kodów odwołuje się do dokumentu „AVR1307: Using the XMEGA USART”. Dokument ten sugeruje, by używać biblioteki usart_driver.h (standardowo nie zaimplementowanej w Atmel Studio 6.2).
    Zdobyłem bibliotekę – w środku odwołanie do kolejnej, której nie ma. Stwierdzam - coś nie tak. W końcu dowiaduję się o Atmel Software Framework. Po kilku próbach dochodzę do sedna sprawy – mam zainstalowane piękne biblioteki (nie licząc tego, że biblioteka w asf nazywa się usart.h i ma kompletnie inną składnię.)
    W końcu po 5-ciu godzinach przetrzepywania internetów, grzebania w dokumentacjach, klikania i przeglądania strony ASF nie zrobiłem nic. Stąd pytanie – jak żyć panie premierze? Na stronach, na których często rozwiązywana jest m.in. problematyka xmegi – rzadko kiedy wspomina się o ASF – znaczy się to, że albo to jest tak oczywista oczywistość, że nie poświęca się na to uwagi, albo jakieś pro narzędzie w które amatorzy się nie pakują.
    Pytanie więc – jak pisać programy na xmegę – z ASF? Bez ASF? Czy po prostu brać dokumentację i jechać na rejestrach jak w atmegach.

    Pozdrawiam
  • Pomocny post
    #2 15729802
    tmf
    VIP Zasłużony dla elektroda
    ASF ma swoje wady i zalety. Zaletą jest abstrakcja od sprzętu i to, że masz dużą ilość gotowego softu implementującego wszystko, począwszy od sterowników różnych klas urządzeń USB, poprzez kontrolery graficzne, a skończywszy na jakiś wyspecjalizowanych urządzeniach. Drugą zaletą jest przenośność kodu - zmieniasz procek, a kod zostaje taki sam. Przy czym zmiana to np. przeskok z ATMega na XMEGA, czy ARM. Oczywiście za to płaci się cenę - generowany kod jest dłuższy niż robiący to samo bez ASF i trzeba się wgryźć w koncepcję tego frameworka. Dokładne opisy są na stronie Atmela - masz szczegółowo opisaną każdą funkcję + kilka tysięcy przykładów w samym Atmel Studio.
    Ja wolę pisać bez ASF, ew. korzystając tylko z pewnych elementów ASF. Pisanie na XMEGA bez ASF jest banalne, jak się człowiek przestawi z ATMegi, gdzie wszystko było max poplątane, na koncepcję nazewnictwa rejestrów w XMEGA. Z pewnością programowanie bezpośrednio na rejestrach jest efektywniejsze, prowadzi do powstania szybszego, bardziej zwartego kodu.
  • #3 15762703
    WMKN2205
    Poziom 9  
    Proste echo działa super w przykładzie "ESP-ESP-PC"+ dwa kabelki do krosowania UART'ów i Terminal via USB, poruszałem ten temat na forum.
    Teraz trochę po biadolę -
    TMF pisze
    Cytat:
    Ja wolę pisać bez ASF, ew. korzystając tylko z pewnych elementów ASF. Pisanie na XMEGA bez ASF jest banalne ...

    Nie wszyscy jednak wydali trzy książki na temat atmeli(o których wiem i mam pod ręką). Zdaję sobie sprawę iż banalizowanie tematu często gęsto jest wywołane brakiem czasu zdarza się nam wszystkim (ciężkie czasy powiedział ... zdejmując zegar ze ściany), może jednak ono negatywnie wpływać na popularność Xmegi. X3-DIL64 jest dobry i ... w wersji eco, jednak na stronie producenta całkiem przyjemny kurs się urwał. Na "mikrokontrolery.blogspot" też cisza.
    Rozumiem przeto iż:
    * Wyprzedano cały nakład książek, a dodruk jest nie opłacalny.
    * Polski rynek jest nasycony, a ekspansja na zachód X3-DIL64 zablokowana przez embargo technologiczne, nie sprzedamy tej technologii(znalazłem takie cacko chyba jest lepsze ceną :cry: i rozmiarem Link albo Link).
    Ok. już mi trochę lepiej.
    Panie i Panowie pomóżcie nam początkującym. Ledwo co odpaliłem 1-wire na Xme'dze teraz próbuję zaprzyjaźnić się z USB via ASF, żaden z tematów nie jest dla mnie banalny, jest to oczywiście spowodowane brakiem wiedzy i doświadczenia.
    Prosty przewodnik krok po kroku wykorzystujący popularne i efektowne podzespoły z drobnym wyjaśnieniem co i dlaczego konfigurujemy w ASF - normalnie bajka.
    Propozycje dostępnych tematów w ASF tak na szybko bo już późno:
    * Wyświetlacze: SSD1306, ILI9341, GFX...
    * Komunikacja: USB, UART, TWI, SPI ... stdio, IOPORT...
    * Dalej pójdzie już z górki ...
    Owszem wygenerowany kod nie będzie optymalny i daleki od komercyjnych rozwiązań o czym ostrzegają nagłówki wygenerowanych plików. Będzie za to realizował określone/oczekiwane funkcje co zadowoli początkujących i wciągnie w nurt. Po to chyba jest ASF?
    Budowniczowie rakiet zawsze z tego wycisną kilka cykli/bajtów/miliwatów i brawo Im za to.
    Pozdrawiam
  • #4 15774744
    Obywatel LutZek
    Poziom 13  
    Bardzo dziękuję za odpowiedź. Doszedłem do wniosku, że wolę wiedzieć co się dzieje w środku i będę pisał standardowo "jak Bozia nakazała", czyli z wykorzystaniem rejestrów.

    Wziąłem się więc za ten UART - podłączam do komputera przez konwerter USB-RS232 i MAX3232.

    Chciałbym sprawdzić poprawność dwóch programów jakie napisałem. Pierwszy z nich ma na celu wysyłanie bajtu o wartości 44 (wartość wpisana przypadkowo) z prędkością 9600bps (zegar 2MHz)

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Szczerze mówiąc na ekranie wyskakują mi jakieś szlaczki. Czasem jest transmisja, czasem nie ma - ogólnie zero jakiejś logicznej spójności. Drugi program, to standardowy program typu "echo" z obsługą przerwań:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Czy wszystko tu jest ok? Zdaję sobie sprawę, że to może być problem z jakimś połączeniem, choć je sprawdzałem kilka razy. Chciałbym jednak wiedzieć, że przynajmniej programy są dobre :)

    Pozdrawiam
  • #5 15775376
    tmf
    VIP Zasłużony dla elektroda
    Krzaki są najczęściem przejawem źle dobranego taktowania UART - czyli źle ustawionych rejestrów odpowiadających za szybość transmisji.
    Jeśli zaczynasz zabawę na rejestrach to ściągnij darmowe przykłady do moich książek o XMEGA (są do pobrania na stronach Helionu). Akurat do wyboru baudrate używam funkcji pochodzącej z ASF - działa wyśmienicie. Swoją drogą - w swoich programach nie musisz inkludować nagłówka asf.h, jeśli nie korzystasz z tego frameworka.
    BTW, IMHO wykorzystanie fizycznego UART do komunikacji z PC jest uciążliwe (kabelki, konieczność zastosowania transceivera poziomów) - użyj w tym celu USB CDC. Przykład dla XMEGA umieściłem na stronie kol. Dondu:
    http://mikrokontrolery.blogspot.com/2011/03/X...emulacja-portu-szeregowego-rs-232-na-USB.html
  • #6 15780958
    Obywatel LutZek
    Poziom 13  
    Jest pewien postęp. Program ma za zadanie wysyłać literę B z prędkością 9600bps.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Z opóźnieniem w pętli głównej przed wysłaniem znaku - działa bez zarzutów. Po usunięciu delay'a wszystko się sypie. Nie ma znaczenia, czy testuję transmisję z prędkością 9600, 4800, 1200 czy 300 bps oraz czy wysyłam cały czas jeden znak, czy 3 różne. Zawsze wyskakują podobne szlaczki:

    Cytat:
    BHB((ABHB( B( B( B( B( B( BBHB((ABHB( B
    BHB((ABHB( B( B( B( B( BBHB((ABHB( B( B
    ( B( B( B( BBHB((ABHB( B( B( B( B


    Tudzież tak:

    Cytat:
    01000010 01001000 01000010 00101000 00101000 01000001 01000010 01001000
    01000010 00101000 00001001 01000010 01000010 01001000 01000010 00101000
    00101000 01000001 01000010 01001000 01000010 00101000 00001001 01000010
    00101000 00001001 01000010 00101000 00001001 01000010 00101000 00101000
    01000001 01000010 01001000 01000010 00101000 00001001 01000010 00101000


    Zastanawiam się, czy to ciągle wina programu, czy wchodzi w grę kompatybilność EM i to, że łączę to na przewodach.

    Pozdrawiam
  • #7 15781636
    WMKN2205
    Poziom 9  
    Dla F_CPU ja bym ustawił:
    #define PRESCALER 207
    #define BAUD_SCALE 0
  • #8 15782007
    Obywatel LutZek
    Poziom 13  
    Nie ma to wielkiego znaczenia. Wprowadza jedynie błąd większy o 0,14 pkt%. Poza tym wynik jest dokładnie taki sam. Prześledzę jeszcze inne ustawienia bitu startu/stopu.
  • #9 15783653
    WMKN2205
    Poziom 9  
    Polecam artykuł kolegi TMF.
    Link
    W parę minut masz dwa UARTY + dwa wirtualne com'y gotowe do testu.
  • #10 15797757
    Obywatel LutZek
    Poziom 13  
    Problem rozwiązany. Źródłem problemu był konwerter USB-RS232. Awaria była sprytnie zakamuflowana, bo spowodowanie echa przez zwarcie pinów RxD i TxD w złączu DB0 na wyjściu konwertera sugerowało poprawne działanie. Po rutynowej wymianie konwertera na inny okazało się, że program jest jak najbardziej dobry.

    Pozdrawiam i dziękuję za odpowiedzi :)
REKLAMA