piątek, 1 kwietnia 2011

Problemy z zaprogramowaniem mikrokontrolera


Autor: Dondu

Jednym z najczęściej pojawiających się problemów wśród początkujących jest problem z samym zaprogramowaniem mikrokontrolera przygotowanym i skompilowanym programem.

Program jest OK, kompilacja przebiegła prawidłowo, a mikrokontroler nie chce się zaprogramować, złośliwiec jeden! :-)

Zwykle w takich przypadkach, z pośpiechu lub braku wiedzy małe niedopatrzenia są przyczyną frustracji i straconego czasu. Poniżej znajdziesz najczęściej pojawiające się przypadki.

W tym temacie mogą Ci się przydać informacje zawarte w tych artykułach:

Problemy z zaprogramowaniem mikrokontrolera podzielić trzeba na dwa rodzaje:

1. Nie mogę zaprogramować mikrokontrolera:
  1. Źle podłączone zasilanie.
  2. Brak połączenia masy mikrokontrolera i programatora.
  3. Mylenie sygnałów MISO i MOSI w mikrokontrolerach AVR.
  4. PDO i PDI zamiast MISO i MOSI, czyli niespodzianka AVR'ów.
  5. Wyłączenie pinu RESET w fusebit'ach mikrokontrolera AVR.
  6. Wyłączenie programowania szeregowego fusebit'em SPIEN w AVR'ach.
  7. Złe wartości kondensatora i rezystora na pinie RESET, MCLR, itp.
  8. Taśma programatora zbyt długa lub wadliwa.
  9. Nieprawidłowe podłączenie sygnałów programujących. 
  10. Niestandardowe gniazdo ISP.
  11. ISP vs współdzielenie pinów RESET, MISO, MOSI i SCK.
  12. Błędy montażu.
  13. Programator USBasp: Zworka SLOW.
  14. Programator USBasp: Niezaprogramowany programator.
  15. Programator USBasp: Uszkodzony firmware.
  16. Programator USBasp: Nieaktualne sterowniki.
  17. Programator USBasp: Zworka zasilania programowanego układu

2. Zaprogramowałem OK, ale nie staruje.
  1. Niewłaściwe ustawienie fusebit'ów.
  2. Programator przeszkadza w działaniu mikrokontrolera.
  3. Pin RESET bez wymuszonego stanu wysokiego powoduje permanentny stan resetu.





Wszystko sprawdziłem, ale to nie to!
Co robić?

Jeżeli pomimo sprawdzenia wszystkich opisanych przyczyn nadal masz problem, to najpierw napisz do sprzedawcy lub producenta:

impressive22
... napisałem do sklepu w którym kupiłem programator z opisem problemu i skontaktował się ze mną sam producent programatora. Bardzo rzetelnie i profesjonalnie podszedł do sprawy i po wyczerpaniu wszelkich możliwości wysłał mi drugi egzemplarz programatora! Okazało się, że była jakaś wada fabryczna, bo na nowym USBasp wszystko działa pięknie :-)

W tym miejscu dodam także, że nawet tak dużym producentom mikrokontrolerów jak Microchip zdarzają się wpadki z programatorami, o czym przekonałem się osobiście, a przyczyną była wadliwy projekt programatora - tak, tak, nie błędy wykonania, tylko wadliwy projekt :-)

Jeśli nie masz możliwości skontaktowania się ze sprzedawcą lub producentem, to śmigaj na Forum Elektroda,pl - dział: Mikrokontrolery, opisz swój przypadek i proszę powiadom mnie przez PW.

Możesz także napisać komentarz do niniejszego artykułu.

