Paso 3: El siguiente paso es la codificación este ATMEGA128 para leer ADC
He compilado con AVR Studio 6 y subido a mi junta con USBASP
void adc_init()
{
permiten ADC, seleccione reloj del ADC = F_CPU / 128 (es decir, 125 kHz)
ADCSRA = (1 << ADEN | 1 << ADPS2 | 1 << ADPS1 | 1 << ADPS0);
Hacer una conversión
ADMUX = (1 << REFS0 | ADC_0); Conversión en el canal 0, entrada de termistor
Referencia de voltaje VCC interna
ADCSRA | = (1 << ADSC); Iniciar la conversión
loop_until_bit_is_clear (ADCSRA, ADSC); Esperar para la conversión completa
}
uint16_t read_adc(void)
{
ADMUX = (1 << REFS0) | (1 << ADLAR) | ADC_0; Conversión en el canal 0, referencia AVCC, modo de 10 bits
ADCSRA | = (1 << ADSC); Iniciar la conversión
loop_until_bit_is_clear (ADCSRA, ADSC); Esperar para la conversión completa
Return(ADCH);
}
y convertir el resultado a cadena, por lo que puede visualizarse en su pantalla LCD
ntc_get_temp doble (largo adcresistence, doble A, doble B, doble C)
{
usar la ecuación de Steinhart-Hart termistor
temperatura (Kelvin) = 1 / (A + B*ln(R) + C*(ln(R)^3))
doble t;
t = log (adcresistence);
t = 1 / (A + (B * t) + (C * t * t * t));
t = -1 * (t - 273.15); convertir de Kelvin a Celsius
t = (t * 9.0) / 5.0 + 32.0; convertir grados Celsius a Fahrenheit
devolver t;
}
Si (adcA! = 0)
{
itoa(adcA,volts,5);
sprintf(volts,"ADC=%.6fmV",adcA);
lcd_string(Volts);
_delay_ms(2000);
medir la temperatura
lcd_cmd (0 x 80); //put el cursor en la primera fila
_delay_ms (10);
lcd_cmd (0 x 01); //Clear pantalla
adcresistance = (long)(10230000/adc_result-10000);
d = ntc_get_temp (adcresistance, 0.947070725e (doble)-3, (doble) 2.450662058e-4, (doble) 1.853992838e-7);
d = ntc_get_temp (adcresistance, 0.947070725e (doble)-3, (doble) 2.450662058e-4, (doble) 2.059992838e-7);
sprintf(tempCelcius,"Temp=%.6fC",d);
temperatura de la pantalla LCD
lcd_string ("valor de la temperatura");
lcd_cmd (0xC0); //goto segunda fila
lcd_string ("valor de PF0");
_delay_ms(100);
lcd_string(tempCelcius);
_delay_ms(3000);
}
otra cosa
{
lcd_string ("ningún resultado!");
_delay_ms(2000);
}