0 / 0 / 0
Регистрация: 28.01.2010
Сообщений: 66
1

Запись в EEPROM

01.02.2010, 03:10. Показов 14840. Ответов 7
Метки нет (Все метки)

Не могу осуществить запись в EEPROM (проверка с помощью PIC SIMULATOR IDE) под pic16f676
чтение работает, но это - слабое утешение, зато катит как доказательство ненужности включения еще одного таймера
все как в примерах из сети и в даташите
вот код под меткой записи:
WriteInstruction macro
bank1
bsf EECON1, WREN
movf MemoryCounter,w
movwf EEADR
movf CurrInstruction,w
movwf EEDATA
movlw 55H
movwf EECON2
movlw 0AAH
movwf EECON2
bsf EECON1, WR ;Все пункты выполняются
check1 btfsc EECON1, WR ;а здесь проверка на законченность записи зацикливает программу
goto check1
bank0
endm

как я определил, что запись не осуществляется:
1. бит прерывания (GIE в PIR1) не программируется
2. бит записи (WR в EECON1) не очищается, даже вручную в PicSim
Кто-нибудь знает, где я так жестоко окарал?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.02.2010, 03:10
Ответы с готовыми решениями:

Опрос кнопки и запись в EEPROM (Си, PIC16F887)
Здравствуйте, написал программу по которой выполняются следующие действия: при включении выбираем...

Запись в EEPROM
Собираю счетчик импульсов на Miko16 и нескольких индикаторах. При отключении питания надо сохранить...

Запись в EEPROM Atmega128
Добрый день! В коде ниже проблемка: записывает только один символ и все. В чем может быть...

Запись/чтение EEPROM
Первый раз столкнулся со встроенным еепромом, немного погуглил, понял что есть 3 пути работы с ним...

7
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 568
01.02.2010, 10:13 2
А errata не читал? http://ww1.microchip.com/downtoods/en/D ... 80185F.pdf Хотя там немного о другом речь, похоже..
0
0 / 0 / 0
Регистрация: 28.01.2010
Сообщений: 66
01.02.2010, 16:30 3
Цитата Сообщение от O-10
А errata не читал? http://ww1.microchip.com/downtoods/en/D ... 80185F.pdf Хотя там немного о другом речь, похоже..
В этом тексте вообще предлагают пользоваться прерываниями. Я хоть и впервые занимаюсь программированием мк, но догадываюсь в тайне, что использование прерываний тупиковый способ, и не хочу его юзать дадада

Перелопатив всю инфу в сети об EEPROM для picов, выяснились следующие временные обстоятельства моей возможной неудачи:
1. не раз упоминалось, что запись производиться довольно долго
2. на каком-то форуме нашел, что первая запись у pic16f676 холостая неизвестно почему
http://www.microchip.ru/phorum/read.php ... eply_44945

чтобы проверить обе гипотезы, я зациклил запись в eeprom на всю величину памяти и поставил максимальную скорость на симуляторе и О ЧУДО, оно заработало

Но ячейки в EEPROM Memory Editor заполняются так медленно, что я с отвращением плюнул в распечатку даташита, где указано, что данная категория мк имеет очень быструю возможность записи в eeprom.

Буду писать в такой форме, благо результирующее устройство не ограничивает меня во времени записи.
Но может быть кто-нибудь подскажет, что я не учел?
0
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 1,142
01.02.2010, 17:07 4
Цитата Сообщение от osoyd
но догадываюсь в тайне, что использование прерываний тупиковый способ, и не хочу его юзать дадада
Уууйёёё.... выпала челюсть... А впустую молотить тактами задержи это что, лучше что-ли? Больше контроллеру нечем заняться? В крайнем случае его можно отправить спать, сэкономив электроэнергию. Запись EEPROM занимает порядка миллисекунд. Быстро - 1 мс, медленно - 10 и более. Всегда писал (не пишу более вообще) в EEPROM в фоне. Самый неудобный вид памяти.

