вот если я выключаю питание, и выкручиваю потенциометр, потом включаю, то он понимает значение и вращает мотор в соответствии с ним, но если плата запитана, кнопка вращения зажата или не зажата, а потенциометр вращаю, то изменения скорости не происходит.
как это поправить?
вот кусок кода:
Спойлер
Код: Выделить всё
#include <mega328p.h>
#include <delay.h>
void main(void)
{
/*** Настройка портов ***/
DDRC = 0x00; // Порт SW_rotate: PС0-SPEED. SW_push: PС1-FORWARD, PС2-BACK
PORTC |= (1 << PORTC1); // Подключаем нагрузочный резистор к PC1
//PORTC |= (1 << PORTC2); Подключаем нагрузочный резистор к PC2
DDRB = 0x00; // Порт выхода
PORTB = 0xFF; // Устанавливаем "0" на выходе
// Инициализация АЦП
ADCSRA |= (1 << ADEN) // Включение АЦП
|(1 << ADPS1)|(1 << ADPS0); // Предделитель преобразователя на 8
ADMUX |= (0 << MUX0)|(0 << MUX1)|(0 << MUX2)|(0 << MUX3) // Вход PC0
|(1<<REFS0)|(0<<REFS1); // AVcc является опорным напряжением
while (1)
{
unsigned int u,t;
ADCSRA |= (1 << ADSC); //Начинаем преобразование
while ((ADCSRA&(1 << ADIF))== 0) //Ждем флага окончания преобразования
u = (ADCL|ADCH << 8); // Считываем ADC
t = 2*u/3;
while (2)
{
if(PINC&(1 << PINC1)) // Проверяем нажатие кнопки FORWARD
{
PORTB &= ~(1 << PINB0); // Выключаем ШИМ PD1
PORTB &= ~(1 << PINB1); // Выключаем ШИМ PD1
PORTC &= ~(1 << PINC2); // Низкий уровень v_power
}
else
{
PORTB |= (1 << PINB0); // Включаем ШИМ PB1
delay_ms(t); // Задержка потенциометра мс
PORTB |= (1 << PINB1); // Включаем ШИМ PB2
delay_ms(t/2); // Задержка потенциометра мс
PORTB &= ~(1 << PINB0); // Выключаем ШИМ PB1
delay_ms(2*t); // Задержка потенциометра мс
PORTB &= ~(1 << PINB1); // Выключаем ШИМ PB2
delay_ms(3*t/2); // Задержка потенциометра мс
PORTC |= (1 << PINC2); // Высокий уровень v_power
}
}
}
}p.s. это пока отладка для одной кнопки - вперед, для кнопки - назад уже техническая формальность будет добавить.
p.s.s. пробовал зацикливать вот эту строчку: while ((ADCSRA&(1 << ADIF))== 0) //Ждем флага окончания преобразования, однако тогда программа вообще не получает значение переменной, т.к. похоже окончания преобразования не происходит.
как быть?


