niedziela, 12 marca 2017

Wgrawanie bootloadera do NANO - naprawa watchdoga

Poprawiamy doskonałe


Wracam do wciąż nie rozwiązanego problemu - nie działającego w płytkach Arduino NANO sprzętowego watchdoga. Czemu nie działa? - Opisałem przy okazji bojów przy projekcie BRAMA.
W skrócie - ktoś schrzanił bootloader w płytkach NANO i do dziś nie znalazł się chętny by to naprawić. Skutek jest taki - identyczne sprzętowo płytki UNO i NANO zachowują się zgoła inaczej przy uruchomionym watchdoga.

Jak to sprawdzić?

Wgrywam prosty program z WD do Arduino UNO


Wgrany program działa mniej więcej tak



Program przez 10 sek miga ledem co 1s. Następnie włączany jest watchdog i zmieniana częstość migania na 200ms. Po 8 sek WD resetuje procesor i program zaczyna się od początku.

A tak to wygląda na Arduino NANO


Początek jest ten sam. Po 8 sek od włączenia watchdoga procesor jest resetowany ale program w NANO nie uruchamia się. Procesor wskakuje w nieskończoną pętlę wiecznego resetu (bardzo szybkie miganie leda) i nie przechodzi do programu głównego.

Dla pewności sprawdziłem inną wersję biblioteki programu watchdog.


Efekt jest dokładnie ten sam - UNO działa zgodnie z oczekiwaniem NANO wiesza się  w nieustannym resecie, z którego wyprowadzić go można jedynie odłączeniem od napięcia zasilania.
Jak widać z opisów druga biblioteka Adafruit zajmuje ponad 300 bajtów pamięci więcej niż pierwsza. A uruchomienie WD to zaledwie ustawienie kilku bajtów w rejestrach. I by było zabawniej biblioteka Adafruit korzysta z biblioteki avr/wdt.h! Zaiste programy niektórych bibliotek przypominają barok w architekturze.

Tak czy owak wyrok skazujący na bootloader w Arduino NANO  już zapadł. Do egzekucji wykorzystam programator MKII AVR polskiego producenta - firmy Eltronics.


To dość rozbudowany programator z wieloma funkcjami. Mnie będzie na razie interesować możliwość wgrania nowego bootloadera przez złącze SPI.
Najpierw sterowniki - z instrukcji wynika, iż domyślnym sterownikiem do współpracy z programatorem jest sterownik AVRJumbo. Problem w tym, ze na tym sterowniku pracuje ATMEL Studio ale nie Arduino IDE. Niestety mam już zainstalowany program ATMEL Studio 7.0 więc i sterownik Jumbo został już z pewnością zainstalowany w komputerze.
Sprawdzam - łącząc komputer z programatorem kablem USB - jest. W panelu sterowania pojawia się taki dodatkowy sprzęt a led na programatorze świeci na zielono.


Pozostanę więc na razie przy próbie wgrania bootloadera za pomocą ARTMEL Studio. Jak to zrobić opisano dokładnie tutaj>>>. A więc do dzieła.
I po chwili - koniec dzieła - mój Atmel Studio nie wyświetla innych opcji programatorów poza symulatorem!?
Dla pewności przeładowałem ponownie program - poszło ale program wskazuje błąd sterownika.
Wgrywam oryginalne sterowniki od programatora - program nie widzi programatora.
Kasuję wszystko i Atmel Studio i sterowniki i wgrywam sterowniki libusb mające pasować do Arduino IDE. Uruchamiam Arduino. Wrzuca błąd programowania.
Więc ja wyrzucam programator firmy Eltronics do kosza po godzinnej przegranej walce i zamawiam najprostszy USBasp za 10 zł. Tak kończą marzenia o wysublimowanych narzędziach do tak genialnie prostej rzeczy jaką jest płytka Arduino NANO.

A w między czasie wykorzystam UNO do zaprogramowania nowym bootloaderem NANO. UNO pracuje jako programator a NANO robi za procesor do zaprogramowania. Wszystko jest pięknie opisane w wielu miejscach w internecie - ja skorzystam z polskiego opisu procedury tu>>>> lub tu>>>>.
Łączymy grzecznie UNO z NANO
Wgrywamy do UNO szkic ArduinoISP
W menu wybieramy rodzaj programatora Tools/Programmer/Arduino as ISP
Nic nie zmieniamy w ustawieniach rodzaju płytki z której bootloader ma być w NANO bo ma być bootloader z UNO
Wybieramy Tools/Burn Bootloader i czekamy na komunikat o sukcesie

UNO NANO 6 kabelków i darmowy program programatora. To wszystko czego potrzeba do zaprogramowania nowego botloadera w kolejnych Arduino NANO.  I wszystko za darmochę!
Połączenie i cała procedura wgrywania trwała raptem 10 min. Jak jak lubię to Arduino!!!!



A tak już bezproblemowo pracuje przeflashowane NANO na UNO z programem watchdoga


 I po kłopocie. Trzeba będzie tylko w jakiś stały i trwały sposób oznaczyć te nowe U-NANO by uniknąć problemów przy ich programowaniu w przyszłości.Ale obyśmy mieli tylko takie problemy!!!

A.. i potrzebny będzie jakiś mini statyw dla podniesienia jakości filmików zamieszczanych od dziś na tych stronach. Taadaaamm Studio Filmowe 100xARDUINO-PICTURE uważam za otwarte.

Programator USBASP ver.2.0

Za 10 pln kupiłem takie cudo

Najsampier zainstalować trzeba drivery co niestety nie dzieje się automatycznie. Poradnik tu>>>
System widzi już prostownik więc wracamy do Arduino IDE. Ale wcześniej trzeba kupić lub odszukać w zbiorach własnych przejściówki 10pin/6 pin pasującej do modułów Arduino.


Teraz już możemy połączyć to z płytką NANO do złącza SPI. UWAGA na właściwe wetknięcie wtyczki. Pin nr 1 na przejściówce musi trafić na prostokątny punkt lutowniczy gniazda NANO.
I oczywiście trzeba sprawdzić czy na programatorze jest wybrane napięcie 5V do naszego NANO.

W Arduino IDE wybieram  typ programatora USBASP, ustawiam płytkę UNO i naciskam WYPAL BOOTLOADER. zanim zdążyłem puścić klawisz myszy pokazał się komunikat


I po sprawie. Nawet nie sprawdzam czy wgrało się prawidłowo. Jest tylko jeden minus tego sposobu programowania bootloadera - trzeba wlutować złącze szpilkowe SPI do NANO, które potem nie będzie już potrzebne do niczego więcej. Ale to mały minus więc programator USB ASP trafia na półkę narzędzi.

Idziemy otworzyć szampana i spokojnie oczekujemy na cd.......





8 komentarzy:

  1. Witam,
    próbuję wgrać bootloader do ARDUINO NANO za pomocą USBasp i cos nie idzie :(
    Dostaje komunikaty :
    avrdude: Warning: cannot query manufacturer for device: No such file or directory
    avrdude: Warning: cannot query product for device: No such file or directory
    avrdude: error: could not find USB device with vid=0x16c0 pid=0x5dc vendor='www.fischl.de' product='USBasp'
    Błąd przy wgrywaniu bootloadera.

    I nie wiem co z tym zrobić :(
    Może pomożesz ??

    pozdr\wojtek

    OdpowiedzUsuń
  2. masz drugie NANO UNO lub cokolwiek Arduino
    zrób z tego programator - opis w tekście
    działa na 100%
    u ciebie Arduino nie widzi programatora - czemu - nie wiem. Pewnie jakiś konflikt z driverami kości USB/serial
    tu masz podpowiedź gdzie ewentualnie szukać rozwiązania problemu
    https://www.forbot.pl/forum/topics50/arduino-ide-nie-widzi-programatora-usbasp-vt13586,15.htm?sid=98b63258184360c306510482bd63e05e
    pozdrawiam
    Krzycho

    OdpowiedzUsuń
  3. Witam ponownie,
    Pobralem z netu program extreme burner AVR, z katalogów ARDUINO plik HEX i zrobilem próbe wgrania loadrea. Posypało błędami :((
    Ale okazalo sie, że loader został załadowany. Moduły ruszyły.
    Mam programator AVR2 z KRISTECHu.
    Dziekuje za wskazowki.... ale temat udało sie rozwiązać.

    OdpowiedzUsuń
  4. Fajnie gdybyś to opisał bardziej szczegółowo - może komuś się przyda

    OdpowiedzUsuń
  5. Niestety nie wszystko jest takie piękne.
    Przy takiej zmianie Uno-Nano nie chce działać konstrukcja:
    const PROGMEM int8_t zmienna = 20;
    Nie wiadomo co jeszcze nie działa :(
    Ale do prostych aplikacji przydatne, tylko w przypadku problemów
    należy przede wszystkim sprawdzić kod na oryginale,
    żeby nie tracić niepotrzebnie czasu i nerwów :)

    OdpowiedzUsuń
  6. Dzięki za uwagę. Choć pewnie już nie sprawdzę bo zasadniczo przesiadłem się na ESP8266/32

    OdpowiedzUsuń
  7. Ao invés de você carregar o programa usando o cabo usb do arduino, utilize a entrada ISP do arduino para carregar seu programa, desta forma, o watchdog funcionara perfeitamente.
    siga os passos abaixo:
    1 - obter mais uma placa arduino para você usar como programador. (preferencialmente arduino uno)
    2 - conecte a placa arduino uno no usb do computador.
    3 - na IDE do arduino vá em (arquivos > Exemplos > arduinoISP > ArduinoISP)
    4 - carregue o programa para o arduino que usará como programador (CRTL + U).
    5 - conecte seu arduino nano no arduino programador da seguinte forma:
    .___________________________.________________________________.
    - ISP Arduino nano - Arduino programador -
    - PIN_MOSI - pin 11 -
    - PIN_MISO - pin 12 -
    - PIN_SCK - pin 13 -
    - RESET - pin 10 -
    -___________________________-_______________________________ .
    OBSERVAÇÕES: (nao esqueça de alimentar a placa arduino nano com 5vcc).

    arduino nano isp pinout:
    https://www.circuitstoday.com/wp-content/uploads/2018/02/Arduino-Nano-ICSP.jpg

    6 - com o sketch de exemplo (arduinoISP) aberto vá na aba(ferramentas > programador > Arduino as ISP).
    7 - ainda na aba de ferramentas, vá em (gravar bootloader).
    8 - agora abra o seu sketch que contem o watchdog, vá na aba (Sketch > carregar usando programador) ou use as teclas de atalho (CTRL + SHIFT + U).

    desta forma burlamos o problema. ainda é possivel conctar a placa arduino nano no computador e abrir o monitor serial. faça os passos acima somente para carregar o sketch que contenha o watchdog.

    atenciosamente,

    Álec Eduardo.

    OdpowiedzUsuń