Witam serdecznie.
Chciałem przerobić swoją kierownicę (180 stopni) na wieloobrotową używając arduino leonardo i enkodera. Na YT znalazłem filmik, który pokazuje krok o kroku jak to zrobić. Jednak przystawiło mi w pewnym momencie.
Poradnik pokazuje, jak Arduino Leonardo przechodzi w tryb Bootloader, po naciśnięciu przycisku reset. Tryb ten trwa ok. 8 sekund i wtedy ma się również zmienić port COM. No niestety u mnie to tak nie działa. Po prostu po naciśnięciu komputer przerywa połączenie z arduino i cisza (urządzenie znika rónież z menedżera urządzeń). Jak puszczę przycisk to płytka łączy się na nowo z PC (w menedżerze urządzeń wskakuje nowa pozycja z takim samym portem COM jak przed resetem).
Czy każda płytka arduino leonardo się tak zachowuje, czy coś z moją jest nie tak?
Czy rozwiązaniem tego problemu może być wgranie bootloadera na nowo za pomocą np. USB ASP?
Płytkę kupiłem na aliexpress, wygląda jak oryginał, produkcja włoska.
Na końcu chciałbyć zaznaczyć, iż korzystałem z wyszukiwarki i nie udało mi się znaleźć wątku z podobnym problemem.
A jesteś pewny że potrzebujesz enkoder ? może jest ruch kierownicy realizowany na potencjometrze po prostu i wystarczy dać wieloorotowy ?
(27-10-2018, 13:19)error105 napisał(a): [ -> ]A jesteś pewny że potrzebujesz enkoder ? może jest ruch kierownicy realizowany na potencjometrze po prostu i wystarczy dać wieloorotowy ?
Do kompletu liczydło lub kalkulator, bo jak dojdzie do10 czy 15 obrotów w jednym kierunku, to kręcenie sie skończy. Nie dość, że pomysł głupi, to nie o to pyta autor wątku.
Leonadro nie ma mostka USB-UART, sam jest mostkiem, do użyty tam uC ma sprzętowe USB. Gdy resetujesz uC,to USB nie działa, tak więc układ zachowuje się tak jak wynika to z budowy uC. W stanie reset, uC nie odpowiada/potwierdza pakietów, choćby SOF, które są wysyłane co 1ms, nawet jak nic się nie dzieje. Brak potwierdzenia chyba 5 SOF i HOST uznaje, że urządzenie USB zostało odłączone. Po ponownym podłączeniu, zostanie więc przeprowadzona enumeracja itp. W Windozie trochę to trwa, nawet 5 sekund (tak twierdzi u$), z praktyki wiem, ze potrafi i ponad 20.
Oczekiwanie 8 sekund nie jest dobrym pomysłem, na jednym sprzęcie zadziała na innym nie. Najlepiej rozwiązać to przez reakcję na GPIO, gdzie np jego zwarcie, powoduje wejście w bootloader (poczytaj o programie FLIP).
Poszperałem trochę w necie i źle robiłem, ale poprawka też nie rozwiązała problemu.
Ponoć trzeba nacisnąć reset (nie trzyma się przycisku) i wtedy w menedżerze powinien wskoczyć na listę portów COM Leonardo bootloader, ale u mnie nie wskakuje. No i pytanie czemu ten bootloader nie wskakuje na listę w menedżerze urządzeń? Czy wgranie na nowo bootloadera np. przez USB ASP naprawi ten problem?
Po pierwsze jak masz USBASP to możesz tak od razu wgrać program. A typowo Leonardo nie wymaga żadnego wciskania resetu, tak jak zwykłe UNO/NANO robi to program w Arduino IDE, klikasz wgraj, on kompiluje, po skończeniu resetuje płytkę i szuka portu do wgrania, jak się nie pojawia to jest fail i tyle. Normalnie oczywiście się pojawia, wgrywa, resetuje się w trybie normalnego portu COM. Jak nie jesteś pewien, czy działa prawidłowo to oczywiście możesz też wgrać bootloader od nowa przez USBASP.
Problem w tym taki, że mam plik .hex, którego Xloader nie może załadować na płytkę. Próbowałem również przez Arduino Builder i też failed.
Jak masz tylko HEX to wgrywanie go przez bootloader do Leonardo czy Micro faktycznie może być upierdliwe. Ja mam np. Micro, które w ogóle nie ma przycisku RST (oczywiście kabelek do masy to rozwiązał). Albo wgraj sobie przez USBASP programem AVR LAB++ , albo zrób sobie programator z wolnego Arduino NANO/UNO i tym samym programem wgraj sobie wybierając AVR ISP. Program jest tu:
https://rctruck.pl/forum/viewtopic.php?f...7&start=80
Wgranie przez bootloader jest możliwe używając z linii poleceń AVRDUDE, ale trochę trzeba się nagimnastykować. Jak masz włączone pełne komunikaty to zauważysz, że jak Arduino zlokalizuje port COM bootloadera (pojawia się po resecie na kilka sekund) to wysyła specjalną linijkę do AVRDUDE i proces wgrywania na ten port. Słyszałem, że porty powyżej COM10 mogą mieć problemy, więc jak wyskoczył mi na 73 to wszedłem szybko w opcje i przełączyłem go na COM3, teraz już tak się zgłasza. Zrobiłem sobie katalog Leonardo na dysku D, skopiowałem tu wszystkie pliki z katalogu AVRDUDE z instalki Arduino. W nim utworzyłem plik start.bat z komendą:
Kod:
avrdude -CD:\Leonardo\avrdude.conf -v -patmega32u4 -cavr109 -PCOM3 -b57600 -D -Uflash:w:"D:\Leonardo\BlinkLeonardo.hex":i
Po 2s od resetu pojawia się port COM3, uruchamiam bat z tą linijką i voila:
Kod:
d:\Leonardo>avrdude -CD:\Leonardo\avrdude.conf -v -patmega32u4 -cavr109 -PCOM3 -
b57600 -D -Uflash:w:"D:\Leonardo\BlinkLeonardo.hex":i
avrdude: Version 6.3-20171130
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch
System wide configuration file is "D:\Leonardo\avrdude.conf"
Using Port : COM3
Using Programmer : avr109
Overriding Baud Rate : 57600
AVR Part : ATmega32U4
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PA0
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page
Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW Max
W ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ---
-- ---------
eeprom 65 20 4 0 no 1024 4 0 9000 90
00 0x00 0x00
flash 65 6 128 0 yes 32768 128 256 4500 45
00 0x00 0x00
lfuse 0 0 0 0 no 1 0 0 9000 90
00 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 9000 90
00 0x00 0x00
efuse 0 0 0 0 no 1 0 0 9000 90
00 0x00 0x00
lock 0 0 0 0 no 1 0 0 9000 90
00 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0
0 0x00 0x00
signature 0 0 0 0 no 3 0 0 0
0 0x00 0x00
Programmer Type : butterfly
Description : Atmel AppNote AVR109 Boot Loader
Connecting to programmer: .
Found programmer: Id = "CATERIN"; type = S
Software Version = 1.0; No Hardware Version given.
Programmer supports auto addr increment.
Programmer supports buffered memory access with buffersize=128 bytes.
Programmer supports the following devices:
Device code: 0x44
avrdude: devcode selected: 0x44
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e9587 (probably m32u4)
avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D8
avrdude: safemode: efuse reads as CB
avrdude: reading input file "D:\Leonardo\BlinkLeonardo.hex"
avrdude: writing flash (32730 bytes):
Writing | ################################################## | 100% 0.54s
avrdude: 32730 bytes of flash written
avrdude: verifying flash memory against D:\Leonardo\BlinkLeonardo.hex:
avrdude: load data flash data from input file D:\Leonardo\BlinkLeonardo.hex:
avrdude: input file D:\Leonardo\BlinkLeonardo.hex contains 32730 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 0.23s
avrdude: verifying ...
avrdude: 32730 bytes of flash verified
avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D8
avrdude: safemode: efuse reads as CB
avrdude: safemode: Fuses OK (E:CB, H:D8, L:FF)
avrdude done. Thank you.
d:\Leonardo>PAUSE
Aby kontynuować, naciśnij dowolny klawisz . . .
sukces!
Możesz sobie sprawdzić zresztą ten port com bez zmieniania. O problemach pisał ktoś z forum linuksa. Skoro Arduino to wgrywa w windows to pewnie jest OK, mnie się nie chciało modyfikować z powrotem.
Na dniach kupię USB asp i będę wgrywał za jego pomocą, bo inaczej się nie da. Jakieś uparte to Arduino mi się trafiło.
Jak to mówią lepiej późno niż wcale, dla potomnych zostawię jak rozwiązałem identyczny problem u siebie. Wystarczyło przestawić w xloaderze baud na 1200 po czym leonardo przeszło w tryb bootloader. Zaprogramowałem softem kierownica po tym zabiegu.