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

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

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

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

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

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

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 25.11.2022, 14:13  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,953
Сказали Спасибо 1,327 раз(а) в 578 сообщении(ях)
nml на пути к лучшему
По умолчанию Re: Реализовать 3 обработчика прерывания ATmega8(0X00E, 0X00F, 0X010)

Сообщение от ForcePoint Посмотреть сообщение
Не все.
Век живи, век учись. На самом деле так. Я всегда изо всех сил старался с I2C дел не иметь, уж больно он... хитрозакрученный.

На СТМке выводил на дисплей ... один раз... даже работало
Реклама:
__________________
[ жизнь приятна и красива, если выпить литр пива ]
nml вне форума  
Непрочитано 25.11.2022, 16:26  
Signalshik2
Вид на жительство
 
Аватар для Signalshik2
 
Регистрация: 11.08.2015
Сообщений: 408
Сказал спасибо: 17
Сказали Спасибо 37 раз(а) в 28 сообщении(ях)
Signalshik2 на пути к лучшему
По умолчанию Re: Реализовать 3 обработчика прерывания ATmega8(0X00E, 0X00F, 0X010)

Сейчас работает блок AC. Рекомендую включать блоки по одному сверху вниз: ADC и EEPROM путем раскомментирования и закомментирования в функции инициализации InitPeripherals().
Вложения:
Тип файла: zip Sky.zip (189.2 Кб, 0 просмотров)
Signalshik2 вне форума  
Сказали "Спасибо" Signalshik2
pashamem7894 (02.12.2022)
Непрочитано 25.11.2022, 17:09  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,246
Сказал спасибо: 11,163
Сказали Спасибо 3,855 раз(а) в 2,926 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Реализовать 3 обработчика прерывания ATmega8(0X00E, 0X00F, 0X010)

baiderin, дабы ТС не искал где почитать https://www.elec.ru/library/info/mik...ery-avr-belov/
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Непрочитано 25.11.2022, 19:48  
baiderin
Почётный гражданин KAZUS.RU
 
Аватар для baiderin
 
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,725
Сказал спасибо: 2,425
Сказали Спасибо 894 раз(а) в 581 сообщении(ях)
baiderin на пути к лучшему
По умолчанию Re: Реализовать 3 обработчика прерывания ATmega8(0X00E, 0X00F, 0X010)

Ну,если по названию проблема найти ,то о каких прерываниях можно говорить то?
baiderin вне форума  
Непрочитано 29.11.2022, 09:29  
Sergey_57
Вид на жительство
 
Регистрация: 12.12.2012
Сообщений: 368
Сказал спасибо: 31
Сказали Спасибо 204 раз(а) в 112 сообщении(ях)
Sergey_57 на пути к лучшему
По умолчанию Re: Реализовать 3 обработчика прерывания ATmega8(0X00E, 0X00F, 0X010)

Сообщение от nml Посмотреть сообщение
Век живи, век учись. На самом деле так. Я всегда изо всех сил старался с I2C дел не иметь, уж больно он... хитрозакрученный.

На СТМке выводил на дисплей ... один раз... даже работало
В таком случае возьмите на Али логический анализатор-500р. Он поддерживает много форматов. У вас будет всё как на ладони.
С ним сделал очень много открытий. Вплоть до того , что нашёл неточности в документации на одну микросхему в своё время(TRC102).
И если про логический анализатор - Разбирался с NFC, распечатал 400 листов, перевёл, ничего не понял. Купил ардуино, подключил анализатор,
снял обмен. Через два дня у меня работала своя программа на ПИК.
Sergey_57 вне форума  
Непрочитано 01.12.2022, 00:29  
pashamem7894
Частый гость
 
Регистрация: 08.11.2022
Сообщений: 22
Сказал спасибо: 5
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
pashamem7894 на пути к лучшему
По умолчанию Re: Реализовать 3 обработчика прерывания ATmega8(0X00E, 0X00F, 0X010)

Что ж, я попробовал реализовать просто обработчик прерывания ADC, но по итогу при прерывании, у меня не срабатывает функция преревания. Что должно произойти по задумке: программа запускается, загораются лампочки с портов 0 и 2, затем, через какое-то время, adc_flag должен поменять своё значение на 1 и должны погаснуть все лампочки, кроме той, что от порта b1. Но почему-то он вооообще не заходит в функцию обработки прерывания ISR(ADC_vect). Код ниже:
Код:
#define F_CPU 1000000UL
#include ‹avr/io.h›
#include ‹util/delay.h›
#include ‹avr/interrupt.h›

volatile unsigned long adc_buffer, adc_counter;
volatile unsigned int adc_flag = 0;

ISR(ADC_vect)
{
	adc_flag = 1;
}


