Czy zamurowałem moje Arduino Uno? Problemy z przesyłaniem na pokład

86

Nie mogę wgrywać szkiców do mojego Arduino Uno.

  • Czy go „zamurowałem”?
  • Jakie kroki mogę podjąć, aby dowiedzieć się, co jest nie tak?
  • Co mogę zrobić, aby to naprawić?
Nick Gammon
źródło
7
Dla tych, którzy zastanawiają się, to nie jest prawdziwe pytanie! To bardziej pytanie referencyjne. Samo pytanie jest celowo dość szerokie. Odpowiedź jest jednak bardzo szczegółowa i dlatego pytanie to można wykorzystać jako odniesienie.
Paul,
2
To bardziej pytanie referencyjne. Całkiem słusznie. Zobacz Zadawanie pytań i odpowiadanie na nie .
Nick Gammon
@Nick_Gammon Tak. Ale czuję, że powinieneś gdzieś to zauważyć. Na pierwszy rzut oka byłem (lekko) zirytowany faktem, że pytanie było tak szerokie i wydawało się, że nie przeprowadziłeś żadnych badań. Ale kiedy zobaczyłem twoją odpowiedź, wszystko miało sens. Ponadto (gdy możesz) nie należy zapominać o zaakceptowaniu własnej odpowiedzi, aby inni, którzy starają się pomóc, nie zaczynali odpowiadać, analizować ani komentować pytań na ten temat (co tak naprawdę nie pomogłoby Ci, ponieważ Ty już znalazłem dość dobry sposób na debugowanie tego problemu).
Paul
Dzięki za opinie. Początkowo myślałem, że opublikuję pytanie z notatką, że zamierzam opublikować własną odpowiedź, ale potem zobaczyłem pole wyboru „odpowiedz na swoje pytanie”, więc zamiast tego zaznaczyłem. Jeśli chodzi o akceptację, nie wolno mi na 20 godzin. Wydawało mi się trochę dziwne zaakceptowanie własnej odpowiedzi, ale z pewnością mogę to zrobić, kiedy mi na to pozwoli. Zadałem pytanie dotyczące Meta Arduino Czym dokładnie jest pytanie kanoniczne? próbować wypracować prawidłową procedurę, ale nie otrzymałem odpowiedzi.
Nick Gammon
@FuaZe i Nick Gammon: Ogólnie rzecz biorąc, wydaje się to świetne, jedyną sugestią, którą chciałbym zrobić, byłoby uczynienie tematu bardziej sugestywnym na temat tego, o co tak naprawdę chodzi w pytaniu i odpowiedzi. W tej chwili myślę, że mogłem ulec pokusie, by uznać to za zbyt niejasne. Być może tytuł brzmi „Jak rozwiązać problem z nieudanym przesyłaniem?”
dlu

Odpowiedzi:

115

Prawdopodobnie nie jest murowany

Mam całkiem sporo Arduino, a przez ostatnie kilka lat tylko je „zamurowałem”, i myślę, że było to przez zapchanie go elektrycznością statyczną. Niestety ten konkretny miał układ procesora SMD (montowany powierzchniowo), więc nie jest łatwo spróbować zamienić go na inny układ.

Zachowaj spokój i spróbuj wykonać następujące kroki ...


Przykładowa tablica

„Arduino Uno” to nie tylko jedna rzecz, która może zawieść. Ma wiele głównych komponentów i prawdopodobnie tylko jeden z nich uległ awarii (jeśli występuje). Zobacz to zdjęcie referencyjne:

Główne elementy Arduino Uno

Główne elementy to:

  • Procesor Atmega16U2 - obsługuje interfejs do połączenia USB
  • Procesor Atmega328P - jest to „główny” procesor, na którym jest szkic
  • Regulator napięcia - zamienia energię wejściową z gniazda zasilania na 5 V.
  • Dioda LED zasilania (zielona) - oznaczona jako „Wł.”
  • Wskaźnik LED (żółty) oznaczony „L” - podłączony przez wzmacniacz operacyjny do cyfrowego styku 13
  • Diody LED Rx i Tx (żółte) - wskazują, czy układ USB (Atmega16U2) odbiera lub transmituje

