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

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

mic11 25 Sie 2011 14:08 2868 15
  • #1 25 Sie 2011 14:08
    mic11
    Poziom 10  

    Witam

    Mam taki problem: wrzucam malutki programik do Atmegi 8A:

    Code:

    '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?

    0 15
  • CControls
  • #2 25 Sie 2011 14:10
    nibbit
    Poziom 19  

    A czy czasem nie trzeba zmienić prędkości w terminalu? :)

    EDIT:
    Przepraszam niedopatrzenie moje. Coś nie do końca przytomny chyba dziś jestem.

    0
  • CControls
  • #3 25 Sie 2011 14:18
    mic11
    Poziom 10  

    a czy kolega przeczytał mojego posta do końca?

    0
  • Pomocny post
    #5 25 Sie 2011 15:01
    Fredy
    Poziom 27  

    generator wewnętrzny jest bardzo niestabilny, mocno zależy od temperatury.
    Daj kwarca albo skoryguj wewnętrzny oscylator rejestrem OSCAL.

    0
  • Pomocny post
    #6 25 Sie 2011 15:34
    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 ....

    0
  • #7 25 Sie 2011 15:50
    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?)

    0
  • Pomocny post
    #8 25 Sie 2011 16:25
    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ć.

    0
  • #9 25 Sie 2011 17:55
    mic11
    Poziom 10  

    zrobiłem takie coś:

    Kod: basic4gl
    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.

    0
  • Pomocny post
    #10 25 Sie 2011 18:04
    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.

    0
  • #11 25 Sie 2011 18:23
    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

    0
  • Pomocny post
    #12 25 Sie 2011 18:32
    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.

    0
  • #13 25 Sie 2011 18:53
    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ć?

    0
  • Pomocny post
    #14 25 Sie 2011 18:55
    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.

    0
  • #16 25 Sie 2011 19:23
    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ł)

    0