Преобразование температуры в напряжение в студии AVR - PullRequest
0 голосов
/ 09 мая 2018

Мне нужно написать программу на C, используя ATmega 328p, которая превращает температуру в напряжение.

Пока я сделал это:

#include <avr/io.h>
unsigned int Ctemp;
unsigned int Ftemp;

int main(void)
{

ADMUX = (1<<REFS1) | (1<<REFS0) | (0<<ADLAR) | (1<<MUX3) | (0<<MUX2) | (0<<MUX1) | (0<<MUX0);

ADCSRA = (1<<ADPS2) | (1<<ADPS1) | (1<<ADEN);

ADCSRA |= (1<<ADSC);

while ((ADCSRA & (1<<ADSC)) != 0);

while(1)
{
    ADCSRA |= (1<<ADSC);

    while ((ADCSRA & (1<<ADSC)) != 0);

    Ctemp = (ADC - 247)/1.22;
    Ftemp = (Ctemp * 1.8) + 32;
}

return 1;
}

Можете ли вы помочь мне завершить преобразование?

1 Ответ

0 голосов
/ 29 сентября 2018

С риском завышения очевидного мне кажется, что здесь есть две основные операции:

1) получить температуру 2) генерировать выходное напряжение

Похоже, что OP не столько зацикливается на числовом представлении, сколько на самом деле производит аналоговое напряжение, которое является функцией температуры, полученной на шаге 1. Это неудивительно, так как большинство микроконтроллеров (включая 328P) не имеют аналоговых выходов. Но выходы PWM доступны на 328P, поэтому очень часто просто интегрировать выход PWM, чтобы получить желаемый результат на шаге 2.

...