/*
Exemplo de uso do Analisador Lógico Wokwi com o Franzininho
by Anderson Costa with ❤ for the Wokwi community
Documentação em Português do Analisador Lógico
https://docs.wokwi.com/pt-BR/guides/logic-analyzer
Visit https://wokwi.com to learn about the Wokwi Simulator
Visit https://franzininho.com.br to learn about the Franzininho
*/
#include <TinyDebug.h>
#define PWM_PIN 1 // Seleciona o pino para o PWM - pino físico 1 (PB1)
#define POT_PIN A0 // Pino de entrada para o potenciômetro - pino físico 4 (PB5)
const uint8_t lowerBound = 40; // Limite mínimo de 25% de uma faixa qualquer (µs)
const uint8_t upperBound = 160; // Limite máximo de 100% de uma faixa qualquer (µs)
// Obs: 1 amostra #0 de partida será capturada ao iniciar a simulação!
const uint8_t samples = 100; // Total de amostras (samples)
uint8_t bounds = 0; // Retorna o limite definido no potenciômetro
uint8_t lastBounds = 0; // Retorna o último limite definido
void setup() {
Debug.begin();
pinMode(POT_PIN, INPUT);
pinMode(PWM_PIN, OUTPUT);
bounds = 1;
digitalWrite(PWM_PIN, LOW);
Debug.println(F("Amostra #0 de partida capturada ;)"));
Debug.println(F("Ajuste o limite da borda no potenciômetro."));
}
void loop() {
// Aguarda 9 segundos para poder ajustar o potenciômetro
for (uint8_t i = 9; i > 0; i--) {
// Define os limites superior e inferior (usado apenas para demonstração)
bounds = map(analogRead(POT_PIN), 0, 1023, lowerBound, upperBound);
// Verifica mudança no ajuste
if (lastBounds != bounds) {
lastBounds = bounds;
Debug.print(F("Limite da borda definido: "));
Debug.print(bounds); // Limites em Microssegundos (µs)
Debug.println(F("µs"));
}
Debug.print(i);
Debug.println(F(" segundos para começar..."));
delay(1000);
}
Debug.println(F("Iniciando captura das amostras:"));
// Pega 100 amostras
for (uint8_t i = 0; i < samples / 2; i++) {
digitalWrite(PWM_PIN, HIGH); // Seta o sinal para nível ALTO
delayMicroseconds(bounds); // Atraso em Microssegundos (µs)
digitalWrite(PWM_PIN, LOW); // Seta o sinal para nível BAIXO
delayMicroseconds(bounds); // Atraso em Microssegundos (µs)
}
Debug.print(samples); // Total de amostras sem a de partida
Debug.println(F(" amostras capturadas a partir dos ~9 segundos.\n"));
Debug.println(F("ATENÇÃO: PARE a simulação para obter o arquivo (vcd) com as amostras.\n"));
Debug.println(F("DICA: Não esqueça de alterar o downsampling factor no PulseView para 50. "));
Debug.println(F("Infelizmente, as opções padrão geralmente fazem com que o PulseView consuma muita memória RAM e fique lento.\n"));
Debug.print(F("Saiba mais em: https://docs.wokwi.com/pt-BR/guides/logic-analyzer"));
for (;;);
}