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

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

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

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

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

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

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

Ответ
Опции темы
Непрочитано 02.12.2022, 00:25   #21
pashamem7894
Частый гость
 
Регистрация: 08.11.2022
Сообщений: 22
Сказал спасибо: 5
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
pashamem7894 на пути к лучшему
По умолчанию

Signalshik2
Да, у меня выглядит код похожим образом, я у вас подсмотрел как раз изначальную настройку битов, спасибо)
Теперь разбираюсь с аналоговым компаратором

Дошёл до EEPROM ( или EE_RDY прерывание). По сути же оно срабатывает каждый раз после записи в EEPROM, поэтому мне бы просто реализовать запись, но почему-то он не видит EEMEM ( Error 1 'EEMEM' undeclared here (not in a function) C:\Users\110ak\Documents\Atmel Studio\6.2\lab4EE\lab4EE\src\main.c 9 13 lab4EE ) .
Пробовал в datasheet'е искать, не нашёл толком ничего именно по такой комбинации символов.
Реклама:

Последний раз редактировалось mike-y-k; 02.12.2022 в 01:01. Причина: 6.6, 7.15
pashamem7894 вне форума   Ответить с цитированием
Непрочитано 02.12.2022, 13:24   #22
Signalshik2
Вид на жительство
 
Аватар для Signalshik2
 
Регистрация: 11.08.2015
Сообщений: 408
Сказал спасибо: 17
Сказали Спасибо 37 раз(а) в 28 сообщении(ях)
Signalshik2 на пути к лучшему
По умолчанию Re: Реализовать 3 обработчика прерывания ATmega8(0X00E, 0X00F, 0X010)

Вот этот файл не забыли приложить:
Код:
#include ‹avr/eeprom.h›
Signalshik2 вне форума   Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Signalshik2 за это сообщение:
mike-y-k (02.12.2022), pashamem7894 (02.12.2022)
Непрочитано 02.12.2022, 15:15   #23
pashamem7894
Частый гость
 
Регистрация: 08.11.2022
Сообщений: 22
Сказал спасибо: 5
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
pashamem7894 на пути к лучшему
По умолчанию Re: Реализовать 3 обработчика прерывания ATmega8(0X00E, 0X00F, 0X010)

Signalshik2
Да уж, косяк, забыл
Теперь что-то работает, я оставил разрешение прерываний от EECR( EECR = (1‹‹EERIE) и запись в файл. По заданию мне необходимо реализовать обработчики прерываний, т.е ISR функции, а прерывание EE_RDY от EEPROM, как я прочитал, вызывается после записи в EEPROM, так я и сделал. Т.е он записывает в EEPROM, после чего вызывается прерывание, меняющие флаг, который обрабатывается уже в основном цикле, но почему-то после загорания лампочки, она не гаснет через 1,5(в коде изменено на 150 мс) с. может delay работает плохо при EEPROM , или же я ломаю EEPROM тем, что не считываю с него данные...
Но код выглядит на данный момент следующим образом:
Код:
int main (void)
{
	DDRC |=  (1‹‹0); // настройка на выход
	PORTC &= ~(1‹‹0); // ставим 0, чтоб не горела лампочка
	EECR = (1‹‹EERIE);
	
	cli();
	while(EECR & (1‹‹EEWE));
	EEAR = (unsigned char*)&c;
	EEDR = 5;
	EECR |= (1‹‹EEMWE);
	EECR |= (1‹‹EEWE);
	sei();
	EECR = (1‹‹EERIE); //убрал эту строчку UPD 14:20 мск
	board_init();
	while(1)
	{
		
		if(ee_flag==1)
		{
			PORTC |= (1‹‹0);
			ee_flag = 0;
			
			_delay_ms(150);
			PORTC &= ~(1‹‹0);
			
		}
	}
	// Insert application code here, after the board has been initialized.
}
Сама же схема выглядит слегка странновато):

Последний раз редактировалось mike-y-k; 02.12.2022 в 15:48. Причина: 7.15
pashamem7894 вне форума   Ответить с цитированием
Непрочитано 02.12.2022, 16:27   #24
Signalshik2
Вид на жительство
 
Аватар для Signalshik2
 
Регистрация: 11.08.2015
Сообщений: 408
Сказал спасибо: 17
Сказали Спасибо 37 раз(а) в 28 сообщении(ях)
Signalshik2 на пути к лучшему
По умолчанию

Сообщение от pashamem7894 Посмотреть сообщение
в коде изменено на 150 мс
- задержка небольшая, или подольше зажигайте или 1 бит навсегда зажигайте.

Я говорил замечания, Вы обещали исправить. Совершенно ничему не учитесь. Перечитывайте замечания и исправляйте снова.

Сообщение от pashamem7894 Посмотреть сообщение
Код:
DDRC |= (1‹‹0); // настройка на выход
- тут нужно = ставить.

Сообщение от pashamem7894 Посмотреть сообщение
Код:
cli();
- вначале программы флаг I равен 0. Этого не надо, короче.

Сообщение от pashamem7894 Посмотреть сообщение
Код:
sei();
- Это пораньше на 2 команды поставьте.

Сообщение от pashamem7894 Посмотреть сообщение
Код:
EECR = (1‹‹EERIE);
- тут что-то непонятное, прерывание нужно пораньше разрешать.

Сообщение от pashamem7894 Посмотреть сообщение
Код:
board_init();
- зачем вызывать библиотечную функцию, у них своя плата, а у нас своя инициализация, убрать.

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

Сообщение от Signalshik2 Посмотреть сообщение
- зачем вызывать библиотечную функцию, у них своя плата, а у нас своя инициализация, убрать.
Так, учёл ваши замечания, убрал ненужное. Но по поводу замечания по строчке "EECR = (1‹‹EERIE);" не понял. У вас в коде оно стоит закомментированное в функции определения прерываний. Вы имеете ввиду перетащить разрешение прерываний даже выше инициализации портов ввода/вывода?
А ещё по какой-то причине delay ломает прогу, вернее она виснет что ли, при delay она просто перестаёт работать и не меняет состояние лампочки:
Код:
while(1)
	{
		PORTC &= ~(1‹‹0);
		
		if(ee_flag==1)
		{
			PORTC |= (1‹‹0);
			ee_flag = 0;
			_delay_ms(15000);
			
		}
	}

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

Сообщение от pashamem7894 Посмотреть сообщение
У вас в коде оно стоит закомментированное в функции определения прерываний.
- У меня оно закомментированное, потому что по очереди прерывания проверяются, иначе каша получается.
EECR = (1‹‹EERIE); - разрешение локального прерывания по готовности EEPROM. Естественно надо, чтобы оно стояло заранее, т.е. до вот этих команд:
Код:
EECR |= (1‹‹EEMWE);
EECR |= (1‹‹EEWE);
Сообщение от pashamem7894 Посмотреть сообщение
при delay она просто перестаёт работать
- она не перестает работать, она просто отрабатывает задержку и кажется, что виснет. Особенно это проявляется в Atmel Studio, потому что там это идет очень медленно. Ищите другие пути индикации.

15 секунд это очень большая задержка для микроконтроллера, обычно не больше 100-200(мс).

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

Сообщение от Signalshik2 Посмотреть сообщение
- У меня оно закомментированное, потому что по очереди прерывания проверяются, иначе каша получается.
EECR = (1‹‹EERIE); - разрешение локального прерывания по готовности EEPROM. Естественно надо, чтобы оно стояло заранее, т.е. до вот этих команд:
Код:
EECR |= (1‹‹EEMWE);
EECR |= (1‹‹EEWE);
Это понятно, вроде так и происходит, всё работает. Спасибо
Ну а по поводу delay , буду сейчас пробовать иные формы индикации
pashamem7894 вне форума   Ответить с цитированием
Непрочитано 02.12.2022, 19:33   #28
Signalshik2
Вид на жительство
 
Аватар для Signalshik2
 
Регистрация: 11.08.2015
Сообщений: 408
Сказал спасибо: 17
Сказали Спасибо 37 раз(а) в 28 сообщении(ях)
Signalshik2 на пути к лучшему
По умолчанию Re: Реализовать 3 обработчика прерывания ATmega8(0X00E, 0X00F, 0X010)

По светодиодам: заведите глобальную переменную:
Код:
unsigned char Leds = 0;
В прерываниях нужные биты включаются, а в бесконечном цикле(while(1)) нужно поставить условия и если бит в 1, то зажечь светодиод через порт, иначе(если бит в 0), то погасить светодиод.
Signalshik2 вне форума   Ответить с цитированием
Непрочитано 04.12.2022, 16:39   #29
pashamem7894
Частый гость
 
Регистрация: 08.11.2022
Сообщений: 22
Сказал спасибо: 5
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
pashamem7894 на пути к лучшему
По умолчанию Re: Реализовать 3 обработчика прерывания ATmega8(0X00E, 0X00F, 0X010)

Сообщение от Signalshik2 Посмотреть сообщение
По светодиодам: заведите глобальную переменную:
Код:
unsigned char Leds = 0;
В прерываниях нужные биты включаются, а в бесконечном цикле(while(1)) нужно поставить условия и если бит в 1, то зажечь светодиод через порт, иначе(если бит в 0), то погасить светодиод.
понял, попробую такую реализацию

Что ж, всё получилось, задание сделано и сдано, всем спасибо, особенно Signalshik2

Последний раз редактировалось mike-y-k; 04.12.2022 в 16:57. Причина: 6.6
pashamem7894 вне форума   Ответить с цитированием
Ответ

Закладки


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

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, время: 14:19.


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