Ao usar o Arduino Uno como provedor de serviços de Internet, “Caramba! Assinatura de dispositivo inválida "significa uma conexão incorreta, uma configuração incorreta ou uma versão incorreta do avrdude?

12

Estou usando um Arduino UNO para programar uma imagem hexadecimal pré-compilada em um ATTINY45, usando o avrdude no diretório IDE do Arduino, no Windows 7. O Uno tem o esboço do ISP carregado no diretório de exemplos e funciona - o LED de pulsação pulsa bem.

No lado do hardware, eu tenho essa configuração , exceto que o ATTINY é montado em superfície, soldado a uma prancha de surf com todos os seus pinos verificados e soldados com um voltímetro. Eu uso uma faixa de pinos de cabeçalho, segurada à mão para fazer com que os pinos toquem na prancha de surf, para obter os sinais do Uno para o ATTINY.

Aqui estão as linhas de comando, que tirei de olhar para a saída de depuração do IDE:

REM set the fuse for 8MHz, so the ISP programmer can work
C:\Progra~1\Arduino\hardware\tools\avr\bin\avrdude -CC:\Progra~1\Arduino\hardware/tools/avr/etc/avrdude.conf -v -v -v -v -pattiny45 -cstk500v1 -P\\.\COM7 -b19200 -e -Uefuse:w:0xff:m -Uhfuse:w:0xdf:m -Ulfuse:w:0xe2:m 
REM load the program
C:\Progra~1\Arduino\hardware\tools\avr\bin\avrdude -CC:\Progra~1\Arduino\hardware/tools/avr/etc/avrdude.conf -v -pattiny45 -cstk500v1 -P\\.\COM7 -b19200 -Uflash:w:firefly.hex:i
REM set fuse for 1MHz, as the project requires
C:\Progra~1\Arduino\hardware/tools/avr/bin/avrdude -CC:\Progra~1\Arduino\hardware/tools/avr/etc/avrdude.conf -v -pattiny45 -cstk500v1 -P\\.\COM7 -b19200 -e -Uefuse:w:0xff:m -Uhfuse:w:0xdf:m -Ulfuse:w:0x62:m 

-Tento executá-los separadamente, mas sempre recebo este erro:

avrdude: Device signature = 0x000000
avrdude: Yikes!  Invalid device signature.
     Double check connections and try again, or use -F to override
     this check.

mas às vezes o número é ff0000 ou ffff00 ou ffffff

Eu li que "o Arduino usa uma versão ligeiramente modificada do avrdude para fazer upload de esboços para a placa do Arduino. A versão padrão consulta a assinatura do dispositivo da placa de uma maneira não compreendida pelo gerenciador de inicialização, resultando neste erro". Isso significa que o uso do Arduino avrdude com um novo chip ATTINY, sem carregador de inicialização, também causaria o mesmo erro? Em outras palavras, o avrdude modificado é incapaz de consultar um chip AVR não carregado pelo boot do Arduino?

Ou esse erro significa simplesmente que não tenho um bom contato entre todos os meus pinos do programador e o ATTINY?

E, as configurações de fusível são realmente necessárias? O Uno pode programar o flash para um funcionamento em funcionamento a 1 MHz e, assim, poupar alguns passos?

(Eu compraria apenas um programador "real", mas preciso obter esse código nos próximos dois dias e estou em uma parte rural da Nova Escócia)

Yary
fonte
Tente configurar o programador para -c avrisp. Eu acho que você pode programá-lo em 1 MHz sem problemas.
user2973
1
Quando eu carrego a partir do IDE do arduino e defino o programador como "Arduino como ISP", ele -carduinonão usa o stk500. Apenas tente fazer o upload do programa de piscada para o attiny do IDE. Dessa forma, você pode ver a linha de comando correta na parte inferior, se você habilitar "saída detalhada" nas configurações.
Gerben
Você enviou o esboço do ArduinoISP primeiro?
precisa saber é o seguinte
Phil, eu carreguei o esboço do ArduinoISP no Uno antes dessas etapas, ele foi bem-sucedido e eu vejo o LED verde "batimento cardíaco" no pulso do pino 9. Gerben / user2973, tentei "-carduino", tentarei "-c avrisp" a seguir. Obrigado.
Yary
Parece um problema de conexão de destino do ISP <->. Alguma coisa em seu circuito que possa estar carregando as linhas? Os fusíveis ATtiny ainda estão configurados para o relógio interno ou você está fornecendo um externo? Tem certeza de que todos os quatro fios de sinal e terra estão conectados e na ordem certa? Talvez você deve alinhavar solda uma configuração apenas para verificar que não é o seu método de mão (embora eu usei também que)
Chris Stratton

Respostas:

12

Soldava fios nos pads para garantir que a conexão estava boa e os usava para programação a partir do Uno. Em seguida, o programador trabalhou, sem nenhuma edição nas linhas de comando, conforme publicado na pergunta. Corri algumas variações e fui capaz de responder todas as minhas perguntas, e mais algumas além:

  1. O erro "Caramba! Assinatura inválida do dispositivo" estava sendo causado por mau contato entre o programador (Uno) e os pinos ATTINY.

  2. Não tinha nada a ver com o carregador de inicialização não estar no novo microcontrolador. O novo chip ATTINY45 não precisa de um gerenciador de inicialização para o programador em circuito funcionar.

  3. O Uno pode programar o ATTINY45 configurado para qualquer uma de suas velocidades, 1 MHz ou 8 MHz. As configurações de fábrica são boas e não exigem troca dos fusíveis.

  4. Ambas as versões avrdude trabalhavam para programação - a 6.1 no site do autor e a modificada no IDE do Arduino.

  5. avrdude programa pode através do Uno usando qualquer um -c avrisp, -c arduinoou -c stk500v1, não importa qual.

Uma pequena pergunta que não pude responder foi a que velocidade os programas Uno estavam (velocidade de comunicação entre os pinos de E / S e o microcontrolador do Arduino piscando). Está relacionado à velocidade da porta serial? Mas acabou não sendo pertinente para responder a esse problema. Alguém mais pode perguntar se é curioso o suficiente.

Yary
fonte
2
O ArduinoISP define a interface SPI para clock / 128, portanto, para um 16 MHz Uno, o AVR conectado é programado em 16 MHz / 128 = 125 kbit / s. Mas os fatores limitantes são a velocidade serial e quando PROG_FLICKER é definido, são adicionados atrasos de 30 ms para cada confirmação de página.
user2973
4

Eu tive exatamente esse problema. Se o ATtiny estiver configurado para relógio externo, o ArduinoISP não poderá programá-lo sem um cristal externo. Conectou um cristal de 16 MHz e 2 capacitores e funcionou perfeitamente.

(Consegui definir ATtiny para o relógio interno, remover o cristal e depois trabalhei perfeitamente sem o cristal.)

jcwh2
fonte
1

Adicione a placa e sua descrição do fusível a partir do que já está definido e ele funcionará.

Para adicionar apenas C:\Program Files\Arduino\hardware\arduino\avr\boards.txte adicionar a descrição do quadro.

########
############ Definitions for ATmega 8MHz 
##############################################################
atmega16-8.name=Atmega16 (internal 8MHz clock)

atmega16-8.upload.tool=avrdude

atmega16-8.upload.protocol=stk500v1

atmega16-8.upload.maximum_size=14336
atmega16-8.upload.speed=19200

atmega16-8.bootloader.low_fuses=0xE8
atmega16-8.bootloader.high_fuses=0x99

atmega16-8.build.mcu=atmega16
atmega16-8.build.f_cpu=8000000L
atmega16-8.build.core=arduino:arduino
atmega16-8.build.variant=mega16

##############################################################
############################

Eu usei.

Shubham
fonte