Hemgjord 6 siffror precision termometer med Farenheit, Reamur, Kelvin och Celcius (3 / 4 steg)
Steg 3: Nästa steg är kodning detta ATMEGA128 för att läsa ADC
Jag sammanställt det med AVR Studio 6 och lagt upp på min ombord med USBASP
void adc_init()
{
Aktivera ADC, Välj ADC klocka = F_CPU / 128 (dvs. 125 kHz)
ADCSRA = (1 << ADEN | 1 << ADPS2 | 1 << ADPS1 | 1 << ADPS0);
Göra en konvertering
ADMUX = (1 << REFS0 | ADC_0); Ombyggnad på kanal 0, termistor input
Inre VCC spänning referens
ADCSRA | = (1 << ADSC); Starta konvertering
loop_until_bit_is_clear (ADCSRA, ADSC); Vänta för konvertering komplett
}
uint16_t read_adc(void)
{
ADMUX = (1 << REFS0) | (1 << ADLAR) | ADC_0; Omvandling på kanal 0, AVCC referens, 10 bitars läge
ADCSRA | = (1 << ADSC); Starta konvertering
loop_until_bit_is_clear (ADCSRA, ADSC); Vänta för konvertering komplett
Return(ADCH);
}
och konvertera resultatet till sträng, så att den kan visas på din LCD
dubbel ntc_get_temp (långa adcresistence, dubbel A, dubbel B, dubbla C)
{
använda Steinhart-Hart termistor ekvationen
temperatur (Kelvin) = 1 / (A + B*ln(R) + C*(ln(R)^3))
dubbel t;
t = log (adcresistence);
t = 1 / (A + (B * t) + (C * t * t * t));
t = -1 * (t - 273.15); konvertera Kelvin till Celcius
t = (t * 9.0) / 5.0 + 32,0; konvertera grader Celsius till Fahrenheit
returnera t;
}
om (adcA! = 0)
{
itoa(adcA,volts,5);
sprintf(volts,"ADC=%.6fmV",adcA);
lcd_string(volts);
_delay_ms(2000);
mäter temperaturen
lcd_cmd (0x80); //put markören till den första raden
_delay_ms (10).
lcd_cmd (0x01); //Clear display
adcresistance = (long)(10230000/adc_result-10000);
d = ntc_get_temp (adcresistance, (dubbel) 0.947070725e-3, (dubbel) 2.450662058e-4, (dubbel) 1.853992838e-7);
d = ntc_get_temp (adcresistance, (dubbel) 0.947070725e-3, (dubbel) 2.450662058e-4, (dubbel) 2.059992838e-7);
sprintf(tempCelcius,"temp=%.6fC",d);
Visa temp till LCD
lcd_string ("Temp värde");
lcd_cmd (0xC0); //goto andra raden
lcd_string ("värdet av PF0");
_delay_ms(100);
lcd_string(tempCelcius);
_delay_ms(3000);
}
annat
{
lcd_string ("inget resultat!");
_delay_ms(2000);
}