Nesta etapa vou usar um Arduino Nano e interagir com o hardware através da interface serial. Não estou montando ainda display, botão, encoder e memória EEProm. São apenas quatro elementos na protoboard principal:
- Arduino Nano, que fará o controle da programação
- PCF8574A, expansor de I/O através do qual serão colocados os dados
- TLP521, um acoplador ótico usado para chavear os 12 volts
- Soquete ZIF onde será colocado o ATmega a ser gravado
A alimentação de 5V para o PCF8574A vem do Arduino Nano, os 12V vem de uma fonte linear simples com um regulador 78L12, montada em uma protoboard miniatura. O circuito da fonte de 12V é o seguinte:
A primeira aplicação para o Nano é um software simples para testar as conexões. Os sinais são acionados um a um a cada digitação de Enter no monitor serial da IDE do Arduino para conferência com um multímetro no soquete ZIF.
#include <Wire.h> /* * ATmegaDetonator * Teste das conexões ao ATmega que será gravado * * (C) 2020, Daniel Quadros */ // Conexões ao ATmega que será gravado const int pinVcc = 2; const int pin12V = 3; const int pinOE = 4; const int pinWR = 5; const int pinBS1 = 6; const int pinBS2 =7; const int pinXA0 = 8; const int pinXA1 = 9; const int pinPAGEL = 10; const int pinXTAL1 = 11; const int pinRdy = A3; // Endereço do PF8574A // (para PCF7584 usar 0x20) const byte PCF8574_Addr = 0x38; struct { char *nome; int pino; } conexoes[] = { { "Vcc ", pinVcc }, { "12V ", pin12V }, { "OE ", pinOE }, { "WR ", pinWR }, { "BS1 ", pinBS1 }, { "BS2 ", pinBS2 }, { "XA0 ", pinXA0 }, { "XA1 ", pinXA1 }, { "PGL ", pinPAGEL }, { "XTL1", pinXTAL1 }, { "", 0 } }; // Inicia todos os pinos como saída e nível baixo void setup() { int i = 0; while (conexoes[i].pino != 0) { pinMode(conexoes[i].pino, OUTPUT); digitalWrite(conexoes[i].pino, LOW); i++; } Wire.begin(); PCF8574_Write(0); Serial.begin(115200); Serial.println(); Serial.println("Testando!"); } // Aciona cada um dos pinos por 5 segundos void loop() { static int i = 0; static int j = 0; if (conexoes[i].pino == 0) { if (j == 8) { PCF8574_Write(0); i = j = 0; } else { PCF8574_Write(1 << j); Serial.print("D"); Serial.print(j); Serial.print("\n"); espera(); j++; return; } } Serial.print(conexoes[i].nome); digitalWrite(conexoes[i].pino, HIGH); espera(); digitalWrite(conexoes[i].pino, LOW); Serial.print("\n"); i++; } void espera() { while (Serial.read() < 0) { delay (100); } } void PCF8574_Write(byte dado) { Wire.beginTransmission(PCF8574_Addr); Wire.write(dado); Wire.endTransmission(); }
Estou colocando toda a documentação e código do projeto no github: https://github.com/dquadros/ATmegaDetonator
No próximo post vamos ver se conseguimos colocar um ATmega no modo programação.
Nenhum comentário:
Postar um comentário