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.

ATmega i konwerter uart/usb

kiler_oka 18 Sty 2007 02:04 1451 3
  • #1 18 Sty 2007 02:04
    kiler_oka
    Poziom 9  

    Witam. Potrzebuję pomocy! Może ktoś spotkał się z takim problemem i wie jak sobie z nim poradzić?
    Otóż zachciało mi się połączyć atmega8 z moim PCtem który nie posiada portu COM. Więc postanowiłem zkomunikować się z nim poprzez gotowy konwerter uart/usb (FT232BM). Zainstalowałem sterowniki wirtualnego portu COM (pojawiło się nowe urządzenie: USB Serial Port - COM3). Połączyłem atmegę z konwerterem (Rx atmegi z Tx konwertera i na odwrót Tx atmegi z Rx konwertera), załadowałem prosty programik w bascomie:

    $regfile = "m8def.dat"
    $crystal = 16000000 ' 16MHz
    $baud = 9600
    Do
    Print " DLACZEGO TO NIE DZIALA "
    Waitms 100
    Loop
    End

    w terminalu ustawiłem identyczne parametry transmisji na COM3:9600,N,8,1.
    No i co? Zamiast tego durnego napisu w terminalu wyświetlają się krzaczki (w odstępie 100ms tak jak zaprogramowalem atmega) i nic więcej. Ustawiałem wszystkie możliwe prędkości transmisji, dalej nic! Połączyłem konwerter z innym układem z inną atmegą taktowaną 8MHz i dalej nic. Albo wyświetlane są krzaczki albo czysty ekran terminala. Może ktoś miał podobny problem? Może sterowniki konwertera są źle zainstalowane. Proszę o pomoc!!!

    Dodano po 30 [minuty]:

    Hmmm... przez przypadek w terminalu ustawiłem prędkość transmisji na 1200 a w atmedze 9600 i o dziwo działa!!! Czy ktoś mi może wyjaśnić ten paradoks????

    Dodano po 1 [minuty]:

    Nie jest to błąd bascoma gdyż w windowsowym HyperTerminalu występuje to samo zjawisko.
    Spostrzegłem też taką prawidłowość: w układzie taktowanym kwarcem 8MHz do poprawnej komunikacji muszę ustawić 9600 w atmedze i 1200 w terminalu - lub inne prędkości których stosunek wynosi 8 ( 9600 / 1200 = 8 ). W układzie taktowanym 16MHz do poprawnej komunikacji stosunek prędkości musi wynosić 16 (np. 19200 / 1200 = 16 ). Dziwne.

    0 3
  • Pomocny post
    #2 18 Sty 2007 08:38
    mirekk36
    Poziom 42  

    Witam,

    to jednak nie wygląda dziwnie ... bo najprawdopodobniej pomimo to, że użyłeś zwenętrznego kwarca do procka to nie przestawiłeś fusebitów tak aby to on taktował procka. W związku z tym procek taktowany jest chyba tak jak fabrycznie ustawione są fusebity - czyli za pomocą oscylatora wewnętrznego o częstotliwości 1MHz. I dlatego masz ten jak piszesz niby paradoks ;) .... Bascom ustawia odpowiednio rejestry UBRR H i L ale nie wie o tym, że inna częstotliwość go taktuje.... Wskazuje na to bardzo wyraźnie ten stosunek który opisałeś - zauważ zbieżność: przy 8MHz wynosi 8 czyli? - 8/8 = 1MHz , dla kwarca 16MHz wynosi 16 jak napisałeś czyli 16/16 też = 1MHz

    ... zrób więc tylko porządek z fusebitami CKSEL0..3 a wszystkie problemy, które opisałeś znikną jak ręką odjął lub jak zły sen ;)
    pozdrawiam

    0
  • #3 18 Sty 2007 09:01
    kamyczek
    Poziom 34  

    Kolega mirekk36 ma racje dla 100%pewności wylutuj kwarca przy medze , zapewne układ beęzie dalej działał i wysyłał dane na terminal co świadczy o pracy na oscylatorze wewnętrznym RC.

    0
  • #4 18 Sty 2007 11:48
    kiler_oka
    Poziom 9  

    Faktycznie, dzięki za pomoc.
    Pozdrawiam

    0