реклама на сайте
подробности

 
 
> Не работает EEPROM меги8
oleg_lwd
сообщение May 29 2006, 09:28
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 26-10-05
Пользователь №: 10 131



При включении, выключении питания с EEPROM меги 8 либо всегда считываются все 0xFF, либо EEPROM нормально работает, т.е. считывается то, что было записано раньше. Причем, то же самое происходит уже на 3-ех изделиях. Кто нибудь сталкивался с таким? Что делать?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
defunct
сообщение May 29 2006, 12:49
Сообщение #2


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата
а работает странно, как будто бы при включении питания нет какой-то инициализации.

Конечно странно, почему вы не дожидаетесь факта помещения данных в EEDR при чтении.
нужно дождаться когда бит EERE в EECR будет сброшен, и только тогда вытаскивать данные из EEDR..


Код
.def  AL = R24
.def  AH = R25

; Read Byte from EEPROM
; --> ZL = Address of EEPROM cell
; <-- AL = value of cell EEPROM[ZL]
EEPROMReadByte:
    out   EEAR, ZL
    sbi   EECR, (EERE)
_wait_R:
    sbic  EECR, (EERE)
    rjmp  _wait_R
    in    AL, EEDR
    ret
Go to the top of the page
 
+Quote Post
bodja74
сообщение May 29 2006, 16:11
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Цитата(defunct @ May 29 2006, 15:49) *
Конечно странно, почему вы не дожидаетесь факта помещения данных в EEDR при чтении.


А это не нужно,проц сам пропускает 4 такта перед выполнением следующей команды если натыкается на EERE=1,и за один такт заносит данные в EEDR.
Реееедко ,но иногда нуно перед чтением проверять EEWE ,и то если перед чтением была команда записи в EEPROM.
Go to the top of the page
 
+Quote Post
defunct
сообщение May 29 2006, 16:44
Сообщение #4


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(bodja74 @ May 29 2006, 19:11) *
А это не нужно,проц сам пропускает 4 такта перед выполнением следующей команды если натыкается на EERE=1,и за один такт заносит данные в EEDR.


Не каждый проц такое делает. В старых (Classic) было так (из ДШ S2313):
When the EERE bit is cleared (zero) by hardware, requested data is found in the EEDR Register.

Однако я с Вами вынужден согласиться в ДШ на новые МК, в частности m8 с которым работает автор ветки, уже имеется такая информация:
The EEPROM read access takes one instruction, and the requested data is available immediately. When the EEPROM is read, the CPU is halted for four cycles before the next instruction is executed.

тем не менее приведенный выше код будет работать и на старых (classic) и на новых (mega/tiny) МК.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 18:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.014 секунд с 7
ELECTRONIX ©2004-2016