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

[Bascom]Atmega8A->MAX232N->baud>9600=krzaki na terminalu bascomowym

mic11 25 Sie 2011 14:08 3204 15
REKLAMA
  • #1 9861392
    mic11
    Poziom 10  
    Witam

    Mam taki problem: wrzucam malutki programik do Atmegi 8A:
    
    'Program do wysyłania danych przez rs232
    'Prędkość transmisji 9600 bodów
    
    $regfile = "m8def.dat"
    
    $crystal = 8000000
    
    $baud = 9600
    
    Dim I As Byte
    
    I = 111
    
    Do
    
       Print "Poszczegolne wartosci I:"
       Wait 2
       Print "Wartosc I zapisana DEC:" ; I
       Wait 2
       Print "Wartosc I zapisana HEX:" ; Hex(i)
       Wait 2
       Print "Wartosc I zapisana BIN:" ; Bin(i)
       Print
       Wait 5
    
    Loop
    End
    

    I jeżeli w programie dam baud = 9600 to dane do terminala bascomowego są przesyłane poprawnie. Natomiast jeżeli dam jakąkolwiek prędkość wyższą niż 9600 to na terminalu pojawiają się od razu krzaki.
    Podłączyłem to wszystko tak:
    [Bascom]Atmega8A->MAX232N->baud>9600=krzaki na terminalu bascomowym
    Z tym że u mnie oscylator jest wewnętrzny ustawiony na 8MHz - reszta fusów fabryczna. Dodam że przy każdej zmianie prędkości w kodzie programu zmieniam na taką samą wartość ustawienia w terminalu i ustawienia systemowe portu com1 - czyli: prędkość zadana,8,N,1.
    Cały układ jest spięty na płytce stykowej i zasilany z portu usb
    Zależy mi żeby to chodziło bo chciałem odpalić projekt Dekodera IR kolegi Mirekk36 (lub ten link do strony domowej projektu) który wymaga prędkości com = 38400

    Co robię nie tak - albo gdzie leży błąd?
  • REKLAMA
  • #2 9861398
    nibbit
    Poziom 20  
    A czy czasem nie trzeba zmienić prędkości w terminalu? :)

    EDIT:
    Przepraszam niedopatrzenie moje. Coś nie do końca przytomny chyba dziś jestem.
  • REKLAMA
  • #3 9861416
    mic11
    Poziom 10  
    a czy kolega przeczytał mojego posta do końca?
  • REKLAMA
  • REKLAMA
  • Pomocny post
    #5 9861600
    Fredy
    Poziom 27  
    generator wewnętrzny jest bardzo niestabilny, mocno zależy od temperatury.
    Daj kwarca albo skoryguj wewnętrzny oscylator rejestrem OSCAL.
  • Pomocny post
    #6 9861732
    mirekk36
    Poziom 42  
    mic11 napisał:
    Natomiast jeżeli dam jakąkolwiek prędkość wyższą niż 9600 to na terminalu pojawiają się od razu krzaki.


    No dobrze ale czy jeśli dasz konkretnie 38400 to też masz krzaki ??? Nie powinno ich być, a jeśli procek pracuje w temperaturze pokojowej to temperatura nie będzie miała żadnego znaczenia. Za to może się okazać, że warto podregulować wewn. oscylator bajtem kalibracyjnym OSCCAL ....
  • #7 9861785
    mic11
    Poziom 10  
    Przy 38400(sprawdzone) też są krzaki (jak przy każdej wartości większej niż 9600). Widzę że nie obędzie się bez kalibracji wewnętrznego oscylatora. Tylko mam pytanie czy powinienem najpierw zbadać właściwą wartość przy pomocy takich np programików jak np ten lub ten a potem uzyskany wynik wpisać do rejestru specjalnego OSCCAL? (i tu pytanie jak? jeżeli mam już właściwą wartość i ją zadeklaruję np takim kodem OSCCAL = 140 to czy po wykonaniu tego kodu rejestr ten przyjmie na stałe wartość 140 czy powinienem ją deklarować w każdym następnym programie?)
  • Pomocny post
    #8 9861896
    mirekk36
    Poziom 42  
    tak - takimi programikami można sprawdzić, i wartość należy zawsze wpisać do rejestru przy starcie każdego programu. To jest rejestr w pamięci RAM a nie EEPROM. Nie jest to też Fusebit.

    Dodano po 2 [minuty]:

    ale wiesz co? ja bym na twoim miejscu sprawdził ten procek z kwarcem = 8MHz czy przypadkiem się nie okaże że jednak też nie działają wyższe prędkości. Może się okaże, że jednak jeszcze coś źle robisz po drodze ? Bo zajrzyj sobie w tabelki na ostatniej stronie rozdziału USART procka. Te prędkości przy taktowaniu 8MHz, które mają procent błędów poniżej 2% powinny normalnie działać.
  • #9 9862184
    mic11
    Poziom 10  
    zrobiłem takie coś:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Wartość oryginalna rejestru OSCCAL dla układu rc w procku ustawionego na 8MHz to 163. Przy pomocy powyższego kodu uzyskałem zakres przy którym się nie krzaczy - 158-171. Ale nadal to się nie krzaczy tylko przy prędkości 9600. jak ustawiłem na 38400 i wypróbowałem wszystkie wartości od 158 do 171 to nadal krzaki.

    Nie mam kwarca 8MHz - mam tylko 16MHz i zegarkowe. Sprawdziłem na 16 i to samo. Nie mam już pomysłu.
  • Pomocny post
    #10 9862220
    Fredy
    Poziom 27  
    A sprawdziłeś napięcia na przetwornicy w maxie?
    Zmierz napięcia na Maxie 232 na nogach 2 i 6.
    Na nodze 2 powinno być około 8V a na nodze nr 6 -8V.
  • #11 9862299
    mic11
    Poziom 10  
    Fredy napisał:
    A sprawdziłeś napięcia na przetwornicy w maxie?
    Zmierz napięcia na Maxie 232 na nogach 2 i 6.
    Na nodze 2 powinno być około 8V a na nodze nr 6 -8V.


    noga 2 : +7,44V
    noga 6 : -4,85V
  • Pomocny post
    #12 9862337
    Fredy
    Poziom 27  
    Nie wiem czy to co napisałeś to + czy -.
    Ma być na nodze nr2: +8v a na nodze nr6 ma być: -8V.
    Oczywiście 7V też jest ok.
    Jeśli masz oba napięcia dodatnie to w tym tkwi problem.
    Sprawdź elektrolity przy maxie.
  • #13 9862431
    mic11
    Poziom 10  
    Fredy napisał:
    Nie wiem czy to co napisałeś to + czy -.
    Ma być na nodze nr2: +8v a na nodze nr6 ma być: -8V.
    Oczywiście 7V też jest ok.
    Jeśli masz oba napięcia dodatnie to w tym tkwi problem.
    Sprawdź elektrolity przy maxie.


    wymieniłem na inne (nowe) te elektrolity i jest to samo. wymieniłem też maxa na max 232cpe - ale tu z napięciami jest jeszcze inaczej:
    noga 2 : +4.30V
    noga 6 : -4.90V
    i transmisji w ogóle nie ma

    czy to możliwe że 2 maxy z rzędu kupiłem uszkodzone? kurcze, szczerze powiedziawszy to nie widziałem że te maksy są takie problematyczne, chyba jutro skombinuję przejściówkę usb/rs232 - możecie coś takiego polecić?
  • Pomocny post
    #14 9862437
    Fredy
    Poziom 27  
    spraedziłeś polaryzację ?

    Tam są elektrolity na schemacie na pozór odwrotnie podłączone. Przykłądowo na masie ma być biegun dodatni.
    Sprawdz z DS czy tak masz.
  • #16 9862561
    mic11
    Poziom 10  
    Fredy napisał:
    spraedziłeś polaryzację ?

    Tam są elektrolity na schemacie na pozór odwrotnie podłączone. Przykłądowo na masie ma być biegun dodatni.
    Sprawdz z DS czy tak masz.


    no niezły ze mnie taboret :), rzeczywiście polaryzacja w 2 kondensatorach odwrócona. dzięki za tą uwagę. teraz transmisja idzie spoko do 57600, krzaczy się dopiero przy 115200 (ale z tego trybu to raczej nie będę korzystał)
REKLAMA