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

Wewnetrzny RC oscylator vs zewnetrzny kwarc (USART)

kasaidolar 02 Sty 2009 22:43 5066 13
REKLAMA
  • #1 5940084
    kasaidolar
    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!
  • REKLAMA
  • #2 5940209
    mirekk36
    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.
  • #3 5940308
    wader_669
    Poziom 28  
    a uzywasz jakies przejsciowki, czy masz max232 i podpinasz do portu com ?
  • #4 5940383
    kasaidolar
    Poziom 19  
    mirekk36 - czy ten bajt to OSCCAL ? :)

    Cytat:
    Oscillator Calibration Register
    – OSCCAL
  • REKLAMA
  • Pomocny post
    #5 5940454
    dawid512
    Poziom 32  
    Tak, dobierz doświadczalnie wartość a transmisja powinna się poprawić.
  • REKLAMA
  • #7 5940756
    kasaidolar
    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.
  • REKLAMA
  • Pomocny post
    #8 5942497
    mirekk36
    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ć:

    '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
  • #9 5944488
    kasaidolar
    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!
  • #10 5946242
    wader_669
    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.
  • #11 5946309
    klops_mops
    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
  • #13 5946622
    mirekk36
    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
  • #14 5946665
    kubus_puchatek
    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
REKLAMA