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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
berezuk.andrej
Родился
Сообщения: 7
Зарегистрирован: Пн июн 11, 2012 22:48:44

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

Сообщение berezuk.andrej »

Здравствуйте. Помогите пожалуйста разобраться.
Я только учусь програмировать микроконтролеры, и кое чего еще не понимаю.
Пишу программу для самодельного обучающегося светосинхронизатора (для одновременного срабатывания нескольких вспышек). Програму написал, засунул в 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.
Все работает так же само.
Значит я сам где то напартачил. Но где – не пойму.
Если нужно могу выложить весь код.
Подскажите пожалуйста – где я ошибся.
Заранее спасибо.
Аватара пользователя
coredumped
Опытный кот
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

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

Сообщение coredumped »

Разбираться лень, на странице 18 datasheet http://www.atmel.com/Images/doc2535.pdf есть примеры на C и ASM. Они стопицот процентов работают, лично проверял. Возьмите, скопируйте и не мучайтесь.
Все будет только лучше, в крайнем случае - хуже.
berezuk.andrej
Родился
Сообщения: 7
Зарегистрирован: Пн июн 11, 2012 22:48:44

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

Сообщение berezuk.andrej »

Так я и делал все по даташиту. Вот думаю не проглядел ли я чего то. Но уже несколько раз проверял.
Аватара пользователя
coredumped
Опытный кот
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

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

Сообщение coredumped »

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

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

Сообщение asw »

а это так и задумано - clr Temp1 ? у вас всегда нульадрес?
berezuk.andrej
Родился
Сообщения: 7
Зарегистрирован: Пн июн 11, 2012 22:48:44

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

Сообщение berezuk.andrej »

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


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

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

P.S. Сейчас попробую что то прописать в EEPROM по совету coredumped.
berezuk.andrej
Родился
Сообщения: 7
Зарегистрирован: Пн июн 11, 2012 22:48:44

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

Сообщение berezuk.andrej »

Вот только что попробовал записывать что то в EEPROM перед считыванием- не помогает. Попробовал использовать другой адрес - тоже самое.
Буду еще пробовать.
Можна будет, попробовать загнать в AVR Studio какую то чужую программу и посмотреть как отрабатывается такой код - только заведомо правильно написанный.
asw
Открыл глаза
Сообщения: 50
Зарегистрирован: Вт апр 21, 2009 18:50:14
Откуда: МО, Орехово-Зуево

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

Сообщение asw »

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
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15545
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

внимательно просмотреть руководство по симулятору/ дебаггеру (и его ограничения для соответствующего кристалла)
возможно дамп eeprom отдельно загружать надо (при программировании ИС также могут быть раздельные файлы для программы и eeprom - смотря как настроены конкретный программатор и,или среда)
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

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

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

Вернуться в «Микроконтроллеры и ПЛИС»