Należy pamiętać, że diody LED Rx i Tx nie są podłączone bezpośrednio do cyfrowych styków 0 i 1 na płycie (oznaczone Rx i Tx). Świecą się tylko wtedy, gdy wykonujesz komunikację szeregową przez USB , a nie, jeśli masz coś (np. GPS) podłączonego bezpośrednio do cyfrowych styków 0 i 1.

Zwróć także uwagę, że ponieważ dioda LED „L” jest podłączona przez wzmacniacz operacyjny, może świecić, jeśli pin 13 jest ustawiony na wejście w szkicu. To normalne. Nie oznacza to, że coś błędnie wysyła dane.


Sprawdź moc

Zasilanie USB

  • Podłącz płytkę do komputera kablem USB i sprawdź, czy świeci zielona dioda LED „Wł.”.

  • Użyj multimetru i kilku przewodów połączeniowych do przetestowania między stykiem 5 V a stykiem GND (strzałka u dołu). Powinieneś dostać odczyt około 5,0 V (mam 5,04 V na moim).

(Możesz kupić tani multimetr za około 10 USD, jeśli go nie masz, ale lepiej jest dostać lepszy za około 50 USD - sprawdź wszystkie witryny i sklepy z elektroniką).

  • Przetestuj również między stykiem 3,3 V a stykiem GND - powinieneś dostać 3,3 V.

Jeśli nie otrzymasz napięcia 5 V przy podłączonym kablu USB, upewnij się, że drugi koniec jest podłączony do komputera. Spróbuj także innego kabla.

Gniazdo zasilania

  • Jeśli używasz lub planujesz użyć, gniazdo zasilania (oznaczone na zdjęciu jako „power in”), odłącz USB i podłącz zasilacz - który powinien wynosić od 7 do 12 V DC z dodatnim na środkowym styku.

  • Zmierz styki 5 V i 3,3 V jak powyżej. Nadal powinieneś widzieć na nich te same napięcia.

Jeśli otrzymasz 5 V z podłączonym USB, ale nie z zasilaczem, wówczas regulator napięcia (oznaczony na zdjęciu) prawdopodobnie jest uszkodzony. Lub być może nastąpił awaria zasilania. Wypróbuj inny zasilacz, aby potwierdzić.


Sprawdź włączającą się lampę błyskową LED

Jeśli masz program ładujący Optiboot (zwykle Uno jest w komplecie z nim), to jeśli naciśniesz i zwolnisz przycisk Reset, lub odłączysz i ponownie włączysz kabel USB lub zasilający, dioda LED „L” powinna szybko migać 3 razy. Czasy „włączenia” i „wyłączenia” wynoszą po 50 ms, trzy błyski powinny zakończyć się w ciągu około 1/3 sekundy.

Jeśli nie, możesz mieć problem z bootloaderem lub głównym procesorem (Atmega328P).


Spróbuj przesłać szkic

Ważne: jeśli masz problemy z przesyłaniem szkiców, usuń wszystkie podłączone urządzenia (takie jak osłony). Usuń także przewody łączące podłączone do gniazd płyty. W szczególności nic nie powinno być podłączone do pinów cyfrowych 0 i 1 (Rx i Tx), ponieważ zakłóci to komunikację z komputerem wysyłającym.

Wybierz jeden z prostych przykładowych szkiców (np. Mrugnij) i spróbuj go przesłać. Oto, co powinieneś zobaczyć:

  • Dioda LED „L” powinna migać 3 razy. Wynika to z faktu, że główny układ jest resetowany poleceniem z procesu przesyłania.

  • Dioda LED „Rx” powinna szybko migać. To są instrukcje z procesu przesyłania próbującego aktywować program ładujący.

  • Dioda LED „Tx” powinna szybko migać. Jest to procesor potwierdzający przesłane dane.

Możesz zobaczyć powyższe, nawet jeśli proces przesyłania nie powiedzie się. Może to być spowodowane wyborem niewłaściwego typu płyty.

