Arduino Polska Forum

Pełna wersja: Zastąpienie Bootloadera właściwym programem
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2
Witam!
Pierwsza moja zabawa z Arduino zaczęła się może z miesiąc temu więc przepraszam jeśli moje pytanie będzie mało profesjonalne lub wręcz nielogiczne.
Szczerze mówiąc bardzo mi się spodobał temat.
Sporo już poczytałem, jednak nie mogę znaleźć rozwiązania w necie.
Chciałbym użyć Arduino pro mini do zaświecenie kilku ledów jednak bootloader 'nieco' mi przeszkadza opóźniając start właściwego programu.
Potrzebuję by Ledy zaświeciły się natychmiast po podaniu zasilania do płytki.
W związku z tym mam pytanie:
Czy można przygotowany szkic w Arduino IDE, wgrać na płytkę na zasadzie jakby zastąpienia bootloadera moim szkicem, tak aby mógł on zadziałać natychmiastowo po podłączeniu zasilania?

Podobno Atmel studio powinien sprawę ogarnąć, jednak moja wiedza z zakresu programowania praktycznie nie istnieje.
Zainstalowałem Atmel studio, dodatek Arduino IDE.
Jednak ten program dla mnie jest jak język Chiński z Mongolskim razem wzięte.

Czy jest jakiś prosty sposób by rozwiązać mój problem?

Pozdrawiam
Tomek.
Wgrywaj program używając programatora ISP po SPI.Bootloader wyłącz przez przestawienie fuses w uC (BOOTRST).

Już na początku przygody z Arduino widzisz jego nieprzemyślaną budowę, to dobrze. Z czasem zobaczysz więcej ułomności tego "Systemu" jeśli więc na poważnie chcesz się zająć AVR to zapoznaj się z AtmelStudio. Jak na poważnie uC to poznaj ARM. Aktualnie Arduino wspiera trochę ARM łącznie z najpopularniejszymi STM32F1 i F4 oczywiście IDE Arduino i jego biblioteki nie pozwolą na rozwinięcie skrzydeł ale nie będziesz narzekał na 2kB RAM co jest istotnym ograniczeniem w najpopularniejszych Arduino UNO/NANO.
(22-12-2018, 11:36)es2 napisał(a): [ -> ]Wgrywaj program używając programatora ISP po SPI.Bootloader wyłącz przez przestawienie fuses w uC (BOOTRST).

Już na początku przygody z Arduino widzisz jego nieprzemyślaną budowę, to dobrze. Z czasem zobaczysz więcej ułomności tego "Systemu" jeśli więc na poważnie chcesz się zająć AVR to zapoznaj się z AtmelStudio. Jak na poważnie uC to poznaj ARM. Aktualnie Arduino wspiera trochę ARM łącznie z najpopularniejszymi STM32F1 i F4 oczywiście IDE Arduino i jego biblioteki nie pozwolą na rozwinięcie skrzydeł ale nie będziesz narzekał na 2kB RAM co jest istotnym ograniczeniem w najpopularniejszych Arduino UNO/NANO.

Dziękuję za odpowiedź.
Zamówiłem na ebay-u programator FTDI232, jednak nie doczytałem warunków dostawy i chyba wysłali go końmi, bo dojechał dopiero przedwczoraj. W międyczasie aby móc cokolwiek zrobić użyłem nano jako programatora.
Spiąłem reset z gnd, a do pro mini kabelkami:
rx - rx
tx - tx
gnd - gnd
+5V - VCC
Działa super pomimo małej niedogodności z koniecznością wciskania resetu w pro mini. FTDI jest chyba wygodniejsze z racji goldpinów umiejscowionych idealnie symetrycznie w stosunku do pro mini.
Wczoraj dopiero natknąłem się na szkic ArduinoISP. Wgrałem go do nano, jednak nie udało mi się jeszcze zaprogramować pro mini tak przygotowanym nano.

Zatem pytanie: Czy to co napisałeś o programatorze ISP pasuje do ArduinoISP ewentualnie tego FTDI, bądź obydwa się nie nadają.

Jeśli chodzi o fuse's próbowałem kierować się tym poradnikiem: https://majsterkowo.pl/forum/tutoriale-f...-t392.html
jednak avrdude, który w końcu udało mi się skądś pobrać (avrdudeGUI-5.8) niechętnie gada z moim FTDI oraz nano jako ArduinoISP. Przy próbie odczytania fusów wywala komunikat: can't open device USB..

I znów leżę... co robię nie tak?
FTDI232 to konwerter USB-UART i z programatorem ma niewiele wspólnego. Trzeba wywołać bootloader, ten przez UART przyjmie dane do zaprogramowania uC. Taki lub podobny (CH340, AvrMega z USB) konwerter znajduje się na płytce UNO, MEGA i podobnych. Równie dobrze można wziąć każdą przejściówkę USB-UART.
Tak więc FTDI232 nie rozwiąże problemu bootloadera, bo musi on być. Potrzebujesz minimum UsbAsp,choć dla mnie to szmelc, bo nie ma debugera. Rolę UsbAsp może pełnić odpowiednio zaprogramowane Arduino. Teoretycznie, można układy FTDI obsługiwać w trybie BitBang, czy jak tam go nazwali (nie pamiętam, czy nie dotyczy on tylko konwerterów USB-magistrala 8-bit) ale wtedy SPI trzeba emulować programowo i komunikacja będzie koszmarnie wolna. Biorąc pod uwagę cenę UsbAsp nie ma co kombinować (chyba, że w celach edukacyjnych) i kupić UsbAsp,bo prędzej czy później się przyda.
Na początek wystarczy, jak na poważnie chcesz pobawić się AVR to zainwestuj min w Dragona, ale jak zobaczysz cenę i stwierdzisz, że za tą kasę możesz mieć 35 programatorów/debugerów do ARM STM32, to pewnie zmienisz uC na "normalne". a nie AVR z wykopalisk.
Zatem, jeśli CH340 da radę, a Arduino nano mam przed nosem, to póki co powinno się udać załatwić sprawę tym co już mam?
Tutaj znalazłem taki tutorial: https://www.youtube.com/watch?v=wldg81WFuCA

Dodatkowo nie wiem jeszcze jak 'ugryźć' te fusy
CH340 nie rozwiąże problemu bootoadera. Nadal program będzie startował z opóźnieniem.
Fuses możesz zmienić programatorem ISP. W przypadku "małych" AVR masz SPI (DebugWire owszem ale najpierw przez SPI trzeba włączyć DebugWire ). W większych AVR jest JTAG, w najnowszych PDI czy jak tam się zwie.

Teoretycznie, odpowiedni bootloader może modyfikować fuses. Z sekcji bootloadera można robic prawie wszystko to co i z programatora. Są pewne ograniczenia, np eeprom można zapisywać tylko po bajcie a nie stronami. Niektóre operacje to bilet w jedna stronę, np wyłączenie bootloadera. Ale nie martw się, Arduinowy bootloader niewiele potrafi, właściwie to nic poza kasowaniem pamięci i ładowaniem program (nawet nie wiem czy potrafi zapisać eeprom, ale chyba nie) no i niepotrzebnym zajmowaniem miejsca w FLASH.

