- Вложения
-
- A_STARTER.c
- (4.29 КБ) 312 скачиваний
AT90USB162 проблема с компаратором
- Сообщения: 4
- Зарегистрирован: Сб фев 09, 2013 00:33:54
Здравствуйте уважаемые КОТЫ, сразу говорю, я чайник и вот у меня какая проблема. Контроллер AT90USB162, моя цель: на AIN0 подаётся опорное напряжение в 0.4в, а напряжение на AIN1 я регулирую переменным резистором, если он меньше опорного, то светодиод горит, если больше, то не горит. Смог добиться только того, что программа срабатывает 1 раз, т.е изначально светодиод горит, я гашу его (делая AIN1 больше AIN0) а обратно зажечь не могу, Мк не реагирует на мои действия (уменьшение/увеличение напряжения на AIN1) программу пишу в CodeVisionAVR
- Реклама
ACSR=0b00011010;
замените на
ACSR=0b00011000;
замените на
ACSR=0b00011000;
only pure true norwegian blackx 
- Сообщения: 4
- Зарегистрирован: Сб фев 09, 2013 00:33:54
Поменял, не помогло (может у меня что с мк..., уже не знаю...) сделал так, теперь оно стало работать, но почему то срабатывает не каждый раз
int i;
// Analog Comparator interrupt service routine
interrupt [ANA_COMP] void ana_comp_isr(void)
{
#asm("cli")
i = i + 1;
if(i == 2)
{
i=0;
}
#asm("sei")
}
_________________
while (1)
{
if (i == 0)
{
PORTD.3 = 1;
delay_ms(100);
PORTD.3 = 0;
delay_ms(100);
}
if (i == 1)
{
PORTD.5 = 1;
delay_ms(100);
PORTD.5 = 0;
delay_ms(100);
}
}
}
int i;
// Analog Comparator interrupt service routine
interrupt [ANA_COMP] void ana_comp_isr(void)
{
#asm("cli")
i = i + 1;
if(i == 2)
{
i=0;
}
#asm("sei")
}
_________________
while (1)
{
if (i == 0)
{
PORTD.3 = 1;
delay_ms(100);
PORTD.3 = 0;
delay_ms(100);
}
if (i == 1)
{
PORTD.5 = 1;
delay_ms(100);
PORTD.5 = 0;
delay_ms(100);
}
}
}
Не знаю как в CodeVision, а в GCC надо бы i объявить как volatile.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Зачем так сложно. И sei и cli в прерывании не нужны. Состояние выхода компаратора в любой момент можно узнать, прочитав бит AC0.
Не забывайте про "дребезг" подстроечного резистора.
Не забывайте про "дребезг" подстроечного резистора.
- Реклама
- Сообщения: 4
- Зарегистрирован: Сб фев 09, 2013 00:33:54
Пробовал PORTD.3 = ACO;
ведь он либо 0 либо 1 но работать не хотело, а с volatile попробую разобраться
ведь он либо 0 либо 1 но работать не хотело, а с volatile попробую разобраться
- Сообщения: 4
- Зарегистрирован: Сб фев 09, 2013 00:33:54
Найдено - делитесь. Ваше решение возможно еще кому-нибудь сможет помочь.
only pure true norwegian blackx 


