порты D b B использую для вывода на 7сегментники значение целой и дробной части напряжения, мне этого достаточно.
Но вот что то я делаю нетак, потому что рисовать он не хочет, показывает нули.
Видимо что то не правильно в функции обработки ацп, потому что если в программу с момента расчета напряжения присвоить константу, т.е. переменной u, то считает и показывает все правильно.
Вот собственно код программы:
Код: Выделить всё
#include <avr/io.h>
#include <util/delay.h>
DDRB=0b11111111;
DDRD=0b11111111;
char mas[10]={63,6,91,79,102,109,125,7,127,111};// массив кодов соответствующих цифрам на 7-ми сегментном индикаторе
unsigned int u;
float napr;
unsigned char seg1;
unsigned char seg2;
void ADC_init()
{
ADMUX = 0b11100000;//Использование внутреннего ИОНа, ADLAR=1(8 старших битов пишутся в ADCH)
ADCSRA=0b10001011;//АЦП включен,прерывание ацп разрешены, тактовая частота -/8
}
unsigned int ADC_result(void)
{
_delay_us(10);//задержка для стабилизации входного напряжения
ADCSRA|=0x40;//начинаем преобразование (ADSC = 1)
while((ADCSRA & 0x10)==0); //ждем, пока АЦП закончит преобразование (ADIF = 0)
ADCSRA|=0x10;//устанавливаем ADIF
return ADCH;// ADCH содержит значение старших 8 битов значения АЦП
}
void main (void)
{
while (1)
{
u=ADC_result;
napr=u*0,01;// Напряжение вычисляется из кода АЦП в его реальное значение
seg1=napr; //т.к. seg1- пренадлежит к типу char - отбрасывается дробная часть
seg2=((napr-seg1)*10);// Считается значение десятых долей напряжения
PORTB=mas[seg1]; //вывод целой части значения напряжения
PORTD=mas[seg2]; //вывод значения дробной части
}
}