Aby rozwiązać swój problem, musisz użyć ISP via SPI.
Odpowiednim/najtańszym  będzie programator USBASP. Jak chcesz to zrobić w miarę szybko to kupisz na Allegro, w Chinach za 2$. W wersji Arduino 1.8.8 działa OK. Możesz korzystać z Arduino bez bootloadera, wybierasz odpowiedni programator i zamiast wciskać strzałkę wybierasz z menu opcję "wgraj używając programatora". Bootloader można wyłączyć również wgrywając bootloder z wyłączoną opcją bootloadera. Wiem, że to może dziwnie brzmieć, po prostu w Arduino bootloader to nie tylko program do wgrywania flash, przy jego "wypalaniu" ustawiasz również wszystkie fusebity tak by były zgodne z danym typem płytki. Można więc wgrać bootloder by go wyłączyć - po prostu wtedy ustawia tylko fuse. Można to zrobić używając dodatku Minicore, opis jak go dołączyć jest tu: https://github.com/MCUdude/MiniCore. Wtedy wygląda to tak:
[attachment=707]
Każde wgranie przez programator szkicu właściwie kasuje bootloader, fuse trzeba sobie przestawić jednak samemu dla porządku.
Ten programator USBASP nie działa w Atmel Studio, najtańszy do Atmel studio można zrobić na bazie arduino micro lub po prostu kupić AVR ISP MK II. 
USBASP https://allegro.pl/programator-isp-usbas...39887.html do tego przyda się to: https://allegro.pl/kanda-6-pin-10pin-avr...33472.html, można dokupić parę rzeczy by przesyłka darmowa była jak masz wykupiony pakiet SMART (np. polecam właśnie Arduino MICRO).
Kolego Kaczakat - brzmi nieźle! Cieszę się, bo właśnie taki programator zamówiłem. Jak przyjdzie zobaczę co da się zrobić z tym miniCore.

Póki co serdeczne dzięki za podpowiedzi...

Pozdrawiam
Tomek.
Witam serdecznie wszystkich forumowiczów w Nowym Roku!

Od kilku dni jestem już "szczęśliwym" posiadaczem Usbasp, jednak jakby niebardzo chce on ze mną współpracować.
Przy próbie wgrania szkicu ArduinoIDE wyrzuca komunikat:

Szkic używa 930 bajtów (6%) pamięci programu. Maksimum to 14336 bajtów.
Zmienne globalne używają 9 bajtów (0%) pamięci dynamicznej, pozostawiając 1015 bajtów dla zmiennych lokalnych. Maksimum to 1024 bajtów.
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'
avrdude: error: could not find USB device with vid=0x16c0 pid=0x5dc vendor='www.fischl.de' product='USBasp'

Sterowniki podmieniałem kilkakortnie, za każdym razem prawidłowo zainstalowane.

Z racji, że znalazłem kilka wtyków MQS porozcinałem dołączoną taśmę do USBasp i zacisnąłem na poszczególnych kablach owe wtyki (buduję sam wiązki elektryczne do samochodów więc doświadczenie jest Wink )
Posprawdzałem miernikiem drożność, wszystko OK, zwarć brak.

Poszczególne kable z taśmy, zaczynając od 1 z czerwonym paskiem podłączyłem do promini w następujący sposób:

1. MOSI --> pin 11 (promini)
2. VCC --> VCC (promini)
3. ----
4. ----
5. RST --> RST (promini)
6. ----
7. SCK --> pin 13 (promini)
8. ----
9. MISO --> pin 12 (promini)
10. GND --> GND (promini)


Promini mam 11 szt w wersjach 3,3V oraz 5V i na wszystkich ten sam efekt, lecz programator niestety tylko jeden.

Zatem pytanie czy programator uwalony czy gdzieś (mam nadzieję) robię błąd?

Pozdrawiam i wszystkiego dobrego w Nowym ...... Wink
Ściągnij program AVR LAB i zobacz czy działa z USB ASP (jak namieszałeś w sterownikach to musisz mieć prawidłowe),  jak działa, to podmień AVRDUDE i jego config z AVRLAB https://rctruck.pl/forum/download/file.php?id=35515 .
Jest jeszcze opcja wgrania Arduino IDE 1.8.8, ktoś pisał, że USBASP działa tam już prawidłowo. Poczytaj też to: https://forum.arduinopolska.pl/watek-unu...ootloadera , no i jest tu na forum trochę o wgrywaniu sterownika do USBASP (jest programik, gdzie jest do wyboru w trzech trybach: https://zadig.akeo.ie/), bootloadera i jak wgrać nowy firmware do USBASP, z Chin przylatują zwykle ze starym, nie obsługuje dopasowania slowSCK programowo, trzeba przestawiać zworkę.
Stron: 1 2