Translate

terça-feira, 21 de julho de 2020

Micronucleus no Attiny85 com USBAsp




Me atualizando sobre artigos, desde que parei de trabalhar com os ATTinys, surgiu um bootloader que consegue carregar os programas direto pela USB sem a necessidade de um conversor USB-Serial, o Micronucleus, usado pela placa de desenvolvimento Digispark, por exemplo.

Aqui vou utilizar um ATTiny85 com o mínimo de componentes, pelo menos para carga do bootloader e do programa.

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

BOOTLOADER


Utilizei um USBasp para carregar o bootloader primeiramente. Trabalhoso acertar o driver.


Como o driver originário da Microsoft não funcionou diretamente, utilizei o Zadig para substituir o driver. Com o USBasp conectado, em Options, escolhi Load All Devices, pois minha lista veio vazia. Bastou escolher o USBasp da lista de Devices,  libusb-win32 como driver e Install ou Replace Driver. Demora alguns minutos para instalar ou substituir.  - ATENÇÃO: o driver some, não consegue ser instalado, etc. no Windows 10. É problemático mesmo e precisa insistir. Você instala o driver, abandona porque testa e não dá certo e depois de alguns minutos ele funciona no AVRDudess. Persista, porque eu quase desisti.



Para carregar o bootloader, utilizei o AVRDUDESS, utilizando o Programador "USBasp, http://www.fischl.de/usbasp", Port "usb", Baud rate "19200" e Bit clock "1.5 Mhz". Baixando e descompactando o Micronucleus, os firmwares estão na pasta firmware\releases, de acordo com o modelo do microcontrolador. É ele que deve ser indicado na caixa Flash e também ser escolhida a opção Write. Feito isso, é só clicar no botão Go da seção Flash.



Outros acertos são os Fuses:

Acerte o L para 0xE1, H para 0xDD, E para 0xFE e dê um Write (NÃO ERRE OS VALORES, porque pode bricar o ATtiny). Caso não faça essa etapa, não conseguirá carregar o programa depois. ATENÇÃO: Se não conhece, não mexa no fuse LB! Os Fuses são tão delicados que podem afetar o clock do microcontrolador, impedindo qualquer reprogramação - a única solução será HVSP - resetar com alta voltagem - tem um projeto com Arduino Uno aqui.

Caso tenha que testar a comunicação antes, pode utilizar o Botão Detect para tentar identificar automaticamente o microcontrolador.

Uma Dica: não sei porque, mas o driver do USBasp parou de funcionar, após um tempo ligado direto. Reiniciei o PC, deconectei e conectei novamente o USBasp e nada. Só entrando de novo no Zadig e pedindo para reinstalar o driver. Como comentei ali em cima, muitos problemas com muita insistência ou tomara que você tenha muita sorte e solucionem o problema de incompatibilidade com Windows 10.

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

PROGRAMA

O teste de fogo é carregar uma versão alterada do Blink montando um circuito - utilizei o Tiny-Bread-Duino do Sr. M Druiven - aqui - depois de muita pesquisa e tentativas frustadas com menos componentes.
Refiz o fritzing - aqui - do Sr. Druiven, por estar com um Led Verde invertido e colocar mais alguns comentários.



Para constar, o diodo do topo é um 1N4148. Os outros dois são Zener 3.6V. Os resistores estão na cor certa, 22R e 1.5Kohms. Leds comuns. No resultador, o led verde permanece como aceso quando o circuito está alimentado e o vermelho pisca.

A barra de conectores é ligada diretamente nos fios do USB, - (GND), D+, D- e + (VCC). NÃO PRECISA DE CONVERSOR USB-SERIAL!!!! 😄

Depois de montado, verificado e conectado (e o bootloader estando Ok), ligamos o cabo USB no computador. Mesma dor de cabeça para instalar o driver que é o mesmo do USBasp. Siga o mesmo processo, mas deve aparecer como um dispositivo desconhecido no Zadig.


Caso tenha avisado que o driver foi instalado com sucesso, podemos tentar continuar com o processo de carga do programa.

Carregando o Arduino IDE temos que configurá-lo para programação do Disgispark: 
  • em Arquivo/Preferências, acrescente "http://digistump.com/package_digistump_index.json" às URLs adicionais...;
  • Em Ferramentas/Placa/Gerenciador de Placas, instale o "Digistump AVR Boards";
  • Em Ferramentas/Placa, escolha "Digispark default - 16.5 Mhz";
  • Caso necessário, em Ferramentas/Programador escolha "Micronucleus".

O programa teste é este (encontrado completo aqui):

int LED_BUILTIN = 1;
void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH); 
  delay(1000);
  digitalWrite(LED_BUILTIN, LOW);
  delay(1000);
}

Basta dar Carregar (ou Sketch/Carrregar) no programa e o resultado deverá ser esse, depois de algum tempo (minutos?):



Dando tudo certo, o Led verde deve se acender e o vermelho a piscar 1x1 segundo.