Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Не работает прерывание АЦП

Непрочитано 21.03.2023, 23:56  
Alexander_vrn
Прохожий
 
Регистрация: 21.03.2023
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Alexander_vrn на пути к лучшему
По умолчанию

Что-то похоже переклинило. Всегда так прописывал и работало. Прошу помощи.
Код:
//#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
Alexander_vrn вне форума  
Непрочитано 22.03.2023, 00:14  
j-Roger
Гражданин KAZUS.RUN
 
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 838
Сказал спасибо: 379
Сказали Спасибо 942 раз(а) в 451 сообщении(ях)
j-Roger на пути к лучшему
По умолчанию 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. Причина: Дополнение
j-Roger вне форума  
Непрочитано 22.03.2023, 08:07  
Alexander_vrn
Прохожий
 
Регистрация: 21.03.2023
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Alexander_vrn на пути к лучшему
По умолчанию Re: Не работает прерывание АЦП

INT0 работает.
dat как volatile назначал, не помогает.

Сообщение от j-Roger Посмотреть сообщение
ISR(xxx_vect), или SIGNAL(SIG_xxx)
прописывал и так и так
Alexander_vrn вне форума  
Непрочитано 22.03.2023, 09:13  
j-Roger
Гражданин KAZUS.RUN
 
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 838
Сказал спасибо: 379
Сказали Спасибо 942 раз(а) в 451 сообщении(ях)
j-Roger на пути к лучшему
По умолчанию Re: Не работает прерывание АЦП

Сообщение от j-Roger Посмотреть сообщение
(АЦП) должен быть как минимум разрешен ( установкой бита ADEN ) - проверьте по коду, что и когда заносится в регистр ADCSRA.
Сообщение от Alexander_vrn Посмотреть сообщение
ADCSRA=0b01001100;// откл АЦП, Кд=16
ADCSRA=0b1xxxxxxx;

Оно?

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.
j-Roger вне форума  
Непрочитано 22.03.2023, 22:53  
Alexander_vrn
Прохожий
 
Регистрация: 21.03.2023
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Alexander_vrn на пути к лучшему
По умолчанию

j-Roger
Оно. Спасибо, нашло какое-то затмение. Сколько раз прописывал АЦП, а в этот раз ни в какую.

Вообщем моя ошибка была в том, что в протеусе при симулировании на вывод микросхемы AVCC не подал питание.

Из-за этого что только не перепробовал, а схема работать не хотела.

Последний раз редактировалось mike-y-k; 22.03.2023 в 23:41. Причина: 6.6, 7.15
Alexander_vrn вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
АЦП алгоритм измерения напряжения сложной формы E_C_C Микроконтроллеры, АЦП, память и т.д 70 22.10.2016 23:07
Прерывание по совпадению таймера 1 gruffi AVR 38 21.10.2016 22:58
Прерывание в прерывании или как их правильно разложить? rusyvochka PIC 20 31.05.2015 23:21
Перепайка АЦП SC7001Q в цифровом мультиметре dimkis577 Песочница (вопросы новичков) 6 24.07.2013 21:39
AtMega АЦП impuls-v Микроконтроллеры, АЦП, память и т.д 19 20.06.2011 20:12


Часовой пояс GMT +4, время: 07:28.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.