• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
UNU CH340 - problem z wgraniem bootloadera
#21
Podłączyć ze sobą taśmą można dwa programatory USBASP, na złączu ISP Arduino jest pin reset Arduino, a nie pin do resetowania innego układu. Zworka na programatorze sprawia zapewne, że pin resetujący jest zamieniany   na pin reset i to decyduje, który układ jest programatorem, a który programowanym. W szkicu ArduinoISP definiuje się pin do resetu. Wrzuć fotkę tego UNO.
Co do tego, że działa jako Nano a jako UNO nie, to różnica między tymi bootloaderami jest tylko taka, że oprócz oczywiście faktu, że teraz musisz używać UNO jako NANO, bo tak się przedstawia, to bootloader działa z mniejszą prędkością i zajmuje więcej miejsca we flash (inna grupa go pisała do UNO). 
Zaczynasz od wgrania szkicu z ArduinoISP. Łączysz kabelkami piny MISO, MOSI, SCK, VCC i GND. Z płytki arduino do programowanej dodatkowo łączysz jeszcze pin 10 z RST. Pin 10 będzie resetował, tak jest u mnie domyślnie.
Żeby wgrać bootloader odpalasz AVRLAB++, wybierasz AVRISP, port COM, koniecznie ustaw prędkość 19200. Odczytaj procesor/arduino. Powinno być tak jak w załączniku na zrzutach - odczytane PROMINI i Programator USBASP  z ATMEGA8. Jak odczyt działa dobrze to możesz przejść do kolejnej zakładki, wskazać odpowiedni flash (zwykle jest to atmega8, ale jak masz atmega88 to oczywiście wybierz odpowiedni). Atmega8 i Atmega8A to jest właściwie to samo. Oczywiście najpierw możesz sobie powgrywać coś tam do Arduino, żeby poćwiczyć. Nowy flash USBASP jest przydatny, ale choć na starym działa wolniej, nigdy oprócz komunikatów ostrzegawczych nie miałem z tym żadnych problemów. Na pewno nie ustawia automatycznie prędkości wolniej/szybciej. Dlatego jak już masz jakieś problemy to lepiej go chyba wgrać.
AVRDUDE można odpalić też z linii poleceń. Żeby odczytać procek "avrdude -p m328p -P COM60 -c avrisp -b 19200" 
Oczywiście port COM trzeba podać ten gdzie masz Arduino z tym wsadem ISP.
   
   
Nie zapomnij, że trzeba ustawić zworkę do programowania na USBASP, zworka do zasilania ma pozostać, także muszą być dwie. Chyba, że masz pecha i takiej zworki w ogóle nie ma, czasami trzeba coś polutować.
EDIT2:
No jest mały problem. Ani mkAVR ani AVRLAB (na razie) nie zadziałają z ARDUINO ISP. mkAVR w ogóle nie ma opcji wyboru baud. W AVRLAB jest opcja, ale nie działa prawidłowo w trybie zapisu i odczytu flash. Tylko testowy odczyt działa ok, po przejściu do zakładki flash opcja znika z linii poleceń.  Także pozostaje wgranie z palca. W załączniku paczka. Rozpakuj gdzieś do katalogu. Na początek trzeba edytować oba pliki *.bat i wpisać odpowiedni port COM. W załączniku wsad do atmegi 8, jak masz inny procek to musisz podmienić również plik firmware i jego nazwę. Zrób kilka razy odpalenie __test.bat, odczyta co jest podłączone, jak jest ok to zrób zapis uruchamiając drugi plik startflash.bat.   Tak samo można wgrać cokolwiek do czegokolwiek, wystarczy podmienić procek docelowy i pokazać inny plik hex.
Edit3:
I na to znalazłem sposób, można skompilować szkic ArduinoISP z ustawieniem baud na 115200 (zakomentować i odkomentować odpowiednie linijki) i jak się wydaje, jest to domyślna prędkość dla AVRISP, bo działa w takim ustawieniu zarówno z mkAVR jak i AVRLAB (po odznaczeniu baud lub ustawionym na 115200). Wsad z USBASP oba programy odczytały OK.


