terça-feira, junho 09, 2020

Programação "Alta Voltagem" do ATmega - Parte 1

Uma das minhas ideias mais antigas de projeto é um programador para microcontroladores ATmega (mais especificamente ATmega8, ATmega168 e ATmega328 que compartilham a mesma pinagem) usando a "programação pararela" também como conhecida como "programação de alta voltagem".

Vamos ver se escrevendo uns artigos sobre a teoria eu me animo a ir para a prática...



A maior parte do tempo a carga de programas no ATmega utiliza outros dois métodos:

  • Bootloader - onde um programa curto na Flash recebe (tipicamente pela serial) comandos para leitura, gravação e verificação da Flash, EEProm e fuses. É o que ocorre quando você carrega um sketch via a IDE do Arduino.
  • Programação Serial - onde os comandos são recebidos pela SPI enquanto o pino de Reset é mantido em nível baixo. É a forma normalmente usada para gravar o bootloader do Arduino em um ATmega "zerado".
Estes dois modos são bastante simples e podem ser usados com o ATmega ligado ao circuito, porém tem algumas limitações:
  • O uso do bootloader requer que ele tenha sido gravado antes, que os fuses estejam programados corretamente, que os pinos seriais estejam livres e que o clock configurado esteja presente.
  • A programação serial requer que os fuses estejam com um valor razoável (ela pode ser desabilitada através dos fuses), que os pinos de SPI estejam livre e que o clock configurado esteja presente.
Sem um programador paralelo, uma programação desastrada do ATmega pode deixá-lo inutilizável.

A programação paralela é descrita em detalhes no datasheet completo do ATmega.

Olhando para a figura no início do artigo, percebemos que existe um número grande de sinais envolvidos. De um modo bem superficial:
  • Para usar a programação paralela é necessário colocar 12V no pino RESET. É daí que vem o nome "programação alta voltagem".
  • Os pinos XA0 e XA1 determinam a ação que será feita quando XTAL1 for pulsado: escrita de comando, endereço ou dado. 
  • Os endereços de Flash e EEPROM e os dados da Flash são maiores que um byte, os sinais BS1 e BS2 são usados para indicar se está sendo transferido o byte mais ou menos significativo.
  • OE, WR e PAGEL controlam a operação
  • RDY indica quando o ATmega está pronto para receber um comando
  • DATA são os 8 bits de dados
Nos próximos posts vamos ver com detalhes como usar a programação paralela.

Nenhum comentário: