Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
21.03.2023, 23:56
|
|
Прохожий
Регистрация: 21.03.2023
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Что-то похоже переклинило. Всегда так прописывал и работало. Прошу помощи.
Код:
|
//#include ‹stdlib.h›
#include ‹avr/interrupt.h›
//#include ‹util/delay.h›
unsigned char dat;
ISR(SIG_INTERRUPT0) // прерываниe INT0
{
PORTC=PINC&0b11111110;
TCNT1=65265+dat; // диапазон 65265..65500
TIMSK|=(1‹‹TOIE1); // запуск счета TIMER1
ADCSRA|=(1‹‹ADSC); // пуск АЦП замера
}
ISR(TIMER1_OVF_vect)
{
PORTC=PINC|0b00000001;
TIMSK&=(0‹‹TOIE1); // конец счета
}
//Обработчик прерывания от АЦП
SIGNAL (SIG_ADC)
{
dat=ADCH;
if (dat›235) dat=235;
}
int main(void)
{
DDRC= 0b00000101;//
PORTC=0b00000000;//
MCUCR|=(1‹‹ISC01); //прерывание по спадающему фронту INT0
GICR|=(1‹‹INT0); //разрешение прерываний INT0
// инициализация таймера1
TCCR1B|=(1‹‹CS12); // делитель 256
TCNT1=0;
// Настройка АЦП
ADMUX= 0b01100001; //канал АЦП1, AVcc с конденсатором AREF, левое выравнивание бит
ADCSRA=0b01001100;// откл АЦП, Кд=16
sei();
while(1) {}
} |
Прошу прощения, не сообщил.
atmega8- F_CPU = 7372800
Последний раз редактировалось mike-y-k; 22.03.2023 в 00:41.
Причина: 6.6
|
|
|
|
22.03.2023, 00:14
|
|
Гражданин KAZUS.RU
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 723
Сказал спасибо: 363
Сказали Спасибо 803 раз(а) в 377 сообщении(ях)
|
Re: Не работает прерывание АЦП
1. Для запуска АЦП он (АЦП) должен быть как минимум разрешен ( установкой бита ADEN ) - проверьте по коду, что и когда заносится в регистр ADCSRA.
2. Примечание: АЦП может настраиваться на запуск преобразования по событию ("триггеру"), в том числе по External Interrupt Request 0.
3. Таки да, для ATmega8 пункт 2 неактуален.
UPD
АЦП запускается из обработчика прерывания INT0, а вызывается ли сам обработчик прерывания INT0? Чтобы исключить подобные потенциальные причины ( зависимости ), можно в качестве проверки однократно запустить преобразование АЦП в функции main() и убедиться, что прерывание АЦП вызывается ( добиться, чтобы вызывалось ).
P.S.
ИМХО лучше не смешивать макросы для определения обработчиков, а использовать что-то одно: или ISR(xxx_vect), или SIGNAL(SIG_xxx). Возможно, потребуется также объявить переменную dat как volatile.
Последний раз редактировалось j-Roger; 22.03.2023 в 01:26.
Причина: Дополнение
|
|
|
|
22.03.2023, 08:07
|
|
Прохожий
Регистрация: 21.03.2023
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Не работает прерывание АЦП
INT0 работает.
dat как volatile назначал, не помогает.
Сообщение от j-Roger
|
ISR(xxx_vect), или SIGNAL(SIG_xxx)
|
прописывал и так и так
|
|
|
|
22.03.2023, 09:13
|
|
Гражданин KAZUS.RU
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 723
Сказал спасибо: 363
Сказали Спасибо 803 раз(а) в 377 сообщении(ях)
|
Re: Не работает прерывание АЦП
Сообщение от j-Roger
|
(АЦП) должен быть как минимум разрешен ( установкой бита ADEN ) - проверьте по коду, что и когда заносится в регистр ADCSRA.
|
Сообщение от Alexander_vrn
|
ADCSRA=0b01001100;// откл АЦП, Кд=16
|
ADCSRA=0b 1xxxxxxx;
Оно?
PHP код:
|
... // Инициализация АЦП ADCSRA = 0 | (1‹‹ ADEN) // вкл. АЦП | (0‹‹ ADSC) // без запуска | (0‹‹ ADFR) // Free Running отключен | (1‹‹ ADIF) // сброс флага окончания преобразования | (1‹‹ ADIE) // разрешение прерывания | (1‹‹ ADPS2)|(0‹‹ ADPS1)|(0‹‹ ADPS0) // Кд=16 ;
|
Последний раз редактировалось j-Roger; 22.03.2023 в 10:44.
|
|
|
|
22.03.2023, 22:53
|
|
Прохожий
Регистрация: 21.03.2023
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
j-Roger
Оно. Спасибо, нашло какое-то затмение. Сколько раз прописывал АЦП, а в этот раз ни в какую.
Вообщем моя ошибка была в том, что в протеусе при симулировании на вывод микросхемы AVCC не подал питание.
Из-за этого что только не перепробовал, а схема работать не хотела.
Последний раз редактировалось mike-y-k; 22.03.2023 в 23:41.
Причина: 6.6, 7.15
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:48.
|
|