Сохраняю в EEPROM только данные первоначальной инициализации программатором. На случай если отвалится внешнее хранилище или сильно программу поменяю (съедут адреса)
0
0 / 0 / 0
Регистрация: 28.01.2010
Сообщений: 66
01.02.2010, 17:26 5
Цитата Сообщение от THI BIOST
Цитата Сообщение от osoyd
но догадываюсь в тайне, что использование прерываний тупиковый способ, и не хочу его юзать дадада
Уууйёёё.... выпала челюсть... А впустую молотить тактами задержи это что, лучше что-ли? Больше контроллеру нечем заняться?
Часы пусть будут в каждом контроллере! =))
Цитата Сообщение от THI BIOST
Запись EEPROM занимает порядка миллисекунд. Быстро - 1 мс, медленно - 10 и более. Всегда писал (не пишу более вообще) в EEPROM в фоне. Самый неудобный вид памяти.
Сохраняю в EEPROM только данные первоначальной инициализации программатором. На случай если отвалится внешнее хранилище или сильно программу поменяю (съедут адреса)
А как же быть с данными, которые нужно сохранять во время работы и регенить после включения? EEPROM ведь для этого существует, иначе зачем EEPROM доступен для прошивки в режиме защиты протекцией?
0
0 / 0 / 0
Регистрация: 28.01.2010
Сообщений: 66
01.02.2010, 17:32 6
Цитата Сообщение от THI BIOST
Цитата Сообщение от osoyd
Запись EEPROM занимает порядка миллисекунд. Быстро - 1 мс, медленно - 10 и более.
Эта фраза заставила меня пересмотреть свой код, оказывается в умопомрачительной гонке за наличием записи в память, я забыл указать обнуление 7го флага PIR1. Теперь все пишецо с ветерком =)
Всем спасибо!

WriteInstruction macro
bank1
bsf EECON1, WREN
movf MemoryCounter,w
movwf EEADR
movf CurrInstruction,w
movwf EEDATA
movlw 55H
movwf EECON2
movlw 0AAH
movwf EECON2
bsf EECON1, WR ;
check1 btfsc EECON1, WR ;
goto check1
bank0
bcf PIR1, 7 ;когда мы придем к власти, вообще все прерывания будут кастрированы на корню!))
endm
0
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 1,142
01.02.2010, 17:55 7
Цитата Сообщение от osoyd
Часы пусть будут в каждом контроллере! =))
А причём тут часы? Кнопки тоже будут заблокированы на момент записи? Ну или реакция на внешние события?

Цитата Сообщение от osoyd
А как же быть с данными, которые нужно сохранять во время работы и регенить после включения? EEPROM ведь для этого существует, иначе зачем EEPROM доступен для прошивки в режиме защиты протекцией?
Я использую внешнюю FROM. Надоели EEPROM глюки при пропадании питания на середине записи тех же установок. Да. использовал CRC. но вот что делать, если она погибла? Код инициализации писать? Уж пусть начальная инициализация тусуется в EEPROM, а из FROM восстановить пусть медленнее, зато можно писать хоть каждый чих без опасения порушить структуру данных.
0
0 / 0 / 0
Регистрация: 28.01.2010
Сообщений: 66
01.02.2010, 18:03 8
убедиль
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.02.2010, 18:03

Запись сканкодов клавиш в EEPROM
Задача: устройство на МК серии Atmega (или ATTINY) считывает сканкоды с USB клавиатуры, только...

Iar Avr 3.20c отладчик не показывает чтение/запись в Eeprom
Симулятор IAR не показывает чтение/запись в EEPROM. Из файла загружал память и вручную забивал,...

Запись в STM8 EEPROM
Переменные: #pragma location=0x004001 //stort eeprom address __no_init int16_t CorrectionValue; ...

Запись в Serial EEPROM.
Пишу в память. void LOGGER_Write(uint32_t address, uint32_t lenght, uint8_t *data) { #if...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru