quinta-feira, julho 31, 2014

ATtiny Detonator: Um Programador de "Alta Tensão" para Recuperar Microcontroladores ATtiny

Colocando em prática o que vimos em posts anteriores, descrevo aqui o "ATtiny Detonator", um programador para recuperar microcontroladores ATtinyx5 ou ATtinyx4 que foram configurados, proposital ou acidentalmente, de uma forma que impeça a sua reprogramação via SPI (usando o ArduinoISP, UsbAsp, UsbTiny, etc).

A inspiração para este projeto vem do circuito que já vimos e deste ATtiny Fuse Doctor (mais detalhes aqui). Este projeto aproveita algumas coisas que já vimos por aqui, como o "Arduino na Protoboard" e o "Display Nokia 5110" além, é claro, o HVSP.



Hardware

Na foto abaixo identifiquei os vários módulos do harware, que foram montados e testados um a um:
  1. Fonte 5V: uma fonte simples, baseada em um regulador 78L05, para gerar 5V a partir de uma fonte DC de 7 a 15V. Isto permite alimentar o circuito com uma bateria de 9V (para portabilidade) ou uma fonte genérica ligada à tomada. O conector usado é o mesmo do Arduino.
  2. ATmega328: o circuito básico de um Arduino. Um conector permite ligar um adaptador USB serial para carga de software diretamente da IDE do Arduino.
  3. Charge Pump: o circuito que vimos recentemente, gera 12V a partir dos 5V, sob controle do ATmega328.
  4. LED bicolor: ligado a dois pinos do ATmega, este LED pode ser aceso em vermelho ou verde, para indicar erro ou sucesso.
  5. Display: display gráfico Nokia 5110. A combinação do conector que veio soldado e a posição de montagem tem o inconveniente de deixar a tela de ponta cabeça. Isto foi contornado por software, mas deixou o código mais complicado que necessário. A opção era ter tirado o conector e soldado outro na outra borda, mas deu preguiça.
  6. Tecla: um botão simples, para obter confirmações do usuário.
  7. Soquetes para o ATtiny. São dois soquetes, um de 8 pinos (para ATtiny13 e ATtinyx5) e outro de 14 pinos (para ATtinyx4). Por engano eu soldei um soquete de 16 pinos, por preguiça eu simplesmente inutilizei os dois pinos da ponta. Um problema mais sério é que a entrada em modo de programação do ATtinyx4 é ligeiramente mais complicada que no ATtinyx5, exigindo três pinos adicionais. Dois devem ser ligados ao terra (fácil), mas o terceiro deveria ser ligado ao terra e depois liberado para flutuar. Infelizmente, quando descobri isto já tinha usado todos os pinos do ATmega328. Fazendo algumas experiências, descobri que funcionava simplesmente ligando este terceiro pino (PA2) a terra através de um resistor de 1K. Quem for mais purista pode trocar o LED por um LED comum, liberando um pino do ATmega e conectá-lo (via o resistor de 1K) ao pino PA2 do ATtiny. Na entrada no modo programação, este pino deve ser inicialmente configurado como saída e colocado em nível baixo; posteriormente deve ser reconfigurado para entrada (como é feito com o MISO no ATtinyx5).


A figura abaixo tem o esquema completo (ficou um pouco esquisito porque é a primeira vez que uso o Kicad).



Software

Não vou listar aqui o código pois ele é relativamente longo e não possui grandes novidades. Está em ATtnyDetonator.zip nos arquivos do blog. Eu optei por separar o código em vários fontes, o que é meio desajeitado na IDE do Arduino. Além dos meus fontes e das bibliotecas do Arduino, você precisará da biblioteca TimerOne.

Operação

O vídeo abaixo mostra o básico da operação. De forma resumida, você coloca um ATtiny no soquete, aperta o botão, confere as informações na tela e pressiona o botão para reiniciá-lo. O Detonator retorna sempre os fuses para os valores de fábrica. Se a programação estava bloqueada através do Lock, o chip é apagado.



3 comentários:

Ronaldinho disse...

O projeto ficou muito bacana!!!

Nilson Laviola disse...

ola , gostaria de saber se é possivel copiar o conteudo hex de um attiny 13 que esta bloqueado, usando para isso um arduino uno
grato

Daniel Quadros disse...

Nilson, se foi bloqueada a leitura da Flash não tem jeito. Tirar o bloqueio limpa a Flash.