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

 
 
3 страниц V  < 1 2 3  
Closed TopicStart new topic
> не пишится в EEPROM данные, Реально не пишится в EEPROM данные
ae_
сообщение May 10 2007, 07:19
Сообщение #31


Участник
***

Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695



Цитата(Sholkin @ May 10 2007, 15:09) *
Здравствуйте .
Код не могу привести вставляю тут нет такого шрифта кракозябы. Предоставлю попозже.

Хорошо, я сделаю этот фрагмент за вас, без применения шрифта "кракозябры":

.DSEG
Num1: .BYTE 1
.ESEG
EENum1: .DB 0
.CSEG
;...
LDI R20, LOW(EENum1)
OUT EEARL, R20
SBI EECR, EERE
REP0:
SBIC EECR, EERE
RJMP REP0
IN R21, EEDR
STS Num1,r21

По существу:
1. Перед изменением EEARL,EEARH надо проверять бит EEWE регистра EECR, так как в текущий момент может продолжаться запись в EEPROM
2. Проверка бита EERE, по вашему мнению, видимо должна помочь определить завершение чтения из EEPROM. Интересный способ, а datasheet читать пробовали? Как там рекомендуют определять окончание чтения из EEPROM, и нужно ли это делать?

И таких моментов в вашей программе - на каждом шагу. Если вы поменяете абсолютные адреса на символьные имена регистров и битов, то подобные ошибки в программе заметно даже при беглом взгляде. А разбираться в вашем текущем исходнике - мало желающих.
Go to the top of the page
 
+Quote Post
Sholkin
сообщение May 14 2007, 22:45
Сообщение #32


Участник
*

Группа: Новичок
Сообщений: 41
Регистрация: 2-04-07
Пользователь №: 26 711



Здравствуйте .
Сейчас всё наладилось могу предоставить код
проивел в читабельный вид
Вот был такой

WRITE_EEPROM:
clr r22 ;обнуление переменной условия записи в EEPROM
ldi r20,0 ; заносим старший бит адреса EEPROM куда будем писать
OUT $1F,R20 ; заносим старший бит адреса EEPROM в 1F
ldi r20,0 ; заносим младшее значение адреса EEPROM куда будем писать
OUT $1E,R20 ; заносим младшее значение адреса EEPROM в $1E
lds r21,$60 ; заносим данные в регистр из памяти
OUT $1D,R21 ; заносим данные из регистра в EEPROM
SBI $1C,2 ; устанавливаем флаг EEWE разрешаем запись в EEPROM
SBI $1C,1 ; устанавливаем флаг EERE
WEP0:SBIC $1C,1 ; проверяем флаг записи в EEPROM
RJMP WEP0 ;
Расписал подробно в коментариях что этим хотел

Потом привёл в в такой вид

WEP3:SBIC EECR, EEWE ;проверяем флаг нет ли записи в EEPROM
RJMP WEP3

ldi VAR,0 ; заносим старший бит адреса EEPROM куда будем писать
OUT EEARH,VAR ; заносим старший бит адреса EEPROM в 1F
ldi VAR,3 ; заносим младшее значение адреса EEPROM куда будем писать
OUT EEARL,VAR ; заносим младшее значение адреса EEPROM в $1E
lds DATA,$63 ; заносим данные в регистр из памяти
OUT EEDR,DATA ; заносим данные из регистра в EEPROM
SBI EECR,EEMWE ; устанавливаем флаг EEWE разрешаем запись в EEPROM
SBI EECR,EEWE ; устанавливаем флаг EERE

Его я написал до сообщения AE . Были технические проблемы раньше не мог предоставить

По существу стал как в даташите снача проверять потом делать все изменения
Проблема осталась первые три ячейки пишет четвёртую болт. Некоторые говорят что
функцию

WEP3:SBIC EECR, EEWE ;проверяем флаг нет ли записи в EEPROM
RJMP WEP3
можно писать до изменя что и после изменения
Выше я как то писал что пробовал и так и так но если проверяю перед изменением в имуляторе нулевая ячейка памяти (когда считываю ) переписываеться на последнюю запись при записи в ЕЕПРОМ. Если проверяю у всех после изменения (код который первый в имуляторе всё окей) Но с этим как нибудь сам разберусь.
Проблема осталась почему боле трёх не пишит. У кого спрашивал те больше двух ячеек не писали сказать не могут смотрели всё правильно. Перед записью пробовал запрятить прерывания не помогло.
Воп в принципе и всё.
Кто чем может. С кодом AE по разбиралься не много его не понял
Go to the top of the page
 
+Quote Post
ae_
сообщение May 15 2007, 00:15
Сообщение #33


Участник
***

Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695



Цитата(Sholkin @ May 15 2007, 07:45) *
...
Проблема осталась почему боле трёх не пишит. У кого спрашивал те больше двух ячеек не писали сказать не могут смотрели всё правильно. Перед записью пробовал запрятить прерывания не помогло.
Воп в принципе и всё.
Кто чем может. С кодом AE по разбиралься не много его не понял

Уважаемый Sholkin !
Это не мой код, это ВАШ код (без изменений), который я привёл в читабельный вид, что бы его легче было понять мне, и, надеюсь, остальным тоже. Теперь вы сами не понимаете СВОЙ код в читабельном виде, круг замкнулся.

Вот, как написано вами:
ldi R20,0 ;чтение 1 цифры
OUT $1E,R20
SBI $1C,0
REP0:SBIC $1C,0
RJMP REP0
IN R21,$1D
sts $60,r21

