Делаем светодиодный индикатор напряжения
Добавлено: 23 янв 2012, 09:56
Сделал 8 разрядный все прекрасно работает, захотелось 10 разрядный, подключил еще 2 светодиода к порту С на РС7 и РС6 мк atmega64 резистор на PF0 остальные светодиоды на PA0-PA7
При прокрутки резистора и при достижении порта РС7 светодиод загорается но при уменьшении он не гаснет в чем может быть проблема?
код программы:
При прокрутки резистора и при достижении порта РС7 светодиод загорается но при уменьшении он не гаснет в чем может быть проблема?
код программы:
Код: Выделить всё
/***Использование АЦП. Светодиодная шкала***/
#define F_CPU 8000000UL // 8 MHz
#include <avr/io.h>
#include <avr/delay.h>
/***Главная функция***/
int main (void)
{
DDRA = 0xFF;
PORTA = 0x00;
DDRC = 0xFF;
PORTC = 0x00;
/***Настройка АЦП***/
ADCSRA |= (1 << ADEN) //Включение АЦП
|(1 << ADPS1)|(1 << ADPS0); // предделитель преобразователя на 8
ADMUX |= (0 << REFS1)|(0 << REFS0) // внешний ИОН
|(0 << MUX0)|(0 << MUX1)|(0 << MUX2)|(0 << MUX3); // вход PF0
while(1)
{
unsigned int u;
ADCSRA |= (1 << ADSC); //Начинаем преобразование
while ((ADCSRA&(1 << ADIF))== 0); //Ждем флага окончания преобразования
u = (ADCL|ADCH << 8); // Считываем ADC
if (u > 102) //0.5V
{PORTA = (1 << PA0);}
else {PORTA &= ~(1 << PA0);}
if (u > 204) //1.0V
PORTA = (1 << PA0)|(1 << PA1);
if (u > 306) //1.5V
PORTA = (1 << PA0)|(1 << PA1)
|(1 << PA2);
if (u > 408) //2V
PORTA = (1 << PA0)|(1 << PA1)
|(1 << PA2)|(1 << PA3);
if (u > 510) //2.5V
PORTA = (1 << PA0)|(1 << PA1)
|(1 << PA2)|(1 << PA3)
|(1 << PA4);
if (u > 612) //3V
PORTA = (1 << PA0)|(1 << PA1)
|(1 << PA2)|(1 << PA3)
|(1 << PA4)|(1 << PA5);
if (u > 714) //3.5V
PORTA = (1 << PA0)|(1 << PA1)
|(1 << PA2)|(1 << PA3)
|(1 << PA4)|(1 << PA5)
|(1 << PA6);
if (u > 816) //4V
PORTA = (1 << PA0)|(1 << PA1)
|(1 << PA2)|(1 << PA3)
|(1 << PA4)|(1 << PA5)
|(1 << PA6)|(1 << PA7);
if (u > 918) { //4.5V
PORTA = (1 << PA0)|(1 << PA1)
|(1 << PA2)|(1 << PA3)
|(1 << PA4)|(1 << PA5)
|(1 << PA6)|(1 << PA7);
PORTC = (1 << PC7);
}
if (u > 1020) { //5V
PORTA = (1 << PA0)|(1 << PA1)
|(1 << PA2)|(1 << PA3)
|(1 << PA4)|(1 << PA5)
|(1 << PA6)|(1 << PA7);
PORTC = (1 << PC7)|(1 << PC6);
}
_delay_ms(30);
}
}