int main(void)
{
	sei();
	DDRB |= (1‹‹2) | (1‹‹1) | (1‹‹0); // настройка на выход
	PORTB &= ~((1‹‹2) | (1‹‹1) | (1‹‹0)); // ставим 0, чтоб не горели лампочки
	DDRC &= ~(1‹‹1); // настройка на вход 1-ый бит порта BC
	
	ADCSRA |= (1‹‹ADEN); // рарзрешение работы АЦП
	ADCSRA |= (1‹‹ADFR); // Преобразование без перерывов
	ADCSRA &= (1‹‹ADPS2);
	ADCSRA |= (1‹‹ADPS1) | (1‹‹ADPS0); // частота апц(1000000/8)
	ADMUX |= (1‹‹REFS1) | (1‹‹REFS0); //внутренний источник опорного напряжения(2,56В)
	ADMUX |= (1‹‹ADLAR);//выравнивание
	ADMUX &= ~((1‹‹MUX3) | (1‹‹MUX2)); // исп. ADC1
	ADCSRA |= (1 ‹‹ ADIE);
	
	ADCSRA |= (1‹‹ADSC); // запуск АЦП
	PORTB |= (1‹‹0);
	PORTB &= ~(1‹‹1);
	PORTB |= (1‹‹2);
	//ADC POWER CONNECTIONS
	while(1)
	{	
		
		if(adc_flag != 0)
		{
			PORTB &= ~(1‹‹0);
			PORTB |= (1‹‹1);
			PORTB &= ~(1‹‹2);
			_delay_ms(1000);
		}
		
		
	}
}

Последний раз редактировалось mike-y-k; 01.12.2022 в 01:00. Причина: code
pashamem7894 вне форума  
Непрочитано 01.12.2022, 12:32  
pashamem7894
Частый гость
 
Регистрация: 08.11.2022
Сообщений: 22
Сказал спасибо: 5
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
pashamem7894 на пути к лучшему
По умолчанию Re: Реализовать 3 обработчика прерывания ATmega8(0X00E, 0X00F, 0X010)

UPD:прога вообще не заходит в цикл while(1), но почему.. попробовал исправить int main(void) на void main(void), не помогло:
Код:
void main(void)
{
	DDRB |= (1‹‹2) | (1‹‹1) | (1‹‹0); // настройка на выход
	PORTB &= ~((1‹‹2) | (1‹‹1) | (1‹‹0)); // ставим 0, чтоб не горели лампочки
	DDRC &= ~(1‹‹1); // настройка на вход 1-ый бит порта BC
	
	ADCSRA |= (1‹‹ADEN); // рарзрешение работы АЦП
	ADCSRA |= (1‹‹ADFR); // Преобразование без перерывов
	ADCSRA &= (1‹‹ADPS2);
	ADCSRA |= (1‹‹ADPS1) | (1‹‹ADPS0); // частота апц(1000000/8)
	
	sei();
	ADMUX |= (1‹‹REFS1) | (1‹‹REFS0); //внутренний источник опорного напряжения(2,56В)
	ADMUX |= (1‹‹ADLAR);//выравнивание
	ADMUX &= ~((1‹‹MUX3) | (1‹‹MUX2) | (1‹‹MUX1)); // исп. ADC1
	ADMUX |= (1‹‹MUX0);
	ADCSRA |= (1 ‹‹ ADIE);
	
	ADCSRA |= (1‹‹ADSC); // запуск АЦП
	PORTB |= (1‹‹0);
	PORTB &= ~(1‹‹1);
	PORTB |= (1‹‹2);
	//ADC POWER CONNECTIONS
	while(1)
	{
		PORTB &= ~(1‹‹0);
		PORTB |= (1‹‹1);
		PORTB &= ~(1‹‹2);
		if(adc_flag == 1)
		{
			PORTB &= ~(1‹‹0);
			PORTB |= (1‹‹1);
			PORTB &= ~(1‹‹2);
			_delay_ms(1000);
		}
		
		
	}
}
UPD: Добавил
Код:
board_init();
перед функцией main и
Код:
#include ‹asf.h›
и теперь цикл работает снова, но по-прежнему не работает обработчик прерывания, который должен переключать флаг, чтобы далее кнопки гасли

Последний раз редактировалось pashamem7894; 01.12.2022 в 13:04.
pashamem7894 вне форума  
Непрочитано 01.12.2022, 13:19  
Signalshik2
Вид на жительство
 
Аватар для Signalshik2
 
Регистрация: 11.08.2015
Сообщений: 408
Сказал спасибо: 17
Сказали Спасибо 37 раз(а) в 28 сообщении(ях)
Signalshik2 на пути к лучшему
По умолчанию

Как кнопки могут могут погаснуть? Вы когда мыслить точнее будете?
Я написал код. Вам не надо? Вы смотрели?

Сообщение от pashamem7894 Посмотреть сообщение
unsigned long, unsigned int
- Зачем такие большие типы? Вы почитайте сначала какую емкость в памяти они занимают.
Для adc_flag и unsigned char хватит, а потом и на биты надо переходить.

Сообщение от pashamem7894 Посмотреть сообщение
sei();
- установка глобальных прерываний не здесь устанавливается, а после настройки всей периферии. А в некоторых случаях(EEPROM) и еще дальше.

