Guía de Usuario USBasp V3.0| HeTPro
tipo de dato que será, en este caso es un entero "int", enseguida se pone el nombre
de la variable y en este caso se inicializa en cero.
ADCSRA = _BV(ADEN) | _BV(ADPS2);
Ahora vemos una de las formas de manejar los registros, con el comando _BV(...) se
habilita el bit, por lo tanto el registro ADCSRA (que pertenece al ADC) se están
habilitando los bits ADEN y ADPS2 que son el enable y el preescalador2 (ver el
registro ADCSRA en la hoja de datos), de igual manera se podría haber puesto
ADCSRA=0x84 o 0b01000100.
while(1) {
ADMUX = 2;
ADCSRA |= _BV(ADSC);
Ya que hemos habilitado el ADC y ajustado el preescalador, podemos ver en el código
que entramos al ciclo principal del programa, y pasamos a escribir en el registro
ADMUX un 2, en el que le estamos indicando que tomaremos el valor del ADC desde
el pin 2 del puerto (en este caso se puso el 2 como decimal, de igual manera se pudo
haber puesto como hexadecimal 0x02 o binario 0b10). En la tercera línea del
fragmento de código se activa el bit ADSC que es el que indica que se inicia la
conversión del ADC.
while (ADCSRA & _BV(ADSC) )
Este ciclo while espera a que la conversión se haga, cuando el ADSC se deshabilita del
registro ADCSRA el ciclo while se termina. Note que el while no tiene corchetes ya
que cuando no se ponen es que se queda sin ejecutar ninguna instrucción, solamente
revisa la condición y cuando se deje de dar se sale.
ADC_Val = ADCW;
El ADCW es donde está contenido el valor de la conversión hecha por el ADC por lo
tanto simplemente lo guardamos en nuestra variable ADC_Val.
PORTB = ADC_Val>>2;
El valor guardado en nuestra variable es mostrado en el PORTB para poder
visualizarlo a través de los LED's pero hay que tener muy en cuenta que el valor de la
conversión es de 10 bits (como el ADC) y el puerto es de 8, por lo tanto desplazamos
el valor en 2 posiciones para mostrar los 8 bits mas significativos por el puerto B.
PORTD = ADC_Val & 0b11;
37