ATLab сказал:
Надо было просто проверить: на АЦП подать с переменного резистора
Именно так и делал, когда с датчким не получилось.
ATLab сказал:
выводить на 2 индикатора в HEX.
У меня вывод не в HEX,десятичной форме, от 00 до 99 был сделан.
фуф, с трудами нашёл исходники
вот вывод
int dig[11]={0xc0,0xf3,0x89,0xa1,0xb2,0xa4,0x84,0xf1,0x80,0xA0,0x00};
void out1(int n);
.......
void out1(int n)
{
int h,l,kc;
CLI();
h=n/10;
l=n%10;
PORTD=0x01;
PORTB=dig[l];
for (kc=0;kc<1000;kc++);
PORTD=0x02;
PORTB=dig[h];
for (kc=0;kc<1000;kc++);
SEI();
}
Вот так вот. Хоть, наверное, и не корректно, но функцию свою выполняла, выводила от 00 до 99 всё правильно.
обработка прерывания о выполнении преобразования
value=ADCL; //Read 8 low bits first (important)
value|=(int)ADCH << 8; //read 2 high bits and shift into top byte
show=ceil(value*5*100/1023-273);
Потом происходило что-то вроде out1(show)
Вот выдержка моих рассуждений, из переписки.
Цитата
Это я для ясности написал, если можно так сказать -))
Допустим на входе ацп 2.98В. Утрируя, примем что Vref=5В. Получить
должны после преобразования 2.98*1023/5=609.708, около 610, если в десятичных.
Чтобы получить обратно напряжение крутим в обратном направлении
610*5/1023=2.98, домножим на 100- получим в кельвинах, вычтем 273-в
цельсиях, НО. Если на 100 не умножать, в переменной оказывается 2.
Вроде всё правильно, т.к. переменная Value типа int дробные
отбрасываются. Умножаем на 10, получаем 30, как не странно... вычтем
27, получим десятки градусов, выводится 3- всё врено. Если умножаем на
100, получим 298, отнимаем 273 и получаем... что-то непонятное,
по-другому сказать не могу -))). Где косяк в моих рассуждениях ?
Датчик должен был выдавать 10мв на градус, тоесть при нуле по цельсию должно было быть 10*273=2.73в
вот такой вот был затык, который так и не поборолся -(