8 komentarzy:

  1. Jak zawsze świetny artykuł, dziękuję autorowi - wiele się z tej strony nauczyłem.
    Mam przy okazji dwa pytania. Zaznaczam, że jestem początkujący. Korzystam z programatora usbASP, ostatnio próbowałem "zasilać" nim układ. Programowanie przebiegło bez zarzutu, jednak peryferia nie działały tak jak powinny. Sprawdziłem napięcie, ku mojemu zaskoczeniu wynosiło ono 3.2V... Sprawdziłem wtyczkę, sprawdziłem przejścia, rozłączyłem peryferia, zostawiłem sam mikroprocesor i nadal to samo... 3.2V. Sprawdziłem dwa komputery, stacjonarny i netbook - nic. Jednak gdy wypiąłem wtyczkę i sprawdziłem na niej napięcie "bezpośrednio" to wynosiło ono 5V. Po kilku godzinach walki spróbowałem podłączyć przez złącze IDC10 zasilacz z innego źródła (ten, który używałem do tej pory obok przez zwykłą wtyczkę DC) i okazało się że układ działa jak powinien, na wyjściu piękne 5V. Czy to możliwe, że usbASP ma tak małą wydajność napięciową że napięcie spada o 40% jeśli nawet pobór prądu jest nikły? (jest on kupny, nie składałem go sam) Czy podłączenie równolegle napięcia z zewnętrznego źródła i z usbASP jest bardzo groźne? Zrobiłem to podczas mojej walki z tym problemem... Póki co nie widzę efektów ubocznych, czy mogę się czegoś spodziewać w przyszłości? Na co zwracać uwagę? Przepraszam, że się tak rozpisałem. Z góry dziękuję za odpowiedź.
    Pozdrawiam
    Keisim

    OdpowiedzUsuń
  2. Wydajność portu USB jest ograniczona specyfikacją płyty głównej. Przyjmując standard 500mA, sam musisz odpowiedzieć na pytanie, czy nie przekroczyłeś tego parametru. Multimetr dałby Ci wiedzę w tym temacie.

    Analizując to co napisałeś trudno mi znaleźć przyczynę takiego stanu rzeczy tym bardziej, że po odłączeniu peryferii problem nie ustępował.

    -----------------------

    Co do drugiego pytania, o równoległe łączenie zasilaczy to wystarczy, że zastanowisz się co się będzie działo, gdy je tak podłączysz, a jeden z nich daje napięcie 4,9V, a drugi 5,1V.

    Przedstawiając to "na chłopski rozum", są to układy elektroniczne, które mają swoje wewnętrzne struktury, w których prądy mają płynąć w określonych kierunkach i natężeniach. Puszczenie ich w drugą stronę, może spowodować uszkodzenia w regulatorach napięcia.

    Przykładem tego jest zabezpieczanie regulatorów napięcia przed zbyt dużymi kondensatorami na ich wyjściu o czym przeczytać możesz tutaj: Zasilanie mikrokontrolera

    OdpowiedzUsuń
  3. Wielkie dzięki za odpowiedź. Zgodnie z tym co napisałem wcześniej wykluczyłem wydajność samego portu USB, ponieważ sprawdziłem dwa komputery a mój układ jest zabezpieczony bezpiecznikiem (20mm) 200mA, więc na pewno pobór prądu jest o wiele mniejszy. Wygląda na to, że z jakichś przyczyn to programator jest wąskim gardłem... Może przez to, że mam ustawione wolne programowanie?

    OdpowiedzUsuń
  4. Tak jak napisałem w poprzednim poście, multimetr dałby Ci wiedzę w temacie wielkości prądu. Bez tego nie możesz twierdzić, że nie jest on przyczyną.

    Bez schematu programatora także nie sposób stwierdzić, czy jest on jak piszesz "wąskim gardłem".

    A może Twój USBasp ma możliwość zmiany zasilającego napięcia wyjściowego na 3V?

    Wolne programowanie nie może mieć wpływu na napięcie zasilania.

    OdpowiedzUsuń
  5. Kiedy kolejne zadanie EEP? Wszyscy czekają z niecierpliwością!!!

    OdpowiedzUsuń
  6. No fakt, trzeba dalej EPP pchać :)
    Niestety ostatnie zadanie przerosło chętnych pod względem czasu mam nadzieję, bo nie sądze żeby chodziło o umiejętności ;-)

    EPP: Klawiatura gdy mało pinów

    Ponowię temat ogłoszeniem, by nie został bez rozwiązania. przygotuję także jakąś własną wersję rozwiązania.

    OdpowiedzUsuń
  7. Wita.

    Do artykułu dorzucę swoje 2 grosze.

    Miałem problem który nie został opisany. Mianowicie mój mikro kontroler był niedociśnięty do płytki stykowej. Jako początkujący obchodziłem się z nim dość delikatnie i nie chcąc ułamać żadnej nogi włożyłem go i lekko docisnąłem, jak się później okazało zbyt lekko.

    OdpowiedzUsuń
  8. Programując AVRdudem często uzyskuję błąd:

    avrdude: error: programm enable: target doesn't answer. 1
    avrdude: initialization failed, rc=-1
    Double check connections and try again, or use -F to override
    this check.


    avrdude done. Thank you.

    Płytka stykowa zawiera ATmegę "na stałe" - mam tam rezonator + 22pF, Reset z 10kOm, filtrowanie AVCC przez LC, ale układ programuje się bardzo rzadko. Początkowo korzystałem z programatora AVRPROG USB v2. Potem go wymieniłem na USBASP. Sytuacja się najpierw poprawiła, a potem znowu to samo. Używam AVR-GCC, AVRdude i własnoręcznych makefileów na Arch Linuksie.

    OdpowiedzUsuń