Wenas estoy empezando a programar un atmega8 y estoy con el ADC, e exo un programa para que se encienda un led u otro dependiendo de la tension que cae a la salida de un potenciometro.
El codigo es este:
#include <avr/io.h>
#include <avr/iom8.h>
#include <util/delay.h>
# define F_CPU 1000000UL
int main(void)
{
int adc;
DDRB=0xFF;//Activo toda la parte B como salida
ADMUX=(0<<ADLAR) | (0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (0<<MUX0) | (0<<REFS1) | (1<<REFS0);
ADCSRA=(1<<ADEN) | (1<<ADPS1) | (1<<ADPS0);
while(1)
{
ADCSRA=(1<<ADSC) | (1<<ADEN);
ADC=(ADCH<<8) | ADCL; //Primero desplazo la parte alta 8 bits para ponerlo en la parte alta de ADC
if((ADCSRA & (0<<ADSC))== 0)
{
if(ADC < 614) //Vin 3V
{
PORTB=(1<<PB0);
}
else if(ADC > 614)
{
PORTB=(1<<PB1);
}
}
_delay_ms(20);
}
}
Ahora estoy intentando hacer lo mismo pero con interrupciones pero no me funciona no entra dentro de la interrupcion, el codigo es este:
#include <avr/io.h>
#include <avr/iom8.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#define F_CPU 1000000UL
int main(void)
{
DDRB=0xFF;//Activo toda la parte B como salida
ADMUX=(0<<ADLAR) | (0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (0<<MUX0) | (0<<REFS1) | (1<<REFS0);
ADCSRA=(1<<ADEN) | (1<<ADPS1) | (1<<ADPS0) | (1<<ADIE);
sei();
while(1)
{
ADCSRA=(1<<ADSC);
}
}
ISR(ADC_vect)
{
int adc;
adc=(ADCH<<8) | ADCL;
if(adc < 614) //Vin 3V
{
PORTB=(1<<PB0);
}
else if(adc > 614)
{
PORTB=(1<<PB1);
}
_delay_ms(20);
ADCSRA=(1<<ADIE) | (1<<ADIF);
}
Haber si alguien sabe porque no entra dentro de la interrupcion.
Muchas gracias por adelantado
El codigo es este:
#include <avr/io.h>
#include <avr/iom8.h>
#include <util/delay.h>
# define F_CPU 1000000UL
int main(void)
{
int adc;
DDRB=0xFF;//Activo toda la parte B como salida
ADMUX=(0<<ADLAR) | (0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (0<<MUX0) | (0<<REFS1) | (1<<REFS0);
ADCSRA=(1<<ADEN) | (1<<ADPS1) | (1<<ADPS0);
while(1)
{
ADCSRA=(1<<ADSC) | (1<<ADEN);
ADC=(ADCH<<8) | ADCL; //Primero desplazo la parte alta 8 bits para ponerlo en la parte alta de ADC
if((ADCSRA & (0<<ADSC))== 0)
{
if(ADC < 614) //Vin 3V
{
PORTB=(1<<PB0);
}
else if(ADC > 614)
{
PORTB=(1<<PB1);
}
}
_delay_ms(20);
}
}
Ahora estoy intentando hacer lo mismo pero con interrupciones pero no me funciona no entra dentro de la interrupcion, el codigo es este:
#include <avr/io.h>
#include <avr/iom8.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#define F_CPU 1000000UL
int main(void)
{
DDRB=0xFF;//Activo toda la parte B como salida
ADMUX=(0<<ADLAR) | (0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (0<<MUX0) | (0<<REFS1) | (1<<REFS0);
ADCSRA=(1<<ADEN) | (1<<ADPS1) | (1<<ADPS0) | (1<<ADIE);
sei();
while(1)
{
ADCSRA=(1<<ADSC);
}
}
ISR(ADC_vect)
{
int adc;
adc=(ADCH<<8) | ADCL;
if(adc < 614) //Vin 3V
{
PORTB=(1<<PB0);
}
else if(adc > 614)
{
PORTB=(1<<PB1);
}
_delay_ms(20);
ADCSRA=(1<<ADIE) | (1<<ADIF);
}
Haber si alguien sabe porque no entra dentro de la interrupcion.
Muchas gracias por adelantado