Свежие обсуждения
Микроконтроллеры

Помогите настроить АЦП в Atmega

1 2 4

Спасибо за советы. Пойду пробовать

 

Вобщем сделал вот так:

ADCSRA=0x8E;
#asm("sei")
ADMUX=0b11000000;
ADCSRA|=0x60;

while(1)
{

Vizm=adc_data;
Vpr = (float) Vizm;
Vpr = Vpr * 0.03128;
Vdec = (int) Vpr;
Vpr = Vpr - (float) Vdec;
Vpr = Vpr * 1000;
Vmili = (int) Vpr;

sot=Vdec;
while (sot>=10)
{
tis++;
sot-=10;}
ed=Vmili;
while (ed>=10)
{
des++;
ed-=10;}

switch (razrad[r]) {
case 1 :
PORTD=digits[ed];
break;
case 2:
PORTD=digits[des];
break;
case 4:
PORTD=digits[sot];
PORTD.7=0;
break;
case 8:
PORTD=digits[tis];
break;
};
};
Теперь отображает но все равно не корректно
Все поперепробовал...

 

shemmer:
while (sot>=10)
{
tis++;

Перед этим надо написать tis = 0.

shemmer:
while (ed>=10)
{
des++;

Перед этим надо написать des = 0.

И я так и не вижу чем выбирается цифра. В смысле, где подаётся ноль на катод выбранного разряда ?

 

Вдогонку:
Vpr = Vpr * 1000; - надо умножать не на 1000, а на 100.

 

Подается еденичка на анод
char razrad[4]={1,2,4,8};
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{

r++;
if (r==4) {
r=0;};
PORTB=razrad[r];

}

 

Теперь подаю на вход 10 В(через делитель)
На выходе 19,54

 

Все заработало!
выставил и все пошло.
Протеус вобще был не причем
ADCSRA=0x8E;
#asm("sei")
ADMUX=0;
ADCSRA|=0x60;
Спасибо огромное AHTOXA.
Это часть моего проекта блока питания с управлением на МК

 

Интересно делаю все тоже самое для Atmega 16
и не получается

 

А до этого какой камень был?

 

Atmega8
Гы гы
был таймер выставлен TCCR0=0x03;-не работало в протеусе
поставил TCCR0=0x02-заработало