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

ATtiny13A - Programowy USART - okazjonalne krzaczki przy wysyłaniu liter

Defozo 10 Paź 2015 20:36 1170 7
  • #1 15056717
    Defozo
    Poziom 17  
    Witam, mam problem z programowym USARTem w mikrokontrolerze ATtiny13A.

    Mikrokontroler pracuje na wew. kwarcu 9,6MHz.
    W Atmel Studio mam również zdefiniowany symbol F_CPU=9600000.

    Zamieszczam kod:
    main.c:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    dbg_putchar.h:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    dbg_putchar.c:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Liczby wysyłają się poprawnie, natomiast końcowa literka już nie zawsze.
    Tak wygląda konsola terminala odbiorczego:
    68A69▒69A70▒66A67▒68▒67▒67A67▒69A69▒69A71▒69A69▒70A69▒67▒68▒69▒67▒68A68A71▒

    Gdy nie wysyłam końcowej literki to wszystko jest ok.

    Co może być nie tak?

    Proszę o pomoc,
    Defozo
  • Pomocny post
    #2 15056867
    grko
    Poziom 33  
    Tablica char str[3]; jest za mala (ma tylko 3 elementy) a Ty odwolujesz sie do 4.
  • #3 15056906
    BlueDraco
    Specjalista - Mikrokontrolery
    Jakoś nie bardzo wierzę, że programowy UART bez użycia przerwania timer ama prawo działać - to po pierwsze.

    Po drugie - częstotliwość wewnętrznego zegara ATTiny13 jest na tyle niedokładna, że komunikacja szeregowa nie musi działać

    Kiedyś robiłem coś takiego, i średnio jeden uC na 4 nie transmitował z poprawną szybkością. Mając to zrobione na przerwaniach można synchronizować zegar do danych odbieranych przez UART.

    A tak w praktyce - przy cenie 2 zł za uC, który ma UART, I2C, SPI i 4..8 timerów oraz stabilniejszy zegar, o ATtiny wypadałoby zapomnieć. ;)
  • #4 15056933
    grko
    Poziom 33  
    Niby czemu miałoby to bez przerwania od timera niedzialac ?? W końcu jest to napisane w asemblerze (nie będzie optymalizowane) i podczas wysyłania są wyłączone przerwania.
  • #5 15056956
    Defozo
    Poziom 17  
    GrzegorzKostka napisał:
    Tablica char str[3]; jest za mala (ma tylko 3 elementy) a Ty odwolujesz sie do 4.

    Dzięki! Teraz wszystko działa!

    BlueDraco napisał:
    A tak w praktyce - przy cenie 2 zł za uC, który ma UART, I2C, SPI i 4..8 timerów oraz stabilniejszy zegar, o ATtiny wypadałoby zapomnieć. ;)

    Z ciekawości spytam o jaki mikrokontroler chodzi konkretnie?

    @Edit
    No dobra, za wcześnie napisałem, że wszystko działa, działa dużo lepiej, ale od czasu do czasu krzaczek się wyśle.
  • #6 15056979
    tmf
    VIP Zasłużony dla elektroda
    Defozo napisał:

    BlueDraco napisał:
    A tak w praktyce - przy cenie 2 zł za uC, który ma UART, I2C, SPI i 4..8 timerów oraz stabilniejszy zegar, o ATtiny wypadałoby zapomnieć. ;)

    Z ciekawości spytam o jaki mikrokontroler chodzi konkretnie?


    No jak to o jaki? Nie znasz kolegi BlueDraco?:) Musi to być ARM :)
    Ale gdzie go kupić za 2 zł i w obudowie 8-pinowej to już musi ci kolega BlueDraco odpowiedzieć.

    Dodano po 3 [minuty]:

    Defozo napisał:

    @Edit
    No dobra, za wcześnie napisałem, że wszystko działa, działa dużo lepiej, ale od czasu do czasu krzaczek się wyśle.


    Tak jak kol. BlueDraco napisał - na generatorze RC z ATTiny to raczej stabilnie nie pójdzie. Przejrzyj noty Atmela - pokazują jak zrobić softwarowy UART i jest przykładowy kod. Przy czym przy generatorze RC musiałbyś dołożyć synchronizację do odbieranych impulsów dla kalibracji generatora.
  • #7 15057018
    Defozo
    Poziom 17  
    Powiem Wam, że chyba problem głównie leżał w zasilaniu.
    Przedtem zasilałem układ z jednego portu USB i komunikowałem się z komputerem przez konwerter podłączony do innego portu USB, teraz przełączyłem zasilanie na ten sam port USB, co konwerter i jak dotychczas 0 krzaczków ;)
  • #8 15058245
    BlueDraco
    Specjalista - Mikrokontrolery
    Ostatnio bawię się Freescale KE04Z8 (TSSOP16) i KL03Z8 (QFN16, 3x3 mm). Mają swoje narowy i złośliwości, ale w tej cenie (< 2 zł przy 100 szt.) trudno wybrzydzać. Właśnie uruchomiłem urządzenie na płytce o wymiarach 6.5 x 22 mm. :)

    Jeśli usunięcie pętli masy o długości 1 m zmienia działanie układu, to znaczy, że parametry czasowe "wiszą na kancie". Ja bym na tym nie polegał.
REKLAMA