Страница 1 из 1
Прерываение от аналогового компаратора
Добавлено: Пн фев 12, 2018 14:25:43
DarkWolf
Доброго времени суток, уважаемые форумчане!
Столкнулся с проблемой прерывания от аналогового компаратора AVR.
Использую в устройстве микроконтроллер 324P. Настраиваю компаратор так:
// Настраиваем порт B на вход
DDRB = 0x00;
PORTB = 0xF3; //0 в PB2, PB3
//Инициализация аналогового компаратора
// Влючаем компаратор, подключаем внутреннее опорное напряжение, включаем прерывание, прерывание по любому фронту
ACSR = (0<<ACD) | (1<<ACBG) | (0<<ACO) | (1<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
ADCSRB = (0<<ACME);
ACSR = (1<<ACI) ;
// Digital input buffer on AIN0: On
// Digital input buffer on AIN1: On
DIDR1=(1<<AIN0D) | (1<<AIN1D);
//Функция обработки прерывания
interrupt [ANA_COMP] void ana_comp_isr(void)
{
if ( (ACSR & 32) != 0)
{
AnComp = 1;
}
else
{
AnComp = 0;
}
}
Делаю все поп даташиту, но почему то прерывание не срабатывает.. Подскажите кто знает в какую сторону копать?
Re: Прерываение от аналогового компаратора
Добавлено: Пн фев 12, 2018 14:47:18
akl
Код: Выделить всё
ACSR = (0<<ACD) | (1<<ACBG) | (0<<ACO) | (1<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
ADCSRB = (0<<ACME);
ACSR |= (1<<ACI) ;
//ACSR = (1<<ACI) ;
А так?
Re: Прерываение от аналогового компаратора
Добавлено: Пн фев 12, 2018 15:06:42
DarkWolf
[uquote="akl",url="/forum/viewtopic.php?p=3307282#p3307282"]
Код: Выделить всё
ACSR = (0<<ACD) | (1<<ACBG) | (0<<ACO) | (1<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
ADCSRB = (0<<ACME);
ACSR |= (1<<ACI) ;
//ACSR = (1<<ACI) ;
А так?[/uquote]
ничего не изменилось
Re: Прерываение от аналогового компаратора
Добавлено: Пн фев 12, 2018 16:15:24
Dimon456
Это строка лишняя.
Схему подключения компаратора приведите, и, что бы десять раз не спрашивать, укажите значение опорного напряжения.
Это у вас весь код? Не вижу разрешения на обработку прерывания.
Re: Прерываение от аналогового компаратора
Добавлено: Пн фев 12, 2018 18:15:37
pavel1979
[uquote="DarkWolf",url="/forum/viewtopic.php?p=3307265#p3307265"]Доброго времени суток, уважаемые форумчане!
Столкнулся с проблемой прерывания от аналогового компаратора AVR.
Использую в устройстве микроконтроллер 324P. Настраиваю компаратор так:
// Настраиваем порт B на вход
DDRB = 0x00;
PORTB = 0xF3; //0 в PB2, PB3
//Инициализация аналогового компаратора
// Влючаем компаратор, подключаем внутреннее опорное напряжение, включаем прерывание, прерывание по любому фронту
ACSR = (0<<ACD) | (1<<ACBG) | (0<<ACO) | (1<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
ADCSRB = (0<<ACME);
ACSR = (1<<ACI) ;
// Digital input buffer on AIN0: On
// Digital input buffer on AIN1: On
DIDR1=(1<<AIN0D) | (1<<AIN1D);
//Функция обработки прерывания
interrupt [ANA_COMP] void ana_comp_isr(void)
{
if ( (ACSR & 32) != 0)
{
AnComp = 1;
}
else
{
AnComp = 0;
}
}
Делаю все поп даташиту, но почему то прерывание не срабатывает.. Подскажите кто знает в какую сторону копать?[/uquote]
ВОТ ТЫ ВАЛЕНОК...324P...
Re: Прерываение от аналогового компаратора
Добавлено: Пн фев 12, 2018 18:45:29
Dimon456
pavel1979 писал(а):ВОТ ТЫ ВАЛЕНОК...324P...
А что не так с 324Р?
Re: Прерываение от аналогового компаратора
Добавлено: Пн фев 12, 2018 20:00:29
Z_h_e
DarkWolf писал(а):но почему то прерывание не срабатывает..
Как Вы это определили и что именно имеется ввиду под "несрабатыванием"?
Что с глобальным разрешением прерываний?
Re: Прерываение от аналогового компаратора
Добавлено: Вт фев 13, 2018 00:55:05
akl
[uquote="Dimon456",url="/forum/viewtopic.php?p=3307342#p3307342"]
Это строка лишняя.[/uquote]Сброс флага для устранения предистории лишним не бывает.
Re: Прерываение от аналогового компаратора
Добавлено: Вт фев 13, 2018 08:02:59
DarkWolf
[uquote="Dimon456",url="/forum/viewtopic.php?p=3307342#p3307342"]
Это строка лишняя.
Схему подключения компаратора приведите, и, что бы десять раз не спрашивать, укажите значение опорного напряжения.
Это у вас весь код? Не вижу разрешения на обработку прерывания.[/uquote]
Разрешение на прерывание от компаратора здесь (1<<ACIE), Опорное напряжение внутреннее 1,22 подключаю здесь (1<<ACBG)
Глобальные прерывания разрешаю после инициализации.
"Не работает прерывание"
Проверял следующим образом: так как настроено на любое изменение фронта, то в функции обработки прерывания
Код: Выделить всё
interrupt [ANA_COMP] void ana_comp_isr(void)
{
if ( (ACSR & 32) != 0)
{
AnComp = 1;
}
else
{
AnComp = 0;
}
}
пробывал выводить на экран символ для проверки. Ничего не происходило.
Добавлено after 14 minutes 44 seconds:
Вот схема компаратора.
Re: Прерываение от аналогового компаратора
Добавлено: Вт фев 13, 2018 08:09:41
Z_h_e
if ( (ACSR & 32) != 0) От этого условия в прерывании то что ждете? Импульс очень короткий и переменной длины и могут быть разные результаты?
Поставте такое же условие в основной цикл и выводите этот бит на какой-нибудь порт. Проверите работает у Вас компаратор или нет , затем дальше думайте.
Re: Прерываение от аналогового компаратора
Добавлено: Вт фев 13, 2018 08:51:38
Dimon456
DarkWolf писал(а):пробывал выводить на экран символ для проверки. Ничего не происходило.
Выведите на экран значение регистров ACSR и SREG.
Там где у вас R27 R28 +9В, надеюсь при подаче +9В у вас должно происходит прерывание, а так же при снятии +9В, или у вас +9В постоянно подается?
Re: Прерываение от аналогового компаратора
Добавлено: Вт фев 13, 2018 09:27:03
Ivanoff-iv
бывает (я сталкивался) у авр если питание на компаратор идет от внутреннего опорника - надо BOD фьюзы настраивать иначе опорник не включается
Re: Прерываение от аналогового компаратора
Добавлено: Вт фев 13, 2018 10:00:36
akl
12.7.1. Voltage Reference Enable Signals and Start-up Time
The reference is on during the following situations:
1. When the BOD is enabled (by programming the BODLEVEL [2:0] Fuses).
2. When the bandgap reference is connected to the Analog Comparator (by setting the ACBG bit in
ACSR (ACSR.ACBG)).
3. When the ADC is enabled.
После включения Bandgap reference нужно выдержать start-up time порядка 100мкс...
Re: Прерываение от аналогового компаратора
Добавлено: Вт фев 13, 2018 12:02:46
DarkWolf
[uquote="Dimon456",url="/forum/viewtopic.php?p=3307753#p3307753"]
DarkWolf писал(а):пробывал выводить на экран символ для проверки. Ничего не происходило.
Выведите на экран значение регистров ACSR и SREG.
Там где у вас R27 R28 +9В, надеюсь при подаче +9В у вас должно происходит прерывание, а так же при снятии +9В, или у вас +9В постоянно подается?[/uquote]
Значение регистра ACSR = 0x48 значение регистра SREG = 0x80
+9В питание постоянное от батарейки. С помощью компаратора отслеживаю разряд батарейки.
Добавлено after 1 minute 15 seconds:
[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=3307766#p3307766"]бывает (я сталкивался) у авр если питание на компаратор идет от внутреннего опорника - надо BOD фьюзы настраивать иначе опорник не включается[/uquote]
после настройки компаратора делаю задержку 100 us, ничего не помогло..
Re: Прерываение от аналогового компаратора
Добавлено: Вт фев 13, 2018 12:09:44
Dimon456
DarkWolf писал(а):Значение регистра ACSR = 0x48 значение регистра SREG = 0x80
+9В питание постоянное от батарейки. С помощью компаратора отслеживаю разряд батарейки.
При поданном напряжении +9В значение регистра ACSR = 0x48,
при убранном напряжении +9В значение ACSR = 0x68.
Проверьте еще раз.
Re: Прерываение от аналогового компаратора
Добавлено: Вт фев 13, 2018 12:28:14
Z_h_e
На самой лапе напряжение измеряли? Может сопля какая где на плате.
Re: Прерываение от аналогового компаратора
Добавлено: Вт фев 13, 2018 12:51:13
Dimon456
А какие номиналы резисторов R27 R28?
Re: Прерываение от аналогового компаратора
Добавлено: Вт фев 13, 2018 13:17:04
Ivanoff-iv
[uquote="DarkWolf",url="/forum/viewtopic.php?p=3307843#p3307843"][uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=3307766#p3307766"]бывает (я сталкивался) у авр если питание на компаратор идет от внутреннего опорника - надо BOD фьюзы настраивать иначе опорник не включается[/uquote]после настройки компаратора делаю задержку 100 us, ничего не помогло..[/uquote] а BOD Level какой поставили? (хрен с ними, с задержками

)