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

Jak poprawnie odmierzać czas w transmisji RS232?

jeff__ 04 Sie 2014 10:34 1536 2
  • #1 04 Sie 2014 10:34
    jeff__
    Poziom 17  

    Witam ostatnimi czasy mając do dyspozycji mikrokontroler attiny26. Postanowiłem napisać prosty program umożliwiający przesyłanie znaków z komputera do uC i prezentacje na wyświetlaczu alfanumerycznym LED. Attiny26 nie posiada jednak portu szeregowego RS232 więc chciałem spróbować swoich sił i napisać obsługę programową. Generalnie odbiór danych realizuje z wykorzystaniem TIMERA0 uC. Parametry transmisji w PC ustawiłem na najwolniejsze z możliwych 110bps 8 bitów danych i 1 bit stopu. Z moich kalkulacji wynikło, że przy takich parametrach, czas trwania jednego bitu wynosi 9ms. Zgodnie z tym obliczyłem, że przy kwarcu 7,3728 MHz i z preskalerem 1024 po 64 inkrementacjach licznika uzyskam opóźnienie 9ms. Wykrycie bitu startu realizuje w pętli głównej programu która odpala licznik z wartością 224 tak aby po 32 inkrementach (4,5ms - próbkowanie stanu start w połowie bitu) sprawdzać wartość. Przy odbiorze kolejnych bitów ustawiam za każdym razem wartość licznika na 192 aby co 9ms sprawdzać stany poszczególnych bitów. Efekt jest taki, że co któreś naciśnięcie klawisza na PC powoduje odebranie poprawnego kodu znaku, jednak za każdym razem gdy sprawdzam bit startu uzyskuje stan interpretowany jako fałszywy start. Czy moja idea odbioru danych jest ogólnie poprawna? Czy poprawnie odmierzam czas? Kod zamieszczę jak będę w domu.

    pozdrawiam

    0 2
  • Arrow Multisolution Day
  • Arrow Multisolution Day
  • #3 07 Sie 2014 21:22
    jeff__
    Poziom 17  

    Poradziłem sobie z programową obsługą. Mimo to dzięki za informacje o USI teraz pobawię się z tym modułem.

    0