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

[ATmega16] ATmega16 i RS232: Problemy z komunikacją UART przy użyciu konwertera USB-RS232

Mig_16 19 Lis 2013 17:34 2052 15
  • #1 12970125
    Mig_16
    Poziom 15  
    Projektuje układ wykorzystujący RS 232.

    [ATmega16] ATmega16 i RS232: Problemy z komunikacją UART przy użyciu konwertera USB-RS232


    Kwarc oczywiście przyjazny RS'owi 11.0592 Mhz.
    Wszystkie inne elementy działają tylko nie komunikacja UART. RS 232 podłączam do przejściówki Manhattan Konwerter USB na port szeregowy RS232. Na kompie używam Bray Terminal, który ustawiam zgodnie z deklaracjami z programu.

    W Atmege wgrany jest poniższy program (znaleziony na forum, ponieważ moje próby spełzły na niczym):

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


    Wysyłając obojętnie jaki znak z terminalu układ nie daje jakiejkolwiek odpowiedzi.
    Co jest źle w powyższym schemacie/kodzie?
  • Pomocny post
    #2 12970165
    BlueDraco
    Specjalista - Mikrokontrolery
    Linia RXD mikrokontroelra służy do odbioru, a TXD - do nadawania - Ty podłączyłeś odwrotnie.

    Nie kładź symboli układów scalonych na schematach, bo ciężko się czyta w pionie nazwy sygnałów.
  • Pomocny post
    #3 12970266
    dondu
    Moderator na urlopie...
    1. Nie stosuj niestandardowego połączenia pinów w gnieździe programowania, bo gdy podłączysz programator zgodny z ISP z włączonym zasilaniem układu programowanego, to będzie buuuuuum: http://mikrokontrolery.blogspot.com/2011/04/isp-co-to-takiego.html

    2. Coś pomieszałeś ten układ resetu. Rezystor 330 przy kondensatorze ma ograniczać prąd jego rozładowania w czasie przyciśnięcia przycisku. Podłącz kondensator do masy a nie do rezystora.

    3. Do ustawiania rejestrów RSa, sugeruję używać nagłówka setbaud.h w sposób pokazany w funkcji usart_inicjuj():
    http://mikrokontrolery.blogspot.com/2011/03/rs-232-atmega8-komputer-terminal.html
    masz wtedy pewność, że ustawiony zostanie zawsze prawidłowy tryb, a jeżeli przekroczy akceptowalny poziom błędu otrzymasz ostrzeżenie w czasie kompilacji.

    4. Nie definiuj F_CPU w kodzie z tych powodów: http://mikrokontrolery.blogspot.com/2011/03/fcpu-gcc-gdzie-definiowac.html

    Przyglądnij się programowi z linku i wykorzystuj przerwania, bo warto :)
  • #4 12970318
    Mig_16
    Poziom 15  
    Zamieniłem RxD z TxD i łącze się z terminalem. Niestety teraz obojętnie co wyśle do uC zwracana mam zawsze wartość C0 w hex czyli liczbę 192.
  • Pomocny post
    #5 12970332
    BlueDraco
    Specjalista - Mikrokontrolery
    No to teraz już tylko masz problem z szybkością transmisji - sprawdź ustawienia bitów konfiguracji, pewnie dzielisz zegar.
  • #6 12971583
    Mig_16
    Poziom 15  
    dondu przeczytałem to co mi poleciłeś, skopiowałem program z tego bloga do swojej Atmegi i obojętnie jaką liczbę wysyłam przez terminal w odpowiedzi otrzymuje: 3F 0D 0A.
  • Pomocny post
    #7 12971610
    BlueDraco
    Specjalista - Mikrokontrolery
    To całkiem nieźle - znak zapytania i CR,LF.
  • #9 12971702
    Mig_16
    Poziom 15  
    Dodałem biblioteki libm oraz libprintf_flt niestety nie wiem jak w AtmelStudio 6.1 dodać opcje linkera.
  • #11 12971751
    Mig_16
    Poziom 15  
    Dziękuje za pomoc i cierpliwość. Program działa. Czy w razie problemów z moim programem mogę się do Ciebie zwrócić na PW?
  • #12 12971764
    dondu
    Moderator na urlopie...
    Pytaj proszę w swoim temacie na przykład w tym. Po pierwsze dlatego, że ja nie zawsze jestem pod ręką, a na forum jest zawsze ktoś dostępny (wielu jest lepszych ode mnie :)). Po drugie w ten sposób zostaje ślad dla potomnych, którzy mogą wykorzystać Twoje zmagania w przyszłości.

    Do artykułu o RS-232 dodam informację o tym problemie, a do tego drugiego screen z AS6.
  • #13 12999253
    Mig_16
    Poziom 15  
    AtMega poprawnie komunikuje się już z kompem przez terminal (komunikacja działa w dwie strony). Niestety, gdy podłączam ją do urządzenia którym ma sterować komunikacja zanika. Wysyłając te same dane z terminalna z PC (zachowując te same ustawienia) na urządzenie komunikacja śmiga. Czy do komunikacji z urządzeniem nie będącym PC muszę podłączyć jakieś dodatkowe sygnały do gniazda RS232? Jaka inna przyczyna może powodować brak komunikacji?
  • #14 12999414
    BlueDraco
    Specjalista - Mikrokontrolery
    Nie wiemy nic o tym urządzeniu - ile ma sygnałów i na jakim złączu. Jeśli ma parę RTS/CTS, to zapewne trzeba mu podać poziom aktywny na sygnał, który od strony komputera wychodzi jako RTS.
  • #15 12999540
    Mig_16
    Poziom 15  
    W terminalu nie uaktywniam RTS i działa. Złącze D9 żeńskie (łącze się poprzez kabel żeńsko-męski). Linia cyfrowa TTL (5V).


    Znalazłem taki sposób podłączenia złącza RS 232 co o tym sądzicie:
    [ATmega16] ATmega16 i RS232: Problemy z komunikacją UART przy użyciu konwertera USB-RS232
REKLAMA