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