Não consigo enviar esboços para o meu Arduino Uno.
- Eu "emparedou" isso?
- Que medidas posso tomar para descobrir o que está errado?
- O que posso fazer para corrigi-lo?
Não consigo enviar esboços para o meu Arduino Uno.
Respostas:
Eu tenho muitos Arduinos e, nos últimos anos, apenas um "empedrado", e acho que isso foi causado por zapping com eletricidade estática. Infelizmente, aquele em particular tinha um chip de processador SMD (montado na superfície), por isso não é fácil tentar trocá-lo por outro chip.
Mantenha a calma e tente as seguintes etapas ...
Um "Arduino Uno" não é apenas uma coisa que pode falhar. Possui vários componentes principais e, possivelmente, apenas um falhou (se houver). Veja esta fotografia de referência:
Os principais componentes são:
Observe que os LEDs Rx e Tx não estão conectados diretamente aos pinos digitais 0 e 1 na placa (marcados como Rx e Tx). Eles só acendem se você estiver fazendo comunicações seriais via USB , e não se houver algo (como um GPS) conectado diretamente nos pinos digitais 0 e 1.
Observe também que, como o LED "L" é conectado via um amplificador operacional, ele pode acender se o pino 13 estiver definido como uma entrada em seu esboço. Isto é normal. Isso não significa que algo está enviando dados erroneamente.
Conecte a placa ao computador com o cabo USB e verifique se o LED verde "On" acende.
Use um multímetro e duas ligações em ponte para testar entre o pino de 5V e o pino GND (seta na parte inferior). Você deve obter uma leitura de cerca de 5,0 V (eu tenho 5,04 V no meu).
(Você pode comprar um multímetro barato por cerca de US $ 10, se não tiver um, mas é melhor comprá-lo por US $ 50 - verifique todos os sites e lojas de eletrônicos.)
Se você não receber 5 V com o cabo USB conectado, verifique se a outra extremidade está conectada ao seu computador. Tente também um cabo diferente.
Se você estiver usando ou planejando usar, o conector de força (marcado com "entrada de energia" na foto) desconecte o USB e conecte uma fonte de alimentação - que deve ser de 7 a 12 V DC com positivo no pino central .
Meça os pinos de 5 V e 3,3 V como acima. Você ainda deve ver as mesmas tensões neles.
Se você obtiver 5 V com o USB conectado, mas não com a fonte de alimentação, o regulador de tensão (marcado na foto) provavelmente está danificado. Ou, possivelmente, a fonte de alimentação falhou. Tente uma fonte de alimentação diferente para confirmar qual é.
Se você tiver o carregador de inicialização Optiboot (o Uno normalmente é fornecido com ele), se você pressionar e soltar o botão Redefinir, ou desconectar e conectar novamente o cabo USB ou de alimentação, o LED "L" piscará rapidamente três vezes. Os tempos "ligado" e "desligado" são de 50 ms cada, os três flashes devem terminar em cerca de 1/3 de segundo.
Caso contrário, você pode ter um problema com o carregador de inicialização ou com o chip do processador principal (Atmega328P).
Importante: Se estiver com problemas para fazer upload de esboços, remova todos os dispositivos conectados (como blindagens). Remova também os fios dos jumpers conectados aos soquetes da placa. Em particular, não deve haver nada conectado aos pinos digitais 0 e 1 (Rx e Tx), pois isso interferirá na comunicação com o computador que está carregando.
Escolha um dos esboços de exemplo simples (por exemplo, Blink) e tente carregá-lo. Isto é o que você deve ver:
O LED "L" deve piscar 3 vezes. Isso ocorre porque o chip principal está sendo redefinido por um comando do processo de upload.
O LED "Rx" deve piscar rapidamente. Estas são as instruções do processo de upload tentando ativar o carregador de inicialização.
O LED "Tx" deve piscar rapidamente. Este é o processador que reconhece os dados carregados.
Você pode ver o acima, mesmo se o processo de upload falhar. Isso pode ocorrer porque o tipo de placa incorreto está selecionado.
Se apenas o LED "Rx" piscar, pode ser um problema com o carregador de inicialização ou com o chip do processador principal (Atmega328P). Alguém está batendo, mas ninguém está em casa!
Se os LEDs piscarem, mas você receber uma mensagem como esta:
avrdude: stk500_recv(): programmer is not responding
Verifique o tipo de quadro:
Se você tiver selecionado o tipo de placa errado, provavelmente enviará as instruções de upload incorretas e ocorrerá um tempo limite ou falha. Se você é como eu e tem pranchas diferentes, é fácil esquecer que o último upload feito foi para um tipo de prancha diferente.
Se os LEDs não piscarem, você pode ter a porta de comunicação errada selecionada.
Verifique a porta de comunicação:
Experimente o seu Arduino em um PC / Mac diferente, se você tiver um em mãos. Isso pode diminuir se você tem ou não um problema com o computador específico em que o conectou ou com os computadores em geral.
Fiação:
Se tudo voltar ao eco: Isso confirma que você possui a porta de comunicação correta, o cabo USB está OK e o chip de interface USB (Atmega16U2) provavelmente está OK.
Se nada for repetido, verifique:
Se a sua placa falhar no teste de loopback e você tiver certeza de que o cabo USB está OK, poderá testar o próprio chip Atmega16U2. Há um cabeçalho ICSP (Programação em série em circuito) na placa, adjacente ao chip Atmega16U2 e próximo ao soquete USB.
Desconecte a energia primeiro (desconecte o cabo USB e qualquer cabo de energia).
Em seguida, você pode conectar o cabeçalho ICSP através de 6 fios de jumper a um Uno em bom estado, conforme mostrado na foto:
As pinagens para o cabeçalho ICSP são (de cima):
O pino 1 no cabeçalho ICSP próximo ao chip Atmega16U2 é marcado com um pequeno ponto branco, próximo ao "F" em "AREF". O pino 1 no cabeçalho ICSP, próximo ao chip ATmega328P, é marcado com um pequeno ponto branco, abaixo do "N" em "ON".
Conecte-se:
Good board Target Uno
MISO MISO (pin with dot - pin 1)
VCC VCC
SCK SCK
MOSI MOSI
D10 /RESET
GND GND
Verifique duas vezes sua fiação.
Em seguida, na placa "conhecido", instale o esboço "Atmega_Board_Detector", conforme descrito na página do programador do gerenciador de inicialização Atmega . O código está no GitHub - nickgammon / arduino_sketches . Se você clicar no botão Download nessa página, receberá vários esboços úteis. O que você deseja é chamado "Atmega_Board_Detector".
Depois de instalado, abra o monitor serial, defina-o para 115200 baud e você verá algo assim:
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
...
No entanto, se você receber uma mensagem como esta:
"Failed to enter programming mode. Double-check wiring!"
Isso parece indicar que seu ATmega16U2 não está funcionando.
Desconecte a energia do "bem conhecido" do Arduino Uno e reconecte os jumpers do ICSP conforme esta foto, para conectá-los ao processador "principal" do seu Uno:
As pinagens para o cabeçalho ICSP são (de cima):
O pino 1 no cabeçalho ICSP, próximo ao chip ATmega328P, é marcado com um pequeno ponto branco, abaixo do "N" em "ON".
A fiação é a mesma de antes, exceto que você está se conectando ao outro cabeçalho ICSP - aquele no final da placa, mais distante do soquete USB.
Good board Target Uno
MISO MISO (pin with dot - pin 1)
VCC VCC
SCK SCK
MOSI MOSI
D10 /RESET
GND GND
Depois de conectado, abra o monitor serial, defina-o para 115200 baud e você verá algo assim:
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
...
Nesse caso, ele confirma que o processador principal está funcionando e possui o carregador de inicialização Optiboot.
Isso não é fácil de substituir, mas é necessário apenas se você usar o conector de força. Se você usa USB, isso não é necessário. Como alternativa, você pode providenciar um fornecimento de 4 a 5 V (por exemplo, 3 pilhas AA) e conectá-los diretamente ao soquete de 5 V na placa.
Isso é necessário apenas para o upload de esboços via porta USB e depuração serial. Não é particularmente fácil de substituir porque é um SMD (dispositivo montado na superfície). No entanto, você pode gerenciar sem ele.
Você pode fazer o upload de esboços através do cabeçalho do ICSP, se adquirir um dispositivo de programação ICSP.
Exemplos desses dispositivos conectados ao soquete ICSP:
(Essas fotos foram tiradas de um Ruggeduino, mas o conceito é o mesmo).
Você também pode obter um cabo FTDI, assim:
Conecte-o às portas seriais da sua placa assim:
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)
Agora você pode enviar esboços diretamente para o processador principal, ignorando o chip USB.
Você também pode usar meu programador autônomo de chip Atmega para fazer upload de arquivos .hex - isso permite copiar o arquivo .hex para um esboço em um cartão SD e depois programar a placa através do cabeçalho ICSP.
O processador principal pode ser substituído com bastante facilidade se estiver montado em um soquete. Adquira um chip de substituição de algum lugar como Adafruit por cerca de US $ 6. Como alternativa, tente o eBay. Tente obter um chip que já tenha o carregador de inicialização Optiboot, para evitar problemas.
Retire cuidadosamente o chip existente do soquete e instale o novo, anotando a localização do pino 1. O pino 1 possui um entalhe no chip e sua orientação correta é observada na primeira foto deste post com uma cor amarela. ponto (mais próximo da borda do quadro). Você provavelmente precisará endireitar as pernas levemente. Segure o chip pelas extremidades e empurre-o suavemente sobre uma superfície plana, como uma mesa, até que eles sejam empurrados um pouco para dentro. Tente não tocar nos pinos de metal, pois pode danificá-los com eletricidade estática.
Eu tenho um esboço no programador do gerenciador de inicialização Atmega que substituirá o gerenciador de inicialização Optiboot. A fiação é a mesma do esboço do detector de chip. O código está no GitHub - nickgammon / arduino_sketches . Se você clicar no botão Download nessa página, receberá vários esboços úteis. O que você deseja é chamado "Atmega_Board_Programmer".
Instale o esboço no seu Uno "conhecido" e conecte-o à placa de destino com a fiação mostrada anteriormente.
Abra o Serial Monitor no seu "bom" Uno e você deverá ver o seguinte:
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 ...
Digite "U" para o carregador 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 ...
Digite "G" para programar o chip.
Você deveria ver:
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 ...
Isso leva cerca de um segundo. Agora o carregador de inicialização está instalado.
O cronômetro do watchdog (desativado por padrão) pode ser configurado para redefinir o processador após um certo tempo. A intenção é recuperar de um "travar" para um processador implantado no campo. No entanto, se o timer for definido por um curto período (como 16 ms), o processador poderá reiniciar novamente antes que o carregador de inicialização tenha a chance de fazer qualquer coisa.
Os sintomas são que você não pode carregar novos esboços. Alguns gerenciadores de inicialização modernos (como Optiboot) tomam medidas para interromper esse problema como uma das primeiras coisas que eles fazem. No entanto, outros não.
Isso pode ser difícil de recuperar, porque, uma vez que o esboço é executado, você tem o problema de redefinir e, se tiver o problema, não pode substituir o esboço. As pessoas costumam relatar que precisam gravar um novo gerenciador de inicialização para se recuperar. No entanto, isso ocorre apenas porque, como efeito colateral, a gravação de um carregador de inicialização apaga o esboço atual.
Não é uma maneira de recuperar. Siga estes passos:
Menciono isso aqui, mesmo que este post seja realmente direcionado ao quadro Uno, porque é bastante comum.
Algumas versões do gerenciador de inicialização Mega2560 procuram por "!!!" no upload recebido do PC e, se o virem, entre no modo de depuração. Isso faz com que o upload falhe.
Código de exemplo:
Serial.println ("Furnace overheating!!!");
Soluções:
Ou (mais simplesmente):
Placas com o ATmega32u4 como seu principal (e único) processador podem ser mais difíceis de carregar. Isso ocorre porque o mesmo chip precisa lidar com envios e também executar seu código.
Há uma pequena janela de oportunidade, após o quadro ser redefinido, quando ele procura um novo esboço a ser carregado. A técnica para fazer upload nessas placas é:
Você tem apenas um segundo para fazer isso, antes que o esboço antigo comece a ser executado. Não desanime se precisar repetir esse processo algumas vezes. Isso é normal.
Pelo menos - como eu assumo que você carregou seu sketch via avrdude - forneça mais informações sobre a falha no upload (por exemplo, saída do carregador de esboços) para que as pessoas aqui possam ajudá-lo melhor.
Além da ótima resposta de Nick Gammon, pesquise pontos de exclamação no seu esboço. Se o seu esboço contiver uma sequência com mais de ou igual a 3 pontos de exclamação, o upload falhará, pois as versões antigas do Arduino Bootloader interpretarão esses pontos de exclamação como outra função e o upload será interrompido.
Um exemplo para parar o upload:
char* test = "This will stop the upload!!!";
Tenho 2x ATMega328P emparelhado na minha placa Arduino Uno devido à estática (eu acho).
A estática parece ter matado o pino TX e, portanto, o programa não pode ser baixado usando o cabo USB.
A solução mais fácil é substituir o microcontrolador. Você pode comprar um novo DIP ATMega328P programado com o gerenciador de inicialização Arduino ( como este da Adafruit ) e está pronto para começar novamente.
Como alternativa, você ainda pode programar os ATMega328P usando o programador AVRISPmkII. Quando você faz isso, todos, exceto o pino Tx, funcionam bem.