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.

[m8] [avr-gcc] - Po zmianie taktowania uC, program pracuje nieprawidłowo

wijo 09 Paź 2014 22:41 534 2
  • #1 09 Paź 2014 22:41
    wijo
    Poziom 12  

    Jestem początkującym w C. Napisałem sobie kilka funkcji sterujących wyświetlaczem LCD (1x16). Przy taktowaniu 1Mhz wszystko pracuje znakomicie. Przy innych częstotliwościach mikroprocesora (2, 4 i 8Mhz) wyświetlacz nie pracuje poprawnie, wyświetla niepełne napisy lub przypadkowe znaki.
    Mikrokontroler jest taktowany wewnętrznym generatorem RC. Oczywiście ze zmianą taktowania uC, zmieniam stosownie parametr F_CPU w makefilu, kompiluję wszystko i wgrywam od nowa program do uC.
    Programowałem tym wsadem inny egzemplarz procesora, innym programatorem i w innym środowisku, efekt ten sam. W programie głównym przy pomocy funkcji _delay_ms() wyzwalam co 1s błysk diody, dioda błyska prawidłowo co 1s przy każdej zastosowanej częstotliwości. Poniżej kod programu, może ktoś z Was mi pomoże, bo mi kończą się pomysły.
    Do kompilacji urzywam tolchaina 3.4.4.

    Program główny

    Kod: c
    Zaloguj się, aby zobaczyć kod



    Funkcje obsługi wyświetlacza

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Plik .h

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Makefile

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 2
  • Pomocny post
    #2 10 Paź 2014 12:12
    tmf
    Moderator Mikrokontrolery Projektowanie

    Najpewniej masz błędne opóźnienia. Zauważ, że przy 1 MHz 1 takt to 1us - w efekcie delay_us(1) nie trwa 1 us, lecz co najmniej 3-4 us, a więc znacznie dłużej. Przy 8 MHz, już tak nie jest i 1 us to mniej więcej 1 us. Najpewniej więc gdzieś masz brak wymaganych opóźnień.

    0
  • #3 10 Paź 2014 20:48
    wijo
    Poziom 12  

    Dziękuję tmf. Nie zdawałem sobie z tego sprawy.
    Opóźnienie > 17us przywraca wyświetlacz do życia.

    0