Вот мой вариант:
.DSEG
Num1: .BYTE 1
.ESEG
EENum1: .DB 0
.CSEG
;...
LDI R20, LOW(EENum1)
OUT EEARL, R20
SBI EECR, EERE
REP0:
SBIC EECR, EERE
RJMP REP0
IN R21, EEDR
STS Num1,r21

Оба варианта одинаковы, но вариант с символьными именами позволяет легче обрнаружить ошибку: объясните, что делает инструкция "SBIC EECR, EERE" (SBIC $1C,0) ?
Go to the top of the page
 
+Quote Post
Sholkin
сообщение May 15 2007, 23:14
Сообщение #34


Участник
*

Группа: Новичок
Сообщений: 41
Регистрация: 2-04-07
Пользователь №: 26 711



Здраствуйте.
То что это мой код я понял . Но почему вы указываете на ошибку в чтении . А у меня не идёт запись. (ошибку там я понял кажеться на которую вы указалино чтение у меня осуществляеться) я этот блок тоже убрал оставил только записать и зажечь диод.
Go to the top of the page
 
+Quote Post
ae_
сообщение May 15 2007, 23:37
Сообщение #35


Участник
***

Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695



Цитата(Sholkin @ May 16 2007, 12:14) *
Здраствуйте.
То что это мой код я понял . Но почему вы указываете на ошибку в чтении . А у меня не идёт запись. (ошибку там я понял кажеться на которую вы указалино чтение у меня осуществляеться) я этот блок тоже убрал оставил только записать и зажечь диод.

Этот фрагмент я привёл потому, что он просто бросился в глаза явной ошибкой, хотя вы утверждаете, что в программе ошибок нет (что ж тогда она не рабоет-то?!!!). И что бы найти остальные ошибки в вашей программе, которых там якобы нет, надо переписать исходник с использованием символьных имен регистров и битов, портов в/в, переменных в пямяти ит.д. Когда будет читабельный исходник, тогда любой участник конференции сможет легко ответить на все ваши вопросы.
Go to the top of the page
 
+Quote Post
Sholkin
сообщение May 17 2007, 12:59
Сообщение #36


Участник
*

Группа: Новичок
Сообщений: 41
Регистрация: 2-04-07
Пользователь №: 26 711



Здравствуйте.
Вот этого фрагмента не достаточно

WEP3:SBIC EECR, EEWE ;проверяем флаг нет ли записи в EEPROM
RJMP WEP3

ldi VAR,0 ;заносим старший бит адреса EEPROM куда будем писать
OUT EEARH,VAR ; заносим старший бит адреса EEPROM в 1F
ldi VAR,3 ; заносим младшее значение адреса EEPROM куда будем писать
OUT EEARL,VAR ; заносим младшее значение адреса EEPROM в $1E
lds DATA,$60 ; заносим данные в регистр из памяти
OUT EEDR,DATA ; заносим данные из регистра в EEPROM
SBI EECR,EEMWE ; устанавливаем флаг EEWE разрешаем запись в EEPROM
SBI EECR,EEWE ; устанавливаем флаг EERE

Или привести весь код . Впринципе вот этот фрагмент в программе повторяеться 6 раз меняется только данные взятые из ячеек памяти
lds DATA,$60 ; заносим данные в регистр из памяти
это данные из ячеки памяти по адресу $60 пот тот же врагмент только из ячейки $61 $62 $63 ...
Go to the top of the page
 
+Quote Post
defunct
сообщение May 17 2007, 22:51
Сообщение #37


кекс
******

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



Цитата(Sholkin @ May 17 2007, 14:59) *
Вот этого фрагмента не достаточно


тут вроде бы все ок,
нехватает только cli/sei:

Код
OUT EEDR,DATA           ; заносим данные из регистра в EEPROM
cli
SBI EECR,EEMWE          ; устанавливаем флаг EEWE разрешаем запись в EEPROM
SBI EECR,EEWE             ; устанавливаем флаг EERE
sei


С записью вроде бы разобрались.
Если проблема осталась - ищите ее в чтении.
Еще, если вы оформите фрагметы записи и чтения ячейки eeprom как функции, то работать станет гораздо проще, и ошибок будет меньше.

Ниже я привожу пример записи/чтения массивов размером до 255 символов в/из eeprom. Разберитесь с этим примером.
Прикрепленные файлы
Прикрепленный файл  HelloEeprom.zip ( 3.05 килобайт ) Кол-во скачиваний: 40
 
Go to the top of the page
 
+Quote Post
Sholkin
сообщение May 23 2007, 07:26
Сообщение #38


Участник
*

Группа: Новичок
Сообщений: 41
Регистрация: 2-04-07
Пользователь №: 26 711



Привет.
Привел все как надо на выходных (часть кода приводил)ещё хуже получилось третья ечейка заглохла и вообще не чего не пишиться. Вообще не понятно стало . Чем лучше делаешь тем хуже получаеться .
Чего надо ???????????????????????? Сегодня ещё по мучаюсь не получиться приведу весь код .
Go to the top of the page
 
+Quote Post
defunct
сообщение May 23 2007, 14:47
Сообщение #39


кекс
******

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



Цитата(Sholkin @ May 23 2007, 09:26) *
Чего надо ????????????????????????

Пожалуй тут осталось только
выпить йаду и разбить голову ап стену.

удачи
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение May 23 2007, 16:03
Сообщение #40


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Ну раз уж такое здесь началось, defunct получает предупреждение, а тема закрывается как исчерпавшая себя полностью.
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3
Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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