#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "usart.h" // Certifique-se de que você tem o arquivo de cabeçalho da USART
#define V_REF 2.56 // Tensão de referência interna de 2,56 V
#define THRESHOLD 0.4
// Inicializa a configuração do ADC
void ADC_init() {
// Habilita o ADC, configura a referência interna de tensão (2,56 V) e a taxa de conversão
ADMUX = (1 << REFS1) | (1 << REFS0);
ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
}
// Realiza uma conversão ADC no canal especificado
uint16_t ADC_read(uint8_t channel) {
ADMUX = (ADMUX & 0xF8) | (channel & 0x07); // Seleciona o canal de entrada
ADCSRA |= (1 << ADSC); // Inicia a conversão
while (ADCSRA & (1 << ADSC)); // Aguarda a conversão ser concluída
return ADC;
}
int main(void) {
USART0_configura(); // Configura a USART0
ADC_init(); // Inicializa o ADC
uint16_t adc2_value, adc3_value;
uint16_t adc_max_difference = THRESHOLD / V_REF * 1024;
while (1) {
adc2_value = ADC_read(2); // Lê o valor do ADC no canal 2 (ADC2)
adc3_value = ADC_read(3); // Lê o valor do ADC no canal 3 (ADC3)
if (adc3_value > adc2_value + adc_max_difference) {
// A tensão em ADC3 é maior que ADC2 em pelo menos 0,4 V
USART0_transmite_string_FLASH(PSTR("Verifique tensões\n"));
}
_delay_ms(1000); // Espera 1 segundo
}
return 0;
}