Załączone pliki
.zip   USBASP.zip (Rozmiar: 223.45 KB / Pobrań: 2)
 
Odpowiedź
#22
Jesteś wielki!! Zgodnie z Twoimi instrukcjami, plikiem wsadowym, podniosłem firmware bez problemu. Teraz sprawne UNO ma znowu bootloader od uno a nie od nano Smile
Niestety w przypadku dwóch nie działających płytek, za wiele się nie zmieniło Sad
Kod:
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e950f
avrdude: reading input file "C:\Arduino\Arduino\hardware\arduino\avr\bootloaders\optiboot\optiboot_atmega328.hex"
avrdude: writing flash (32768 bytes):

Writing | ################################################## | 100% 10.81s

avrdude: 32768 bytes of flash written
avrdude: verifying flash memory against C:\Arduino\Arduino\hardware\arduino\avr\bootloaders\optiboot\optiboot_atmega328.hex:
avrdude: load data flash data from input file C:\Arduino\Arduino\hardware\arduino\avr\bootloaders\optiboot\optiboot_atmega328.hex:
avrdude: input file C:\Arduino\Arduino\hardware\arduino\avr\bootloaders\optiboot\optiboot_atmega328.hex contains 32768 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 9.53s

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x7e00
        0x11 != 0xff
avrdude: verification error; content mismatch

avrdude done.  Thank you.
 
Odpowiedź
#23
Wgrywasz bootloader z Arduino, a ono coś nie bardzo chciało gadać u Ciebie wcześniej, pewnie i nie pogada teraz. Znajdź sobie tego hexa z bootloaderem, jest przecież napisane gdzie jest powyżej w tym co wypluwa AVRDUDE i zobacz jak pójdzie z AVRDUDE dołączonym do AVRLAB. Tam jest na pewno nowszy/inny. Ten AVRDUDE z Arduino np. w ogóle nie pozwala na wskazanie portu COM linią poleceń. Lub odpowiednio zmodyfikuj plik *bat i wrzuć do tego samego katalogu hexa z bootloaderem, ale AVRLAB pewnie spokojnie obsłuży USBASP, miał tylko problem z nietypową prędkością AVRISP Może masz jakiś kiepski ten programator/UNO, niby działa, wykrywa procek, bo inaczej by nie zaczął wgrywać, ale przy dłuższej pracy sypie błędami, komunikacja nie jest stabilna. Widać że wgrało, tylko weryfikacji nie przechodzi. Arduino przy okazji wgrywania bootloadera od razu ustawia fusebity, także ustaw sobie takie same jak na działającym UNO. Zamiast wgrywać bootloader możesz też wgrać po prostu krótki szkic z miganiem led i zobaczyć czy UNO działa, bootloader do tego nie jest potrzebny - wgraj używając programatora USBASP lub ArduinoAsISP.
 
Odpowiedź
#24
Próbowałem wgrywać AVRLABem oraz zmodyfikowaną wersją Twojego pliku bat, czyli samym AVRDUDE, ale efekt jest zawsze taki sam: Content missmatch

Próbowałem wgrać sketch używając programatora, ale również nie przeszło.

Co ciekawe, gdy do działającego UNO wgrywam bootloader, czy sketch przez programator, to mrugają na nim ledy tx, rx, sygnalizując jakby trwającą komunikację. W tym uszkodzonym nie dzieje się praktycznie nic.. Czasami jak je podłącze to świeci POWER i LED od 13 pinu, a podczas wgrywania flasha, to LED gaśnie, ale to cała jego aktywność
 
