AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
15.01.2013, 15:35
|
|
Прописка
Регистрация: 16.03.2007
Адрес: Невинномысск, STAVROPOL REGION (26)
Сообщений: 118
Сказал спасибо: 583
Сказали Спасибо 28 раз(а) в 15 сообщении(ях)
|
Нумб вопрос про внешнюю EEPROM и AVR
Всем привет.
Боялся создавать тему в разделе, вопрос нумбский, боюсь засмеете и загрызете, но решился.
Вот разобрался более-менее с записью по шине I2C во внешнюю EEPROM AVR. Помогла статья http://avrlab.com/node/84.
Но вот незадача: на другом сайте автор по прозвищу DI-HALT пишет, что данный способ записи не самый лучший. Он предлагает не ждать, пока изменится бит в регистре TWI, а обрабатывать все (писать байты) в прерываниях от модуля TWI.
Я тут обмыслил немного, в силу своих возможностей, и решил что он в какой то степени прав. Ведь если мы будем ждать, пока модуль TWI нам изменит статус-бит, пусть даже микросекунды, теоретически же у нас может выскочить какое-нибудь прерывание (например на INT1), пока мы пишем свои байты?
Казалось бы, ну и ладно, ну произойдет прерывание, ну выполнится оно, а программа то потом вернется в свое место, откуда прервалась.
Дело в том, что я планирую в прерывании на INT1 запретить все действия, которые МК выполняет в обычном режиме, в том числе работу с EEPROM, в общем, успокоить MK, пока не выполнится другое прерывание, и только потом, спустя 10 минут после этого другого прерывания возобновить работу в обычном режиме.
В итоге, если прервется запись в EEPROM, данные будут потеряны. Это недопустимо.
Ответ - запретить прерывания на время записи своих данных.
Но мне нельзя пропускать прерывание на INT1!!!. Будет катастрофа, если его упустить...)
Замкнутый круг получается.
Что можно придумать?
|
|
|
|
15.01.2013, 16:34
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,792
Сказал спасибо: 2,912
Сказали Спасибо 3,120 раз(а) в 2,111 сообщении(ях)
|
Re: Нумб вопрос про внешнюю EEPROM и AVR.
Что такое на INT1 и почему его нельзя пропускать и зачем останавливать всю остальную программу аж на 10 минут?
Прерывания как-бы для того и сделаны, "что-бы не пропустить важного". Разрешить оба (ну или разрешить вложенные прерывания для TWI) - и дело с концом.
|
|
|
Сказали "Спасибо" ForcePoint
|
|
|
15.01.2013, 16:39
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,727
Сказал спасибо: 2,417
Сказали Спасибо 894 раз(а) в 581 сообщении(ях)
|
Re: Нумб вопрос про внешнюю EEPROM и AVR.
Создать отдельный флаг разрешения и проверять его во всех прерываниях.Пока он установлен,тело прерывания не выполняется.
|
|
|
Сказали "Спасибо" baiderin
|
|
|
15.01.2013, 17:29
|
|
Прописка
Регистрация: 16.03.2007
Адрес: Невинномысск, STAVROPOL REGION (26)
Сообщений: 118
Сказал спасибо: 583
Сказали Спасибо 28 раз(а) в 15 сообщении(ях)
|
Re: Нумб вопрос про внешнюю EEPROM и AVR.
Сообщение от baiderin
|
Создать отдельный флаг разрешения и проверять его во всех прерываниях.Пока он установлен,тело прерывания не выполняется.
|
Спасибо!
Мне сейчас, пока ездил по делам тоже пришла идея о флаге "Незавершенная запись", который ставить в начале записи данных, и сбрасывать в конце. В других процедурах обработки прерываний в первую очередь первой строчкой while (!FLAG); - Подождем, пока флаг не сбросится.
Сообщение от ForcePoint
|
Что такое на INT1 и почему его нельзя пропускать и зачем останавливать всю остальную программу аж на 10 минут?
Прерывания как-бы для того и сделаны, "что-бы не пропустить важного". Разрешить оба (ну или разрешить вложенные прерывания для TWI) - и дело с концом.
|
Нужно, это я грубо написал, на самом деле, если произойдет прерывание на INT1, то настраиваем таймер и считаем 500 тактов от внешнего генератора, при этом ничего не делая. По окончании счета - отключить таймер, настроить TWI, настроить INT1 и возобновить вычисления.
Последний раз редактировалось ArtemKolesnikov; 15.01.2013 в 17:37.
|
|
|
|
15.01.2013, 18:13
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Нумб вопрос про внешнюю EEPROM и AVR.
А зачем ждать именно 500 тактов, ни одним больше/меньше? ТВИ с его частотой 100 кГц и так довольно неторопливый, там по любому тысячи тактов будут до выхода первого байта
Программы так не пишут... Для чего именно это надо?
|
|
|
|
15.01.2013, 19:25
|
|
Прописка
Регистрация: 16.03.2007
Адрес: Невинномысск, STAVROPOL REGION (26)
Сообщений: 118
Сказал спасибо: 583
Сказали Спасибо 28 раз(а) в 15 сообщении(ях)
|
Re: Нумб вопрос про внешнюю EEPROM и AVR.
Сообщение от niXto
|
Для чего именно это надо?
|
Думаю над контроллером для теплицы, сочетающим в себе функцию сбора данных с датчиков, сохранения графика изменения данных с этих датчиков в памяти, и небольшую сигнализацию на открытие двери. Все планирую свалить на одну ATMEGA8, думаю справится.
В нормальном режиме идет сбор данных с датчиков, сохранение в памяти и при необходимости - отправка данных с помощью SIM900 (это еще обдумается). Раз в час. При открытии двери сбор данных прекращается, фиксируется событие на ИНТ1 (открытие двери), посылается байт по UART- SIM900 мне на телефон (это еще обдумается). И это состояние длится отведенное время (грубо, 500 секунд).
Думаю включать при этом еще питание видеорегистратора, у которого настроена автоматическая запись при подаче питания. Как раз на 500 секунд.
Вот такая затея. Просто дача далековато находится, 15 минут ехать, и там соседи вызывают сомнение. И мне интересно...
Последний раз редактировалось ArtemKolesnikov; 15.01.2013 в 19:28.
|
|
|
|
15.01.2013, 20:00
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Нумб вопрос про внешнюю EEPROM и AVR
Возьмите STM32F05x - стоит 1 зеленый рубль, и пишите прямо в FLASH - ее там 64 кило. Программа мало займет. Если писать 4 байта минут в 5 (а больше и чаще вряд ли понадобится) , то хватит на полмесяца 32 кб.
|
|
|
|
15.01.2013, 21:08
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Нумб вопрос про внешнюю EEPROM и AVR
Сообщение от ArtemKolesnikov
|
При открытии двери сбор данных прекращается, фиксируется событие на ИНТ1 (открытие двери), посылается байт по UART- SIM900 мне на телефон (это еще обдумается). И это состояние длится отведенное время (грубо, 500 секунд)
|
Для чего прекращать сбор данных, контроллер прекрасно сможет собирать их в фоне. Просто по прерыванию от двери пусть захватывает текущее время (пусть даже в попугаях) и сравнивает со временем предыдущего срабатывания, если прошло больше 500 с - фиксирует как новую сработку, если меньше - игнорирует
Сообщение от Boba_spb
|
Возьмите STM32F05x - стоит 1 зеленый рубль
|
Тогда лучше взять ММС-карточку на 64 МБ - стоит все тот же рубль, а памяти ещё в 2000 раз больше
|
|
|
|
15.01.2013, 21:25
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2003
Адрес: Москва
Сообщений: 2,528
Сказал спасибо: 737
Сказали Спасибо 1,927 раз(а) в 799 сообщении(ях)
|
Re: Нумб вопрос про внешнюю EEPROM и AVR
ArtemKolesnikov, у Вас соседи там со скоростью света летают, и дверь так же быстро открывается/закрывается, что надо через прерывание ловить? Вот запись в память - да, критично. И этот процесс лучше не прерывать (особенно, если на карточку писАть, как посоветовал niXto. Кстати, очень хорошая мысль. Прикрутить туда еще RTC и писать все события с нормальным временем). А если на открытие двери на 10мс позже отработает... Я думаю, нестрашно.
__________________
Опыт - это школа, в которой человек узнает, каким дураком он был раньше.
|
|
|
|
15.01.2013, 21:38
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Нумб вопрос про внешнюю EEPROM и AVR
Сообщение от niXto
|
Тогда лучше взять ММС-карточку на 64 МБ - стоит все тот же рубль, а памяти ещё в 2000 раз больше
|
Токо тут исчо 32 битный проц 48 МГц с преферией, RTC и ОЗУ на борту (Про все - просто один корпус )
В ММС то же все это появилось?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:06.
|
|