Jest to uzupelnienie artykułów z cyklu "Zrób sobie Arduino".
Ostatnio miałem pomysł na mały projekt z użyciem ADC, zacząłem od prototypu na breadboardz'ie. Założyłem że bootloader załaduję z użyciem USBASP i programu AVRDude, a potem będę używał interfejsu FTDI do ładowania programów z poziomu Arduino IDE. Jako bootloader chciałem wykorzystać Optiboot zawarty w projekcie MiniCore.
Schemat
Poniżej naprędce narysowany schemat:
Link do pobrania schematu w formacie Autodesk Eagle. Jak widać prócz przycisku reset mamy diodę LED (LED1), złącze do programowania KANDA przez programator oraz piny JP1 do programowania za pomocą bootloadera.
Sterowniki
Mój system to Windows 10, użyłem Zadig do zainstalowania sterownika libusb-win32 po podłączeniu programatora. Warto sprawdzić w managerze urządzeń czy wszystko jest OK (Windows-R uruchom: devmgmt.msc).
Problem
Niestety miałem spore problemy z programowaniem mikrokontrolera z pomocą chińskich programatorów USBASP:avrdude: warning: cannot set sck period. please check for usbasp firmware update. avrdude: error: program enable: target doesn't answer. 1 avrdude: initialization failed, rc=-1 avrdude: AVR device initialized and ready to accept instructions avrdude: Device signature = 0x000000Nic nie pomagało, użyłem także zewnętrznego zasilania (układ prototypowy nie był zasilany z programatora).
Firmware
Rozwiązaniem było flashowanie firmware programatora USBASP opisane na tej stronie . Uwaga: rozwiązanie wymaga drugiego programatora! Zainstalowalem też najnowsze AVRDude (6.3) w lokalizacji C:\Apps\avrdude\avrdude-6.3
c:\apps\avrdude\avrdude-6.3\avrdude.exe -v -patmega328p -cusbasp -Pusb -e \ -Uhfuse:w:0xda:m -Ulfuse:w:0xe2:m \ -Uefuse:w:0x05:m -B 10
Bootloader
Czas na bootloader (pamiętaj o zainstalowaniu w Arduino MiniCore zgodnie z instrukcją na stronie projektu). Bootloaderów jest wiele, trzeba użyć odpowiedniego, w moim przypadku był to bootloader dla Atmegi 328p taktowanym częstotliwością 8000000 Hz i programowany przez UART0 (standard) z szybkością 38400 bodów:
Udało się, o czym świadczyła migająca dioda na płytce stykowej.cd C:\Users\xxx\AppData\Local\Arduino15\packages\MiniCore\hardware\avr\2.0.4\bootloaders\optiboot_flash\bootloaders\atmega328p\8000000L c:\apps\avrdude\avrdude-6.3\avrdude.exe -CC:\Apps\avrdude\avrdude-6.3\avrdude.conf \ -v -p m328p -c usbasp -P usb -v \ -Uflash:w:optiboot_flash_atmega328p_UART0_38400_8000000L_B5.hex:i
Projekt
Następnie podpiąłem interfejs FTDI, pamiętając o rezystorze 10K podciągającym RESET do VCC. Zastosowałem także rezystory 100K podciągające RX i TX do VCC.
cd TwojProjekt c:\apps\avrdude\avrdude-6.3\avrdude.exe -CC:\Apps\avrdude\avrdude-6.3\avrdude.conf \ -v -p m328p -carduino -PCOM4 -b 38400 -D \ -Uflash:w:Blink.ino_atmega328p_8000000L.hex:i
Udało się. Kolejne flashowania możliwe już były z poziomu Arduino IDE. Należy tylko pamiętać przy korzystaniu z MiniCore o wybraniu odpowiednich parametrów w menu Narzędzia (Tools) jak procesor, płytka, programator, itd.
Warto włączyć pokazywanie szczegółowych informacji podczas wgrywania w opcjach Arduino IDE:
Brak komentarzy:
Prześlij komentarz