Odpowiedź
#25
Trudno, będziesz się bawił lutowaniem to najwyżej próbuj go zdjąć w jednym kawałku, sprawdzisz jak się zachowuje poza płytką. Te które migają pewnie mają bootloader,który zgłasza się po resecie. Logi pokazują, że jest coś nie tak. U mnie wgranie blinka lub bootloadera przez USBASP to jakieś ułamki sekund, u Ciebie 10s. Do sprawnego UNO też Ci tyle wgrywa szkice? Szkic można też zapisać w pliku hex, w menu obok programowania programatorem jest opcja do tego - export, potem jest w katalogu projektu hex. AVRLAB można potem wgrać to do arduino zarówno przez bootloader jak i przez USBASP. AVRLAB pozwala też na wgranie bootloadera. Jak dalej nie masz wersji 2.4 to jest tu: https://rctruck.pl/forum/download/file.php?id=35515 .
 
Odpowiedź
#26
Wgrywałem gotowy HEX z blinkiem, ale też nie weszło, a dioda nie mrugała.

Do normalnego UNO wchodzi bardzo szybko. Więc zostaje wymiana procka na ten?:
http://allegro.pl/atmega88-atmega88pa-au...18587.html
 
Odpowiedź
#27
Tak, jest OK, oczywiście kup dwa, licho nie śpi. A jak Ci się nie spieszy to tutaj jest pakiet za 3$: https://www.aliexpress.com/item/ATMEGA88...4c4dVpGo73
 
Odpowiedź
#28
Przyszła paczka z chin, więc wylutowałem stary procesor, wlutowałem nowy i teraz jak podpinam usbasp, avrdude daje mi taki komunikat :
Kod:
"avrdude: no programmer has been specified on the command line or the config file
        Specify a programmer using the -c option and try again"
 wywołuje go poleceniem 
Kod:
avrdude -p -c usbasp -P usb -u

mkAVR widzi że procesor zmienił się na ATmega88p, ale fuse bitów już nie czyta

//EDIT

Postanowiłem wykorzystać to co od Ciebie dostałem wcześniej, modyfikując bat pod korzystanie z usbasp. W ten sposób, teoretycznie wgrałem bootloader znaleziony w necie, dla atmega88p. Napisałem teoretycznie, bo tylko po jego wgraniu, płytka zachowuje się inaczej. Gdy podłączę ją pod USB, system widzi ją jako CH340, LED na płytce mrugnie 7 razy i tyle. Każdy inny bootloader, na stałe zapala diodę LED.
 
Odpowiedź
#29
No jak nie czyta fuse bitów to coś jest nie tak, zobacz też AVR LAB. Przestawiłeś go na zewnętrzny kwarc >8Mhz? Fabrycznie przylatują ustawione na 1MHz.
Z Arduino to niekoniecznie będzie działać przez USBASP bo po pierwsze musisz zacząć od tego, że to nie jest już UNO. Musisz sobie dodać definicje płytek z Optiboot gdzie jest płytka z Atmegą88, wgrać bootloader przez Arduino co powoduje odpowiednie ustawienie fusebitów. Ale pierwszy ruch to zawsze odpalenie MK i ustawienie zewnętrznego taktowania 16Mhz. Jak już masz dograną definicję płytki to można też z Arduino wybrać Optiboot 88, ustaw jako programator USBASP SLOW i wgraj bootloader, przestaw USBASP na normalny, bo znowu ten nie działa z taktowaniem szybkim.
Jak sobie wgrasz tylko bootloader "na dziko" jak jakiś program bez ustawiania fuse to nie użyjesz płytki ani w Arduino ani bootloader działał nie będzie, bo procka trzeba ustawić by z niego startował.
 
Odpowiedź
#30
Tak to wygląda w AVRLAB. Jak widzisz udało mi się ustawić fuse bity na >8 MHz

[Obrazek: 72Zz5G5V_t.png] [Obrazek: zOLEJRvH_t.png]

Dodałem sobie bibliotekę Optiboot, ale jedyna opcja w Arduino IDE która moim zdaniem pasuje to :
Kod:
Optiboot on 28-pins cpus, 16 MHz, ATmega88

Niestety nie pozwala mi to mimo wszystko wgrać ani bootloadera, ani szkicu przez USBasp
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości