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

[AVR] [C] - "Dynamiczny" baud-rate.

JmL(TM) 15 Cze 2008 10:21 2442 6
REKLAMA
  • #1 5247554
    JmL(TM)
    Poziom 24  
    Witam!

    Podczas pisania programu na uC i implementujac obsluge UART trzeba na stale podac predkosc transmisji, a tymczasem jak to jest np. w telefonach SIEMENS mozna baud-rate ustawiac dowolna byle by byla mniejsza od maksymalnej obslugiwanej przez kom. Tak wiec jesli np. telefon obsluguje predkosc maksymalnie do 57600 bitow na sekunde to jesli ustawimy 19200 czy nawet 9600 to transmisja w dalszym ciagu przebiega prawidlowo. Natomiast przy AVR'ach jesli ustawie inna predkosc niz dedykowana odbieram "smieci". Czy jest jakis sposob na obejscie tego?

    Pozdrawiam!
  • REKLAMA
  • Pomocny post
    #2 5247620
    ZbeeGin
    Poziom 39  
    W sumie jeśli pierwszy bajt wyślesz jako 0b01010101 a program rozpozna, że rozpoczęła się transmisja to dałoby się conajmniej dwukrotnie zmierzyć jaki czas trwa stan wysoki i na podstawie tego można już określić jaką prędkością transmisji nadawca się posługuje.
    Z tym, że trzeba taki bajt synchronizujący wysłać - a nie zawsze będzie to możliwe.

    Można też zmierzyć czas trwania bitu startu, ale dość krótki będzie czas na przeanalizowanie jaka to prędkość transmisji.
    Oczywiście w takim przypadku całą transmisję trzeba by obsługiwać programowo. Zatem przerwanie zewnętrzne z narastającym zboczem na początek, licznik który zliczy czas bitu startu a potem stanie się generatorem podstawy czasu, analiza stanów na porcie w przerwaniach i kompletacja odczytanych bitów w bajt.
  • REKLAMA
  • Pomocny post
    #3 5247722
    Freddie Chopin
    Specjalista - Mikrokontrolery
    niektore procesory maja 'ficzer' od tego automatycznego wykrywania predkosci i zwie sie to autobaud. dziala dokladnie tak jak opisal powyzej ZbeeGin - pierwszym wyslanym znakiem musi byc 0x55 (01010101) lub 0xAA (10101010)

    4\/3!!
  • #4 5247966
    JmL(TM)
    Poziom 24  
    Dziekuje za kompetentne odpowiedzi.

    A czy jakikolwiek uC z rodziny AVR posiada auto-baud? Bo programowo to domyslam sie, ze np. w ATmega16 pewnie ~50% pamieci flash zajmie obslga wiec chyba gra nie warta swieczki :D
  • REKLAMA
  • REKLAMA
  • #6 5248347
    ZbeeGin
    Poziom 39  
    Z tymi 50% to znacznie przesadziłeś. Otwieram bibliotekę MCS.LIB z BASCOM-a a tam procedura _SERIN która jest czysto programowym odbiornikiem. Zajmuje 170 linii w kodzie maszynowym - z dodatkami. Niechby Twoja procedura zajęła 2 razy tyle to ile to procent jest z całych 16kB?

    Tutaj parę rzeczy załatwia ci sprzęt - o ile możesz go użyć - licznik, przerwania. Jak zgłosi się przerwanie z INT0 (narastające zbocze) to znaczy, że bit startu się pojawił. Teraz uruchamiasz licznik, który będzie działał dopóki stan na INT0 będzie wysoki, a przerwania INT0 blokujesz. Jak stan opadnie to masz już czas trwania bitu startu - zapisujesz to co odczytał licznik. Teraz dzielisz tą wartość przez dwa, ładujesz do licznika i uruchamiasz licznik. Jak licznik się przepełni to jesteś prawie dokładnie w połowie pierwszego bitu danych. Odczytujesz stan na porcie danych i wsuwasz go do bajtu bufora odbiorczego. Znów ładujesz licznik, ale od tego momentu już pełnym czasem i znów po jego przepełnieniu jesteś w połowie następnego bitu danych. Znowu odczytujesz stan i wsuwasz do bajtu bifora odbiorczego. I tak w kółko do czasu odebrania wszyskich bitów.
    Potem możesz kontrolować czy dwa bity stopu (stan niski) się pojawiły, lub je "olać" i czekać - włączając znów przerwania INT0, aż nowy bit startu się pojawi.

    Przy szybkim taktowaniu procesora czasy reakcji na przerwania, obsługa licznika, portu, bufora będzie ułamkiem czasu trwania jednego bitu transmisji.
  • #7 5249387
    Fyszo
    Poziom 37  
    A to taki problem sprawdzać wszystkie możliwe prędkości? I działać na najwyższej możliwej. Przy zbyt dużych przekłamaniach zmiejszać o jeden stopień? Dopisanie takiej metody pewnie nie wyjdzie ponad 100% zwyczajnej obsługi.
REKLAMA