• 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
Arduino Leonardo (ATmega 32U4) bootloader mode
#1
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.
 
Odpowiedź
#2
A jesteś pewny że potrzebujesz enkoder ? może jest ruch kierownicy realizowany na potencjometrze po prostu i wystarczy dać wieloorotowy ?Smile
 
Odpowiedź
#3
(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 ?Smile
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).
 
Odpowiedź
#4
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?
 
Odpowiedź
#5
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.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#6
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.
 
Odpowiedź
#7
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.


Załączone pliki
.zip   Leonardo.zip (Rozmiar: 327.33 KB / Pobrań: 3)
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#8
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.
 
Odpowiedź
#9
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.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości