Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Тема закрыта

Attiny13: Не получается считать данные с EEPROM.

Вт июн 12, 2012 21:19:50

Здравствуйте. Помогите пожалуйста разобраться.
Я только учусь програмировать микроконтролеры, и кое чего еще не понимаю.
Пишу программу для самодельного обучающегося светосинхронизатора (для одновременного срабатывания нескольких вспышек). Програму написал, засунул в AVR Studio. Откомпилировал. Ошибок нет. Начал проверять пошагово, все вроде работает, но когда нужно считать данные с EEPROM – начинаются проблемы:
Вот этот кусок:

Использую Attiny13

clr Temp1
RJMP EERead
EERead: SBIC EECR,EEPE ; ждем разрешения чтения
RJMP EERead
OUT EEARL,Temp1 ; прописываем адрес (в Attiny13 — EEARH нет)
До сих пор все норм. А когда пытаюсь выставить бит чтения:
sbi EECR,EERE ; этот (EERE) бит не ставится, и дополнительно в регистр EEDR (в не зависимости от того что там было) ставится 0b11111111.
in Time,EEDR ;и эти же 0b11111111 естественно (а не то что там было) записывается в нужный мне регистр.

Регистр EECR в котором находится бит EERE в ATtiny13 находится по адресу 0х1С. Если я не ошибаюсь, sbi бьет до 0х1F. Эту ловушку я помню).
Но даже когда я вместо
sbi EECR,EERE
ставлю:
ldi Temp1,0b00000001
out EECR,Temp1
все работает так же как и с sbi – то есть EERE не устанавливается, и в EEDR записывается 0хFF.
Проверял написанную мною программу как на AVR Studio, так и на AVR Simulator IDE.
Все работает так же само.
Значит я сам где то напартачил. Но где – не пойму.
Если нужно могу выложить весь код.
Подскажите пожалуйста – где я ошибся.
Заранее спасибо.

Re: Attiny13: Не получается считать данные с EEPROM.

Вт июн 12, 2012 21:57:19

Разбираться лень, на странице 18 datasheet http://www.atmel.com/Images/doc2535.pdf есть примеры на C и ASM. Они стопицот процентов работают, лично проверял. Возьмите, скопируйте и не мучайтесь.

Re: Attiny13: Не получается считать данные с EEPROM.

Вт июн 12, 2012 22:00:52

Так я и делал все по даташиту. Вот думаю не проглядел ли я чего то. Но уже несколько раз проверял.

Re: Attiny13: Не получается считать данные с EEPROM.

Вт июн 12, 2012 22:46:16

Это строб-биты, ты их не увидишь, тк они сразу автоматом сбрасываются в 0
При чтении из пустой EEPROM у тебя и будут все 1 (0xFF). Ты сперва запиши что-нибудь в EEPROM, а потом считай - все должно работать.
Имей ввиду, что когда ты заливаешь прошивку в камень, выполняется Chip Erase и данные EEPROM тоже стираются. Напоминаю, стертый EEPROM содержит 0b11111111 или 0xFF! Не 0!
Может это тебя сбило с толку?

Re: Attiny13: Не получается считать данные с EEPROM.

Вт июн 12, 2012 23:05:16

а это так и задумано - clr Temp1 ? у вас всегда нульадрес?

Re: Attiny13: Не получается считать данные с EEPROM.

Ср июн 13, 2012 19:33:38

asw писал(а):а это так и задумано - clr Temp1 ? у вас всегда нульадрес?


Ну, я так понимаю, что мои данные будут занимать только одну ячейку памяти (или байт - не знаю как правильно сказать) которые будут, то стираться, то записываться вместо старых. И адрес будет одним и тем же.
В EEPROM я собираюсь записывать - сколько импульсов (предвспыхов) ведущей вспышки нужно пропустить прежде чем отработать нужное событие. Данные в EEPROM будут записываться с счетчика. И я так понимаю, что один байт с счетчика - это один адрес в EEPROM.
Или может нужно начинать записывать информацию в EEPROM не с нулевого адреса?

Если я несу бред, то подскажите пожалуйста, что нужно сделать что бы все заработало, а то я еще только учусь, и мог что то напутать.

P.S. Сейчас попробую что то прописать в EEPROM по совету coredumped.

Re: Attiny13: Не получается считать данные с EEPROM.

Ср июн 13, 2012 20:01:16

Вот только что попробовал записывать что то в EEPROM перед считыванием- не помогает. Попробовал использовать другой адрес - тоже самое.
Буду еще пробовать.
Можна будет, попробовать загнать в AVR Studio какую то чужую программу и посмотреть как отрабатывается такой код - только заведомо правильно написанный.

Re: Attiny13: Не получается считать данные с EEPROM.

Ср июн 13, 2012 20:18:56

EEPROM_write:
; Wait for completion of previous write
sbic EECR,EEPE
rjmp EEPROM_write
; Set Programming mode
ldi r16, (0<<EEPM1)|(0<<EEPM0)
out EECR, r16
; Set up address (r17) in address register
outi EEARL, 7
; Write data (r16) to data register
out EEDR,r0
; Write logical one to EEMPE
sbi EECR,EEMPE
; Start eeprom write by setting EEPE
sbi EECR,EEPE
EEPROM_write1:
sbic EECR,EEPE
rjmp EEPROM_write1
; Set up address (r17) in address register
outi EEARL, 9
; Write data (r16) to data register
out EEDR,r17
; Write logical one to EEMPE
sbi EECR,EEMPE
; Start eeprom write by setting EEPE
sbi EECR,EEPE
ret





EEPROM_read:
; Wait for completion of previous write
sbic EECR,EEPE
rjmp EEPROM_read
; Set up address (r17) in address register
outi EEARL, 7
; Start eeprom read by writing EERE
sbi EECR,EERE
; Read data from data register
in r21,EEDR
; Set up address (r17) in address register
outi EEARL, 9
; Start eeprom read by writing EERE
sbi EECR,EERE
; Read data from data register
in r17,EEDR
ret

Re: Attiny13: Не получается считать данные с EEPROM.

Ср июн 13, 2012 20:50:52

внимательно просмотреть руководство по симулятору/ дебаггеру (и его ограничения для соответствующего кристалла)
возможно дамп eeprom отдельно загружать надо (при программировании ИС также могут быть раздельные файлы для программы и eeprom - смотря как настроены конкретный программатор и,или среда)

Re: Attiny13: Не получается считать данные с EEPROM.

Ср июн 13, 2012 21:36:57

coredumped писал(а):Имей ввиду, что когда ты заливаешь прошивку в камень, выполняется Chip Erase и данные EEPROM тоже стираются.

... если только не выставлена галка EESAVE, при которой EEPROM не стирается.
Тема закрыта