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