Jeśli miga tylko dioda LED „Rx”, przyczyną może być problem z modułem ładującym lub głównym procesorem (Atmega328P). Ktoś puka, ale nikogo nie ma w domu!

Sprawdź typ planszy

Jeśli diody LED migają, ale pojawia się taki komunikat:

avrdude: stk500_recv(): programmer is not responding

Sprawdź typ tablicy:

Menu typu tablicy

Jeśli wybierzesz niewłaściwy typ tablicy, prawdopodobnie wyśle ​​ona nieprawidłowe instrukcje przesyłania, a limit czasu lub inaczej się nie powiedzie. Jeśli jesteś podobny do mnie i masz wokół siebie różne tablice, łatwo zapomnieć, że ostatni przesłany przez Ciebie plik dotyczył innego rodzaju planszy.

Sprawdź port komunikacyjny

Jeśli diody LED wcale nie migają, być może wybrano niewłaściwy port komunikacyjny.

Sprawdź port komunikacyjny:

Menu portu komunikacyjnego

Wypróbuj inny komputer PC / Mac, jeśli to możliwe

Wypróbuj Arduino na innym komputerze PC / Mac, jeśli masz go pod ręką. Może to zawęzić zakres, niezależnie od tego, czy masz problem z konkretnym komputerem, do którego go podłączono, czy ogólnie z komputerami.

Wykonaj test sprzężenia zwrotnego

  • Odłącz wszystkie ekrany i inne przewody
  • Wyjmij płytkę z zasilania
  • Podłącz przewód połączeniowy z RESETU do GND (pomarańczowy przewód na zdjęciu)
  • Podłącz przewód połączeniowy z Rx do Tx (biały przewód na zdjęciu)

Okablowanie:

Test sprzężenia zwrotnego

  • Podłącz kabel USB i uruchom program terminalowy - taki jak Terminal Monitor w Arduino IDE. Wpisz coś i wyślij (np. Naciśnij Enter w Monitorze terminali).
  • Wszystko, co napiszesz, powinno zostać powtórzone.

Jeśli wszystko zostanie powtórzone: To potwierdza, że ​​masz właściwy port komunikacyjny, kabel USB jest OK, a układ interfejsu USB (Atmega16U2) prawdopodobnie jest OK.

Jeśli nic nie zostanie powtórzone, sprawdź:

  • Masz poprawny port komunikacyjny.
  • Wypróbuj inny kabel. Niektóre tanie kable USB mają tylko przewody zasilające, a nie przewody danych.
  • Sprawdź, czy sterownik urządzenia Arduino jest zainstalowany. Prawdopodobnie nie musisz tego robić, jeśli ta płyta działała wcześniej na tym komputerze, ale warto to zrobić, jeśli po raz pierwszy podłączyłeś tę płytę do tego komputera.

Przetestuj układ Atmega16U2

Jeśli płyta nie przejdzie testu pętli zwrotnej i jesteś pewien, że kabel USB jest w porządku, możesz przetestować sam układ Atmega16U2. Na płycie znajduje się nagłówek ICSP (In Circuit Serial Programming), sąsiadujący z układem Atmega16U2 i w pobliżu gniazda USB.

Najpierw odłącz zasilanie (odłącz kabel USB i dowolny kabel zasilający).

Następnie możesz podłączyć nagłówek ICSP za pomocą 6 przewodów połączeniowych do znanego dobrego Uno, jak pokazano na zdjęciu:

Przetestuj układ Atmega16U2

Pin-out dla nagłówka ICSP to (od góry):

Nagłówek ICSP

Pin 1 na nagłówku ICSP w pobliżu układu Atmega16U2 jest oznaczony małą białą kropką, w pobliżu „F” w „AREF”. Pin 1 na nagłówku ICSP w pobliżu układu ATmega328P jest oznaczony małą białą kropką, poniżej „N” na „ON”.

Połącz się:

Good board         Target Uno

  MISO                MISO    (pin with dot - pin 1)
  VCC                 VCC
  SCK                 SCK
  MOSI                MOSI
  D10                 /RESET
  GND                 GND

Sprawdź dokładnie swoje okablowanie.

Następnie na płycie „znanej dobrej” zainstaluj szkic „Atmega_Board_Detector” zgodnie z opisem na stronie programisty bootloadera Atmega . Kod znajduje się na GitHub - nickgammon / arduino_sketches . Jeśli klikniesz przycisk Pobierz na tej stronie, otrzymasz szereg przydatnych szkiców. Ten, który chcesz, nazywa się „Atmega_Board_Detector”.

Po zainstalowaniu otwórz monitor szeregowy, ustaw go na 115200 bodów i powinieneś zobaczyć coś takiego:

Atmega chip detector.
Written by Nick Gammon.
Version 1.17
Compiled on Jul  9 2015 at 08:36:24 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x94 0x89
Processor = ATmega16U2
Flash memory size = 16384 bytes.
LFuse = 0xEF
HFuse = 0xD9
EFuse = 0xF4
Lock byte = 0xCF
Clock calibration = 0x51
Bootloader in use: No
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 4096 bytes starting at 3000

Bootloader:

3000: 0x4B 0xC0 0x00 0x00 0x64 0xC0 0x00 0x00 0x62 0xC0 0x00 0x00 0x60 0xC0 0x00 0x00
3010: 0x5E 0xC0 0x00 0x00 0x5C 0xC0 0x00 0x00 0x5A 0xC0 0x00 0x00 0x58 0xC0 0x00 0x00
3020: 0x56 0xC0 0x00 0x00 0x54 0xC0 0x00 0x00 0x52 0xC0 0x00 0x00 0xEE 0xC4 0x00 0x00
...
3FE0: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
3FF0: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF

MD5 sum of bootloader = 0xD8 0x8C 0x70 0x6D 0xFE 0x1F 0xDC 0x38 0x82 0x1E 0xCE 0xAE 0x23 0xB2 0xE6 0xE7
Bootloader name: Arduino-dfu-usbserial-atmega16u2-Uno-Rev3

First 256 bytes of program memory:

0: 0x90 0xC0 0x00 0x00 0xA9 0xC0 0x00 0x00 0xA7 0xC0 0x00 0x00 0xA5 0xC0 0x00 0x00
10: 0xA3 0xC0 0x00 0x00 0xA1 0xC0 0x00 0x00 0x9F 0xC0 0x00 0x00 0x9D 0xC0 0x00 0x00
20: 0x9B 0xC0 0x00 0x00 0x99 0xC0 0x00 0x00 0x97 0xC0 0x00 0x00 0x48 0xC4 0x00 0x00
30: 0x0C 0xC4 0x00 0x00 0x91 0xC0 0x00 0x00 0x8F 0xC0 0x00 0x00 0x8D 0xC0 0x00 0x00
...

Jeśli jednak pojawi się taki komunikat:

"Failed to enter programming mode. Double-check wiring!"

To wydaje się wskazywać, że twój ATmega16U2 nie działa.


Przetestuj układ ATmega328P

Odłącz zasilanie od „znanego dobrego” Arduino Uno i ponownie połącz zworki ICSP jak na tym zdjęciu, aby podłączyć je do „głównego” procesora w Uno:

Przetestuj układ ATmega328P

Pin-out dla nagłówka ICSP to (od góry):

Nagłówek ICSP

Pin 1 na nagłówku ICSP w pobliżu układu ATmega328P jest oznaczony małą białą kropką, poniżej „N” na „ON”.

Okablowanie jest takie samo jak poprzednio, z tym wyjątkiem, że łączysz się z drugim nagłówkiem ICSP - tym na końcu płytki, najdalej od gniazda USB.

Good board       Target Uno

  MISO                MISO    (pin with dot - pin 1)
  VCC                 VCC
  SCK                 SCK
  MOSI                MOSI
  D10                 /RESET
  GND                 GND

Po podłączeniu otwórz monitor szeregowy, ustaw go na 115200 bodów i powinieneś zobaczyć coś takiego:

Atmega chip detector.
Written by Nick Gammon.
Version 1.17
Compiled on Jul  9 2015 at 08:36:24 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Bootloader in use: Yes
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 512 bytes starting at 7E00

Bootloader:

7E00: 0x11 0x24 0x84 0xB7 0x14 0xBE 0x81 0xFF 0xF0 0xD0 0x85 0xE0 0x80 0x93 0x81 0x00
7E10: 0x82 0xE0 0x80 0x93 0xC0 0x00 0x88 0xE1 0x80 0x93 0xC1 0x00 0x86 0xE0 0x80 0x93
...

MD5 sum of bootloader = 0xFB 0xF4 0x9B 0x7B 0x59 0x73 0x7F 0x65 0xE8 0xD0 0xF8 0xA5 0x08 0x12 0xE7 0x9F
Bootloader name: optiboot_atmega328

First 256 bytes of program memory:

0: 0x0C 0x94 0x35 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
10: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
20: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
30: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
...

W tym przypadku potwierdza, że ​​główny procesor działa, i ma na nim moduł ładujący Optiboot.


Rzeczy, które możesz naprawić

Awaria regulatora napięcia

Nie jest to łatwe do wymiany, ale jest potrzebne tylko, jeśli używasz gniazda zasilania. Jeśli korzystasz z USB, nie jest to wymagane. Alternatywnie możesz zorganizować zasilanie od 4 do 5 V (np. 3 x baterie AA) i podłączyć je bezpośrednio do gniazda 5 V na płycie.


Awaria układu ATmega16U2

Jest to wymagane tylko w przypadku przesyłania szkiców przez port USB i szeregowego debugowania. Wymiana nie jest szczególnie łatwa, ponieważ jest to SMD (urządzenie do montażu powierzchniowego). Bez tego możesz sobie jednak poradzić.

Szkice można przesyłać za pomocą nagłówka ICSP, jeśli zakupiono urządzenie programujące ICSP.

Przykłady takich urządzeń podłączonych do gniazda ICSP:

USBtinyISP

AVRISP

(Te zdjęcia zostały zrobione z Ruggeduino, ale koncepcja jest taka sama).


Możesz również uzyskać kabel FTDI, taki jak ten:

Podłącz FTDI do Arduino

Podłącz go do portów szeregowych płyty w następujący sposób:

Kabel FTDI

FTDI    Arduino Uno

GND       GND  (black wire on FTDI cable, blue jumper wire)
CTS       not connected
VCC       5V
TxD       D0 (RX)
RxD       D1 (TX)
RTS       To RESET with a 0.1 µF capacitor in series with it (green wire)

Teraz możesz przesyłać szkice bezpośrednio do głównego procesora, omijając układ USB.


Możesz również użyć mojego autonomicznego programatora z układem Atmega do przesyłania plików .hex - pozwala to skopiować plik .hex dla szkicu na kartę SD, a następnie zaprogramować płytkę za pomocą nagłówka ICSP.


Awaria układu ATmega328P

Procesor główny można dość łatwo wymienić, jeśli jest zamontowany w gnieździe. Zdobądź zamienny chip z miejsca takiego jak Adafruit za około 6 USD. Alternatywnie, spróbuj na eBayu. Postaraj się o układ, który ma już bootloader Optiboot, aby zaoszczędzić kłopotów.

Ostrożnie podważ istniejący układ z gniazda i zainstaluj nowy, zwracając uwagę na położenie styku 1. Styk 1 ma wycięcie na układzie, a jego poprawna orientacja jest zaznaczona na pierwszym zdjęciu w tym poście za pomocą żółtego kropka (najbliższa krawędzi planszy). Prawdopodobnie będziesz musiał nieco wyprostować nogi. Chwyć mikroukład za końce i delikatnie pchnij w dół na płaską powierzchnię, jak biurko, aż zostaną lekko wepchnięte do środka. Staraj się nie dotykać metalowych szpilek, możesz uszkodzić je elektrycznością statyczną.


ATmega328P odpowiada, ale nie ma bootloadera

Mam szkic u programisty bootloadera Atmega, który zastąpi bootloader Optiboot. Okablowanie jest takie samo jak w przypadku szkicu detektora chipów. Kod znajduje się na GitHub - nickgammon / arduino_sketches . Jeśli klikniesz przycisk Pobierz na tej stronie, otrzymasz szereg przydatnych szkiców. Ten, który chcesz, nazywa się „Atmega_Board_Programmer”.

