10 porad – jak tworzyć oprogramowanie dla mikrokontrolerów AVR

Wpis w kategorii [ AVR ]

FAQRozpoczęcie przygody z mikrokontrolerami AVR jest dziś stosunkowo proste. Przy takiej liczbie zestawów ewaluacyjnych dostępnych na rynku, w tak szerokim wachlarzu cenowym – każdy wybierze coś dla siebie. Do tego książka, materiały z internetu, trochę pomysłu i… zacięcie.

Dlaczego zacięcie?

Czasami projektując urządzenie, napotykamy problem, którego rozwiązanie wydaje się niemożliwe ;)

Poniżej znajdziesz listę 10 tego typu problemów.

10 porad

1. Zmienna używana w przerwaniu oraz pętli głównej (main) musi być zdefiniowana jako volatile.

Słowo kluczowe volatile informuje kompilator o tym, aby nie optymalizował zmiennej, ponieważ jej zawartość może się zmienić w sposób, którego w danym miejscu nie widać.

Przykładem jest pusta pętla while testująca wartość jakiejś zmiennej. Na pierwszy rzut oka, jej zawartość nigdy się nie zmieni, ponieważ w pętli nie ma żadnych instrukcji modyfikujących.

Tutaj jednak pojawia się specyfika mikrokontrolerów i przerwań. Przecież wartość zmiennej może ulec zmianie w przerwaniu – musimy to zasygnalizować kompilatorowi stosując właśnie słówko volatile.

2. W programach pisanych dla mikrokontrolerów pętla main() nigdy się nie kończy.

Pamiętaj o tym i nie dopuść, aby program po wykonaniu wszystkich zadań opuścił blok main(). Jeśli do tego dojdzie mikrokontroler zachowa się nieprzewidywalnie, wykonując przypadkowe instrukcje znajdujące się w jego pamięci.

Aby temu zapobiedz wystarczy na końcu bloku main dodać nieskończoną pętle for lub while.

3. 99,9% błędów związanych z działaniem UART wynika z niewłaściwego taktowania.

Problem z uruchomieniem UARTu występuje dość często, zwłaszcza u początkujących projektantów. Przeważnie problem leży w niewłaściwym taktowaniu transmisji.

Przede wszystkim sprawdź z jakim zegarem pracuje mikrokontroler. Np. czy nie dołączyłeś zewnętrznego rezonatora i zapomniałeś zmienić to w ustawieniach FUSE bitów. Sprawdź także, czy nie jest uaktywnione dzielenie zegara przez 8.

4. Jeśli używasz avr-gcc unikaj stosowania optymalizacji -o0.

5. Jeśli wydaje Ci się, że PORTC w mikrokontrolerze nie działa, prawdopodobnie musisz wyłączyć JTAG (odpowiednio ustawiając bity FUSE).

6. Mikrokontroler nie reaguje, wydaje się być martwy.

Prawdopodobnie problem wynika z przestawienia FUSE bitów. Np. przełączyłeś źródło zegara taktującego mikrokontroler na zewnętrzny rezonator kwarcowy, a nie dołączyłeś go do układu.

Aby rozwiązać ten problem należy zastosować programator równoległy lub dołączyć do mikrokontrolera zewnętrzne źródło zegara (do końcówki XTAL1) i wtedy go przeprogramować.

7. Mikrokontroler nie jest zablokowany (patrz pkt.6), a wydaje się, że nie startuje.

W nowych układach AVR (tych, które zapewne używasz) raz włączony watchdog jest włączony nawet po resecie. Możliwe więc, że program zaczyna się wykonywać, jednak po krótkim czasie jest resetowany przez watchdog. Sprawia to wrażenie, jakby mikrokontroler nie startował.

Aby rozwiązać ten problem, należy wyłączyć wachdog na początku wykonywanego programu.

8. Odczyt 16-bitowego Timera czasami zwraca błędną wartość.

16-bitowy Timer odczytywany jest w dwóch krokach (odczytywane dane są 8-bitowe). Jeśli pomiędzy odczytem poszczególnych bajtów nastąpi przerwanie, zwrócona wartość będzie błędna.

Rozwiązanie: na czas odczytu z Timera zablokuj przerwania.

9. Dane są błędnie zapisywane do pamięci EEPROM.

Pamięć EEPROM to dość specyficzna część układów AVR.

Przede wszystkim operacje zapisu pamięci EEPROM oaz Flash zakłócają się wzajemnie, więc nie mogą być przeprowadzane jednocześnie.

Aby rozwiązać ten problem, należy przed rozpoczęciem zapisu do EEPROM sprawdzić, czy nie jest wykonywany zapis do pamięci Flash (znacznik SPMEN w rejestrze SPMCSR).

Kolejnym źródłem problemów z pamięcią EEPROM są problemy z zasilaniem. Zbyt niskie napięcie zasilania może doprowadzić do zmiany zawartości przypadkowych komórek.

Aby temu zaradzi należy uaktywnić układ BOD.

10. Korzystając z WinAVR program nie chce się skompilować (pojawia się błąd programu make.exe).

Prawdopodobnie masz zainstalowany Borland C++, lub inne środowisko, które dopisało ścieżkę z własnym programem make.exe i to on się wykonuje przy kompilacji.

Rozwiązanie: w pliku WinAVR.xml (/pn/tools) dodajemy do make.exe ścieżkę gdzie ten plik się znajduje.

Artykuł powstał na podstawie własnych doświadczeń, FAQ avr-libc oraz treści stopki jednego z userów avrfreaks.org.

A Ty jakie masz doświadczenia związane z mikrokontrolerami AVR?

Oceń ten wpis:
1 gwiazdka2 gwiazdki3 gwiazdki4 gwiazdki5 gwiazdek (głosów: 4, średnia ocen: 4,50)
Loading ... Loading ...
Wyświetleń: 4 768
Tagi: [ , , ]

Podobne artykuły

Możesz śledzić komentarze do tego wpisu poprzez kanał RSS 2.0. Możesz także dodać własny komentarz, lub trackback z własnej strony WWW.

1 komentarz do “10 porad – jak tworzyć oprogramowanie dla mikrokontrolerów AVR”

  • tof (26 maja, 2011, 10:03)

    Po zaprogramowaniu mikrokontroler nie startuje. W moim przypadku trzeba odłączyć programator (USBasp). Może jest to związanie z ustawienien fusebitów (watchdog?)

Dodaj komentarz