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

Wewnetrzny RC oscylator vs zewnetrzny kwarc (USART)

02 Sty 2009 22:43 4778 13
  • Poziom 19  
    Witam!
    Mam taki problem: Wysylam string "START" z procka do kompa. Mając ustawiony zewnetrzny kwarc wszystko dziala ok. Ale ustawiając na wewnetrzny oscylator dostaje albo np ST i pozniej krzaki albo w ogole krzaki. Napiszcie mi prosze czy ten wewnetrzny oscylator jest az tak do bani czy gdzies moglem popelnic blad. Nigdy wczesniej mi sie to nie zdazylo :) (przewaznie uzywam zewnetrznego kwarcu). Probowalem z roznymi predkosciami glownie 9600 i 2400. Moim zdaniem gdzies popelniam blad. Aha jak znaki wysylam z odstepem 10 - 20 ms jest ok.
    Pozdrawiam!
  • Poziom 42  
    Wewnętrzny oscylator można pięknie sobie wykalibrować, szczególnie pod kątem właśnie transmisji RS232. Służy to tego jeden bajt, którego wartość można odczytać a potem zmieniać (w górę lub w dół) i sprawdzać jak się zachowuje transmisja RS232. Gdy się złapie jego odpowiednią wartość (taką "po środku") - to można przy starcie programu ją zawsze ładować do tego bajtu i problem mija jak ręką odjął. Np przy prockach ATmega8 jak cokolwiek robiłem to nigdy nie musiałem kalibrować - zawsze UART działał OK, natomiast w przypadku (nie wiem dlaczego ? może na taką partię trafiłem) procków ATmega16, które miałem - to zwykle musiałem kalibrować tym bajtem, żeby było ok.
  • Poziom 28  
    a uzywasz jakies przejsciowki, czy masz max232 i podpinasz do portu com ?
  • Poziom 19  
    mirekk36 - czy ten bajt to OSCCAL ? :)

    Cytat:
    Oscillator Calibration Register
    – OSCCAL
  • Pomocny post
    Poziom 32  
    Tak, dobierz doświadczalnie wartość a transmisja powinna się poprawić.
  • Specjalista - Mikrokontrolery
    w dwoch atmegach 16 ktore przetestowalem transmisja RS-232 z predkoscia 115200 chodzi bez najmniejszych problemow na wewnetrznym oscylatorze (8MHz).

    4\/3!!
  • Poziom 19  
    Wlasnie nigdy nie mialem z tym problemow a tu dzisiaj zonk :) Nie mam teraz plytki przy sobie zeby sprawdzic jak to mozna dobrze wykalibrowac.
  • Pomocny post
    Poziom 42  
    kasaidolar napisał:
    mirekk36 - czy ten bajt to OSCCAL ? :)

    Cytat:
    Oscillator Calibration Register
    – OSCCAL


    tak to dokładnie ten bajt. A jak pisałem mi także większość procków działa sprawwnie nawet bez kalibracji - jednak ponieważ już troszkę "ich przewachlowałem do różnych układów" to dlatego mówię, że zdarzają się takie w których właśnie jest sens używać tegoż bajtu - i bardzo sprawnie i łatwo to wychodzi.

    Np w Bascomie to coś takiego małego - a pozwala ładnie dostroić:

    Code:
    'Ustawianie Bajtu Kalibrującego Aby Poprawnie Działał Rs232 !!!
    
    'Do
    '  Osccal = Osccal + 1
    '  Print "hello mega8 " ; Osccal
    '  Waitms 300
    'Loop


    Jak widzisz w pętli zwiększamy tylko wartość OSCCAL i obserwujemy kiedy będzie prawidłowo widać napis w terminalu. Przy iluś tam wartościach ładnie go widać. Wtedy wybieramy mniej więcej tę środkową i później zawsze przy starcie ją ustawiamy np:

    Osccal = 192

    to wszystko
  • Poziom 19  
    Z tym OSCCAL to strzal w dziesiatke. W petli wyswieltam po usarcie string "OSCCAL = " i wartosc OSCAL. OSCAL na poczatku jest rowne 0 i jade do FF oto czesc tego co dostaje :D :

    Cytat:

    ŹłƒŚ`}@auwŹ“ƒŚ`}@1ux
    źłĂĚ@}@1u9
    ĎÓƒŚ@}@qvp
    Ź“ƒŚ`= 161
    OSƒÁL } 1v2
    OSCAŚ = 163
    OSĂAL = 164
    OSCAL = 165
    OSCAL = 166
    OSCAL = 167
    OSCAL = 168
    OSCAL = 169
    OSCAL = 170
    OSCAL = 171
    OSCAL = 172
    OSCAL = 173
    OSCAL = 174
    OSCAL = 175
    OS¨1=Šş˛
    j5L OŠş7ˇčMCPę1R
    j5Lę 1SR


    Dzieki za pomoc! Pozdrawiam serdecznie!
  • Poziom 28  
    Pierwszy raz zajmuje sie ustawianiem osccal. Pamietam, ze mirekk36 cos wspominales o tym w moich poprzednich postach, ale nie wiedzialem o co chodzi . Dzisiaj testowalem i chyba wartoscia domysla osscal jest 191, mi np. idealnie pasuje 191 dlatego pewnie malo osob ma z tym problemy.
  • Poziom 17  
    A czy do odbioru danych rs232, też należy to wykorzystać? Dokładnie mówiąc, czy w przypadku błędów w odbiorze danych (dwie meg16), może pomóc ten OSCCAL?

    Domyślam się, że tak.

    Pozdrawiam
  • Poziom 38  
    Pewnie, że może, ale o ile obie megi będą z tej samej serii i w podobnej temperaturze mija się to raczej z celem...
  • Poziom 42  
    Dokładnie tak jak napisał Balu, właśnie w tych moich ATmegach16, które musiałem kalibrować do współpracy z PCtem - to okazywało się, że nie trzeba było kalibrować ich jeśli miały działać między sobą. Jednak ja i tak zwykle korzystam w trakcie uruchamiania układów z RS232 do przesyłania komunikatów testowych, debugowania itp, więc zawsze je i tak w końcu kalibrowałem do PC'ta - tak więc później na tych samych ustawieniach OSCCAL działały zarówno z kompem jak i pomiędzy sobą bardzo dobrze.

    wader_6699 -> piszesz, że mało osób ma z tą kalibracją problemy - i tak powinno być. Atemel chyba w miarę dobrze kalibruje procki gdy je produkuje. Jednak czasem mogą się zdarzyć odchyłki jak widać i wtedy dobrze mieć dostęp do tegoż bajtu OSCCAL
  • Poziom 18  
    Napisz protokół który na początek szuka ciągu synchronizującego odbieranego z PC. ciąg ten to niech będzie $AA
    w efekcie twój kontroler może sam się synchronizować do dowolnego urządzenia i na dowolnej prędkości. Na tej podstawie dobierze parametry czasowe dla nadajnika. Nie będziesz zależny od pływającego zegara