Zainstaluj szkic na „znanym dobrym” Uno i podłącz go do płyty docelowej za pomocą pokazanego wcześniej okablowania.

Przetestuj układ ATmega328P

Otwórz Monitor szeregowy na swoim „dobrym” Uno i powinieneś to zobaczyć:

Atmega chip programmer.
Written by Nick Gammon.
Version 1.35
Compiled on Jul  9 2015 at 15:06:58 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Type 'L' to use Lilypad (8 MHz) loader, or 'U' for Uno (16 MHz) loader ...

Wpisz „U” dla modułu ładującego Uno (Optiboot).

Using Uno Optiboot 16 MHz loader.
Bootloader address = 0x7E00
Bootloader length = 512 bytes.
Type 'Q' to quit, 'V' to verify, or 'G' to program the chip with the bootloader ...

Wpisz „G”, aby zaprogramować układ.

Powinieneś zobaczyć:

Erasing chip ...
Writing bootloader ...
Committing page starting at 0x7E00
Committing page starting at 0x7E80
Committing page starting at 0x7F00
Committing page starting at 0x7F80
Written.
Verifying ...
No errors found.
Writing fuses ...
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Done.
Programming mode off.
Type 'C' when ready to continue with another chip ...

To zajmuje około jednej sekundy. Teraz program ładujący jest zainstalowany.


Problemy z zegarem nadzorującym

Strażnik (domyślnie wyłączony) można skonfigurować tak, aby zresetował procesor po pewnym czasie. Zamiarem jest odzyskanie po „zawieszeniu” procesora wdrożonego w terenie. Jeśli jednak licznik czasu jest ustawiony na krótki czas (np. 16 ms), procesor może zresetować ponownie, zanim bootloader będzie miał szansę cokolwiek zrobić.

Symptomy są takie, że nie można przesyłać żadnych nowych szkiców. Niektóre nowoczesne programy ładujące (jak Optiboot) podejmują kroki, aby zatrzymać ten problem jako jedną z pierwszych rzeczy, które robią. Jednak inni nie.

Może to być trudne do odzyskania, ponieważ po uruchomieniu szkicu masz problem z jego zresetowaniem, a jeśli masz problem, nie możesz go zastąpić. Ludzie często zgłaszają, że muszą wypalić nowy program ładujący, aby odzyskać. Jest tak jednak tylko dlatego, że jako efekt uboczny spalenie programu ładującego usuwa bieżący szkic.

Nie jest to sposób na odzyskanie. Wykonaj następujące kroki:

  • Całkowicie wyłącz płytę (wyjmij kabel USB).
  • Przytrzymaj przycisk resetowania i trzymaj go wciśnięty (lub poprowadź przewód połączeniowy z pinu RESET do pinu GND). Zapobiega to uruchomieniu szkicu problemu, a tym samym aktywuje timer nadzoru
  • Wciąż przytrzymując przycisk Reset, ponownie podłącz kabel USB.
  • Rozpocznij przesyłanie szkicu, który nie ma tego problemu (np. Mrugnięcie)
  • Gdy IDE zgłosi „Przesyłanie”, zwolnij przycisk Reset (lub usuń mostek zworowy).
  • Teraz powinno się przesłać OK - ponieważ szkic, który aktywował timer nadzorujący, nigdy się nie zaczął.

Problemy z przesyłaniem Mega2560

Wspominam o tym tutaj, mimo że ten post jest naprawdę skierowany do tablicy Uno, ponieważ jest dość powszechny.

Niektóre wersje programu ładującego Mega2560 szukają „!!!” w przychodzącym przesyłaniu z komputera, a jeśli zobaczą, przejdź do trybu debugowania. Powoduje to niepowodzenie przesyłania.

Przykładowy kod:

Serial.println ("Furnace overheating!!!");

Rozwiązania:

  • Zainstaluj nowszy program ładujący. Mój szkic „programu ładującego program ładujący” wspomniany wcześniej w tej odpowiedzi powinien zainstalować program ładujący, który nie ma tego problemu.

Lub (prościej):

  • Nie używaj "!!!" w swoim szkicu.

Problemy z przesyłaniem do Leonardo / Micro / Esplora itp.

Płyty z ATmega32u4 jako głównym (i jedynym) procesorem mogą być trudniejsze do przesłania. Wynika to z faktu, że ten sam układ musi obsługiwać przesyłanie, a także uruchamiać kod.

Po zresetowaniu planszy jest małe okno możliwości, kiedy szuka nowego szkicu do przesłania. Technika przesyłania na te tablice to:

  • Skompiluj szkic bez błędów.
  • Rozpocznij przesyłanie
  • Gdy tylko IDE zgłosi „Przesyłanie”, naciśnij i zwolnij przycisk Reset.

Masz tylko sekundę, aby to zrobić, zanim zacznie działać stary szkic. Nie zniechęcaj się, jeśli musisz powtórzyć ten proces kilka razy. To normalne.


Bibliografia

Nick Gammon
źródło
5
Łał. To świetna świetna odpowiedź
rpax,
1
To wspaniała odpowiedź, proszę pana.
Mert Gülsoy,
„Jeśli otrzymujesz 5 V z podłączonym USB, ale nie z zasilaczem, prawdopodobnie regulator napięcia (oznaczony na zdjęciu) prawdopodobnie jest uszkodzony. Lub może zasilacz się zepsuł. Wypróbuj inny zasilacz, aby potwierdzić, który to jest . ” - dlaczego miałoby to uniemożliwiać przesyłanie szkiców?
user2813274,
Masz całkowitą rację, nie byłoby. Lista kontrolna miała jednak być ogólną listą kontrolną błędów. W tym przypadku byłoby to bardziej jak „Mogę załadować szkic, ale po wdrożeniu w terenie, z zasilaczem (ściennym) nie działa”.
Nick Gammon
1
Niedawno miałem problem z nowymi sterownikami FTDI, które układy „cegiełkowe” chińskie „kompatybilne z FTDI” (no cóż, można powiedzieć, że są imitacją). Ustawiają PID urządzenia na 0x0000, co spowoduje, że sterowniki będą nieważne. Możesz ponownie zmienić PID za pomocą narzędzia M_PROG na FTDI lub zmienić sterowniki (i skonfigurować okna, aby zezwolić na niezweryfikowane sterowniki).
Paul,
14

Przynajmniej - jak zakładam, że przesyłasz szkic przez avrdude - podaj więcej informacji o niepowodzeniu przesyłania (np. Wynik programu do przesyłania szkicu), aby ludzie tutaj mogli Ci pomóc.

Oprócz świetnej odpowiedzi Nicka Gammona, poszukaj wykrzykników w swoim szkicu. Jeśli szkic zawiera ciąg znaków z więcej niż 3 wykrzyknikami, przesyłanie zakończy się niepowodzeniem, ponieważ stare wersje Arduino Bootloader zinterpretują te wykrzykniki jako inną funkcję i przesyłanie zostanie zatrzymane.

Przykład zatrzymania przesyłania:

char* test = "This will stop the upload!!!";

Zobacz problem z kodem Google .

mw
źródło
1
Słuszna uwaga. Dotyczy to głównie Mega2560, ale przyznaję, że to pominąłem. :)
Nick Gammon
1
Dodano sekcję dotyczącą tego problemu.
Nick Gammon
2

Zablokowałem 2x ATMega328P na mojej płycie Arduino Uno z powodu zakłóceń (tak myślę).

Statyczne zdaje się, że zabiło pin TX, a zatem programu nie można pobrać za pomocą kabla USB.

Najłatwiejszym rozwiązaniem jest wymiana mikrokontrolera. Możesz kupić nowy DIP ATMega328P zaprogramowany za pomocą bootloadera Arduino ( taki jak ten od Adafruit ) i jesteś gotowy, aby przejść ponownie.

Alternatywnie możesz nadal programować ATMega328P za pomocą programatora AVRISPmkII. Gdy to zrobisz, wszystko oprócz pinezki Tx działa dobrze.

sa_leinad
źródło