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

[ATmega32][avr-gcc] - Nieprawidłowe taktowanie/filtrowanie?

bakqu 05 Cze 2016 21:20 1077 3
  • #1 05 Cze 2016 21:20
    bakqu
    Poziom 1  

    Cześć,
    proszę o pomoc w diagnozie problemu. Jako zasilanie (5V) i programatora używam usbasp. Za jego pomocą wgrałem wgrałem na fabrycznie nową atmege32a program do migania ledem z częstością 0,5 Hz. Układ działa poprawnie. Następnie dołożyłem kwarc 16 MHz filtrowany 2x 20 pF. Fuse bity high zostawiłem takie same a low zmieniłem na xFF. Tutaj następuje moment konsternacji, bo częstotliwość migania leda spadła ok. trzykrotnie. Szybki powrót do fuse bitów fabrycznych i układ działa poprawnie.

    Przebudowałem układ dodając transmisję szeregową z komputerem poprzez gotowy i działający konwerter USB-TTL. Napisałem program wysyłający w regularnych odstępach czasu 'a'. W porcie szeregowym (poprzez putty) odczytywałem kombinacje 'X', 'a', oraz '▒'. Po przejściu na rezonator 16 MHz (zmieniłem F_CPU) komunikacja w ogóle się urywa.
    Uprzejmie proszę o pomoc.

    Zasilanie filtruję 20 uF. Reset podciągnięty do zasilania przez 5 kOm. Diodę podłączyłem przez 150 Om.
    A co do kodu to przyjąłem:
    UBRR = F_CPU / 16 / BAUD - 1

    0 3
  • #2 29 Mar 2017 14:45
    matej1410
    Poziom 19  

    Info dla potomnych już bardziej.
    Pytanie jaka częstotliwość wewnętrznego oscylatora została ustawiona przez Ciebie przed podłączeniem kwarcu 16MHz?
    Co do konfiguracji UART to zrobiłbym tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    oczywiście wartość 4800 jest przykładowa, <ciach>

    Moderowany przez dondu:

    Od tego jest dokumentacja, w której należy szukać informacji:
    23.3.1. Internal Clock Generation – The Baud Rate Generator
    23.12. Examples of Baud Rate Setting

    0
  • #3 29 Mar 2017 22:13
    Badmaneq
    Poziom 23  

    Nie wiadomo jakie masz F_CPU w programie, może problem leży w niewłaściwym ustawieniu tej wartości.

    0
  • #4 30 Mar 2017 02:13
    dondu
    Moderator Mikrokontrolery Projektowanie

    bakqu napisał:
    Następnie dołożyłem kwarc 16 MHz filtrowany 2x 20 pF. Fuse bity high zostawiłem takie same a low zmieniłem na xFF. Tutaj następuje moment konsternacji, bo częstotliwość migania leda spadła ok. trzykrotnie. Szybki powrót do fuse bitów fabrycznych i układ działa poprawnie.

    Jak masz ustawione fusebity, gdy pracujesz z kwarcem 16MHz?

    BTW:
    Korzystaj z nagłówka setbaud.h z powodu podanego w komentarzu funkcji usart_inicjuj() tutaj:
    http://mikrokontrolery.blogspot.com/2011/03/rs-232-atmega8-komputer-terminal.html

    0