Elektroda.pl
Elektroda.pl
X
PCBway
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ATMega32 / UART - - brak danych po stronie terminala

19 Cze 2013 14:57 2124 4
  • Poziom 12  
    Witam serdecznie wszystkich
    Mój problem polega na próbie połączenia uC AVR (Atmega 32) poprzez przejściówkę USB-USART (FF232RL) z laptopem. Wszystko zaczęło się od tego, że sprawiłem sobie przejściówkę zakupioną na znanym portalu aukcyjnym (użytkownika póki, co nie będę wymieniał). Przy próbie poszukiwania odpowiedzi, dlaczego tak prosty układ nie działa poprawie trafiłem na tą stronę Link – jak się okazało jest to identyczny layout płytki, którą ja zakupiłem, różni się jedynie kolorem soldermaski. Przejściówka po podłączeniu do laptopa jest wykrywana i poprawie instalowana (Win7 x86), o czym jak mi się wydaje świadczą poniższe screeny:
    ATMega32 / UART - - brak danych po stronie terminalaATMega32 / UART - - brak danych po stronie terminala
    Podczas testów przejściówki używałem dwóch programów, na każdym ten sam mizerny efekt:
    1. Putty
    2. Terminal v1.9
    Oba z nich ustawione jak na screenach, w Terminalu widać, że wykryto przejściówkę, ten port COM3 nie wiem, z czego się bierze, w menadżerze urządzeń Windowsa go nie widać.
    ATMega32 / UART - - brak danych po stronie terminala ATMega32 / UART - - brak danych po stronie terminala
    Po podłączeniu przejściówki do USB lekko świeci dioda TX (czerwona), – co mnie nieco nie pokoi, czy nie powinna bezwzględnie być wygaszona? Przy wpisywaniu czegokolwiek do wysłania w terminalu wyraźnie rozbłyska na czerwono. Po założeniu zwory łączącej linie Rx i Tx obie diody zielona i czerwona świecą. Z czego ta zielona (Rx) jakby nieco słabiej, ale to raczej mało istotne.
    ATMega32 / UART - - brak danych po stronie terminala ATMega32 / UART - - brak danych po stronie terminala
    Problem polega na tym, że w terminalu nie pojawia się żadna informacja odebrana. A przecież to, co wysłałem w polu Transmit powinno wyświetlać się w polu Receive, prawda? Spróbowałem jeszcze, chociaż już bez większego przekonania wysyłać i odbierać dane przez UART przy wykorzystaniu procesora. Linie Rx i Tx w obu urządzeniach scrossowane, dodatkowo oczywiście wspólna masa. Wzorując się na kodzie Pana M.Kardasia z niebieskiej książki zaprogramowałem procesor kodem, który miał wysyłać 3 znaki, zmieniać stan diody zielonej, co 0.5s oraz w razie odebrania znaku „a” z UART zmienić stan diody czerwonej. Funkcja USART_Receive nie jest obecnie stosowana.
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Układ faktycznie po odebraniu znaku „a” zmienia stan diody, lecz w terminalu nadal cisza, nic nie jest odbierane.

    Podsumowując:
    1.ATMega na zewnętrznym kwarcu 16MHz, niestety nie posiadam przyjaznego dla RS’a, fuse bity ustawione poprawnie (hfuse=C9, lfuse=FF), prosty „debugger” w postaci migającej diody zachowuje OK, całość programowana przez USBASP i ECLIPSE
    2.Kabel możliwie krótki, zwykły około 30cm USB
    3.Terminal dodany do wyjątków firewall’a
    4.Zarówno przejściówka jak i zasilanie uC pochodzi z jednego laptopa, z dwóch portów USB. Masa obu urządzeń zamyka się, więc przez laptopa, próbowałem z dodatkowymi połączonymi liniami GND - przejściówki i uC za pomocą zewnętrznych połączeń, ale nie dawało to żadnych efektów.
    5.Ostatni i najbardziej niepokojący fakt to, że po podłączeniu linii Rx i Tx - uC i przejściówki procesor robi się wyczuwalnie ciepły. Wzrasta pobór prądu o 90mA, więc mega dużo. Jeżeli pozostawię tylko linię wysyłającą z laptopa do uC takiego efektu nie ma.
    6.Walczę już z tym układem od tygodnia i jedyne, co mi się nasuwa na myśl to to, że przej-ściówka była od początku uszkodzona, ale zanim zacznę ją reklamować wolałbym żeby inni bardziej doświadczeni koledzy wypowiedzieli się na ten temat.

    Z góry dziękuje za wszystkie odpowiedzi
  • PCBway
  • Poziom 29  
    Jeżeli po zwarciu Rx z Tx na płytce z FTDI i wysłaniu czegokolwiek przez terminal nie dostajesz nic z powrotem to oznacza, że adapter jest uszkodzony.

    Jakim napięciem zasilasz Atmegę?
  • PCBway
  • Poziom 12  
    ATMega pracuje na 5V z USB, przejściówka również. Przed chwilą sprawdziłem multimetrem do czego podpięta jest linia VCCIO definiująca poziom napięć komunikacji. Nie doczytałem że fabrycznie jest ona za pomocą zworki z cyny połączona z 3V3, przez co komunikacja mogła się gryźć. Niestety u mnie było jeszcze gorzej - tej zworki wogóle nie było :D Przy próbie VCCIO -> VCC(5V) cisza, brak połączenia, przy próbie VCCIO -> 3.3V (3V3OUT) cisza, brak połączenia. Połączyłem więc przewodem lnie VCCIO i VCC(5V) i dioda czerwona TX zgasła całkowicie. Transmicja Terminal -> uC nadal działa poprawnie, w drugą stronę wciąż cisza, próba zwarcia Tx i Rx zworą = cisza. Czyli najprawdopodobniej przejściówka padła zanim zaczęła jeszcze swój żywot. Jakieś inne propozycje ?

  • Poziom 30  
    Diody w przejściówce po podłączeniu do komputera powinny się na chwilę zapalić (ew. pomrugać bardzo szybko) i od razu zgasnąć. Jeśli dioda się żarzy to może być uwalony FT232. Ściągnij program FT_prog i spróbuj wyczyścić pamięć temu scalakowi, może pomoże, choć wątpię
    http://www.ftdichip.com/Support/Utilities.htm

    Jeszcze mała wskazówka odnośnie pisania kodu. Zamiast czegoś takiego
    Kod: c
    Zaloguj się, aby zobaczyć kod

    ...czy nie czytelniej tak:?
    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Poziom 12  
    Witam

    Diody w przejściówce zaraz po podłączeniu zachowują się dokładnie tak jak piszesz - czyli migają bardzo szybko, zarówno Rx i Tx, a po chwili przestają. Problem z ciągle lekko świecącą diodą Tx rozwiązałem poprzez połączenie pinu VCCIO z VCC(+5V), zewnętrznym przewodem. Według sprzedającego pin VCCIO powinien być połączony za pomocą zwory z cyny do potencjału 3V3, u mnie jednak jakoś niefortunnie wisiał on w powietrzu. Pomimo tego niedopatrzenia z mojej strony transmisja jednokierunkowa wciąż działała. Spróbuje jeszcze za pomocą programu wyczyścić FT232, jednak to dopiero w niedziele bo teraz jestem na wyjeździe i nie mam go przy sobie. Dzięki za wskazówkę co do zapisu w C, będę o tym pamiętał ;)