Сообщение от pashamem7894 Посмотреть сообщение
Код:
ADCSRA |= (1‹‹ADEN);  //рарзрешение работы АЦП
ADCSRA |= (1‹‹ADFR);  // Преобразование без перерывов
- эти 2 команды нужно писать в 1 строку, т.к. преобразование еще не начато. А потом уже устанавливать SC(Start Conversion).

Код:
ADMUX &= ~((1‹‹MUX3) | (1‹‹MUX2) | (1‹‹MUX1)); // исп. ADC1
ADMUX |= (1‹‹MUX0);
- Не надо писать по 10 раз: сначала что-то там стираем, потом опять записываем и т.д. Операция присвоения и ставите где 1 и все.
Сообщение от pashamem7894 Посмотреть сообщение
Код:
PORTB |= (1‹‹0);
PORTB &= ~(1‹‹1);
PORTB |= (1‹‹2);
- Без задержек ничего видно не будет.

Схема нарисована неправильно. Проводники должны быть покороче, используйте метки(по Proteus тут есть документация). Для АЦП нужно использовать потенциометр, используйте порт POWER. Вольтметр попроще там есть.

Сообщение от pashamem7894 Посмотреть сообщение
Код:
PORTB &= ~(1‹‹0);
PORTB |= (1‹‹1);
PORTB &= ~(1‹‹2);
if(adc_flag == 1)
{
    PORTB &= ~(1‹‹0);
    PORTB |= (1‹‹1);
    PORTB &= ~(1‹‹2);
- В чем здесь разница кода? Надо было сделать разную светодиодную индикацию.

Последний раз редактировалось mike-y-k; 01.12.2022 в 14:22. Причина: 6.6
Signalshik2 вне форума  
Непрочитано 01.12.2022, 13:58  
pashamem7894
Частый гость
 
Регистрация: 08.11.2022
Сообщений: 22
Сказал спасибо: 5
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
pashamem7894 на пути к лучшему
По умолчанию Re: Реализовать 3 обработчика прерывания ATmega8(0X00E, 0X00F, 0X010)

Сообщение от Signalshik2 Посмотреть сообщение
Как кнопки могут могут погаснуть? Вы когда мыслить точнее будете?
Я написал код. Вам не надо? Вы смотрели?
Я даже не заметил его.. просто после моих сообщений я некоторое время делал другое задание, а когда пришёл, были какие-то споры по теме, ну я и не прочитал... Извиняюсь. Огромное спасибо. Я попробую осмыслить, как тут и что работает, это явно поможет, ну и ошибки исправлю, чтоб знать, которые вы выше написали.
pashamem7894 вне форума  
Непрочитано 01.12.2022, 15:21  
Signalshik2
Вид на жительство
 
Аватар для Signalshik2
 
Регистрация: 11.08.2015
Сообщений: 408
Сказал спасибо: 17
Сказали Спасибо 37 раз(а) в 28 сообщении(ях)
Signalshik2 на пути к лучшему
По умолчанию Re: Реализовать 3 обработчика прерывания ATmega8(0X00E, 0X00F, 0X010)

Вот так должно быть.
В прерывания заходит, в цикл заходит.
Код:
#define F_CPU 1000000
#include ‹asf.h›
#include ‹avr/io.h›
#include ‹avr/iom8.h›
#include ‹avr/interrupt.h›
#include ‹util/delay.h›
#include ‹avr/eeprom.h›

uint8_t c EEMEM;
volatile unsigned long adc_buffer, adc_counter;
volatile unsigned char adc_flag = 0;

ISR(ADC_vect)
{
	adc_flag = 1;
}

int main(void)
{
	DDRB = (1‹‹2) | (1‹‹1) | (1‹‹0); // настройка на выход
	
	//рарзрешение работы АЦП
	//Преобразование без перерывов
	ADCSRA = (1‹‹ADEN)|(1‹‹ADFR)|(1‹‹ADIE);
	//внутренний источник опорного напряжения(2,56В)
	//выравнивание
	ADMUX = (1‹‹REFS1)|(1‹‹REFS0)|(1‹‹ADLAR)|(1‹‹MUX0);
	sei();
	
	ADCSRA |= (1‹‹ADSC); //запуск АЦП
	while(1)
	{
		//101
		PORTB |= (1‹‹0);
		PORTB &= ~(1‹‹1);
		PORTB &= ~(1‹‹2);
		if(adc_flag == 1)
		{
			PORTB &= ~(1‹‹0);
			PORTB |= (1‹‹1);
			PORTB &= ~(1‹‹2);
			_delay_ms(100);
		}
	}
}
Signalshik2 вне форума  
Сказали "Спасибо" Signalshik2
mike-y-k (01.12.2022)
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
STM32F4 discovery не срабатывают прерывания по I2C Kopranych ARM 10 29.11.2016 20:56
AT89C5131 прием и передача данных по USB rihkov AVR 14 15.11.2012 08:16
Вход в прерывания для PIC микроконтроллеров dimmich Микроконтроллеры, АЦП, память и т.д 4 06.12.2009 17:17


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot