TODOPIC
Otros Microcontroladores / Dispositivos programables => Microcontroladores 8 bits => Mensaje iniciado por: JCAK en 07 de Junio de 2008, 16:07:32
-
Probado en un Atmega48
Para el que quiera comenzar con ADC, puede copiar esto en un WinAVR, compilarlo y ya sale andando.
Solo hacen falta un par de LED en el port B, y poner en el pin ADC0 una tensión entre 0 y 5 Volts.
#include <avr/io.h>
int main (void)
{
// Input/Output Ports initialization
// Port B initialization
DDRB |= (1<<1); //Configura el pin en modo OUT
DDRB |= (1<<2); //Configura el pin en modo OUT
// Habilita el ADC
ADCSRA |= (1<<ADEN);
// Selecciona el voltage de referencia.
// En este caso el voltage de ref es AVCC. En el pin AREF se debe coloca un capacitor de 100n a GND
ADMUX |= (0<<REFS1)|(1<<REFS0);
// Selecciona el canal de entrada
ADMUX |= (0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(0<<MUX0);
//Selecciona el valor del prescaler en 64
//Con este valor se logra una velocidad de sampleo de 125 KSPS
ADCSRA |= (1<<ADPS2)|(1<<ADPS1)|(0<<ADPS0);
// Ponemos el ADC en modo free-running para que todo el tiempo esté sampleando
ADCSRB |= (0<<ADTS2)|(0<<ADTS1)|(0<<ADTS0);
// Cambia la posición de los bits para hacer más facil la lectura, porque
// en este proyecto no se aprovechan los 10 bits y solo se leen 8
ADMUX |= (1<<ADLAR);
// Habilita el modo Auto Trigger
ADCSRA |= (1<<ADATE);
// Inicia la medición del ADC
ADCSRA |= (1<<ADSC);
for(;;) // loop forever
{
if(ADCH<128) // Girando el preset, según el valor en que se encuentre enciende un led u otro
{
PORTB |= (1<<1);
PORTB &= ~(1<<2);
}
else
{
PORTB &= ~(1<<1);
PORTB |= (1<<2);
}
}
// return 1;
}
Saludos
:-/
-
Tu codigo esta halgo largo, se puede reducir mas.