АвторСообщение



Пост N: 42
Зарегистрирован: 26.12.06
Откуда: Одесса
Рейтинг: 0
ссылка на сообщение  Отправлено: 24.01.07 12:08. Заголовок: EEPROM не просматривается


Нет возможности видеть изменение регистров в пошаговом режиме.
Эту возможность, что, упразднили в новых версиях?
Потерял кучу времени с разбирательствами записи - чтения EEPROM, и
все бестолку, пока не поставил MPLAB 5.7.40, в нем все работает.
Может чего-то недовключил, хотя весь ХЕЛП перевернул???

Я не МАГ, я только учусь. Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 55 , стр: 1 2 All [только новые]


постоянный участник




Пост N: 144
Зарегистрирован: 26.12.06
Откуда: Санкт-Ленинград
Рейтинг: 0
ссылка на сообщение  Отправлено: 24.01.07 16:57. Заголовок: Re:


А что за чип?
На 628 у меня всё просматривалось в 7-й. Хотя не очень понял, Вас сами ячейки EEPROM интересуют, или регистры работы с EEPROM?

Obligatus Servus Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 44
Зарегистрирован: 26.12.06
Откуда: Одесса
Рейтинг: 0
ссылка на сообщение  Отправлено: 24.01.07 17:15. Заголовок: Re:


Dmitry Dubrovenko пишет:

 цитата:
Вас сами ячейки EEPROM интересуют


Ну да, ни какой реакции при записи, хотя чтение проходит нормально.
Вот, только не понял,
что за задержка?
Она нужна в симуляторе, или и в реальной программе?

Я не МАГ, я только учусь. Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 86
Зарегистрирован: 22.12.06
Откуда: Россия, Воркута
Рейтинг: 0
Фото:
ссылка на сообщение  Отправлено: 24.01.07 20:47. Заголовок: Re:


vintik пишет:

 цитата:
Нет возможности видеть изменение регистров в пошаговом режиме.


У меня такая же проблема, до версии 6.62, а после нет и именно в пошаговом режиме.

Roslik Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 46
Зарегистрирован: 26.12.06
Откуда: Одесса
Рейтинг: 0
ссылка на сообщение  Отправлено: 24.01.07 21:04. Заголовок: Re:


Уже просимил все, пауза действительно должна быть в районе 5мс,
для завершения записи в EEPROM, и увидеть это можно по флагу EEIF
рег.PIR1 , отвечающего за окончание записи. Ну и потом его опускать
программно (для 628пика).
Архивчик с проектом

Я не МАГ, я только учусь. Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 147
Зарегистрирован: 26.12.06
Откуда: Санкт-Ленинград
Рейтинг: 0
ссылка на сообщение  Отправлено: 25.01.07 00:59. Заголовок: Re:


Вот кусок кода записи в EEPROM в 628. После записи, прверяется правильность, и повторная попытка записи, если несоответствие. Количество попыток посчитывается специальной ПП, которая при исчерпании лимита, останавливает работу МК и даёт сигнал (самой ПП в данном коде нет).

            movlw	.10         ; Загрузка константы кол-ва ошибок записи 
movwf TIMEL
bsf STATUS,RP0 ; Переход в банк 1
wrterr call eprver ; Вызов пп подсчёта неудачных попыток записи в EEPROM
movlw .0 ; Запись адреса ячейки памяти
movwf EEADR ; ------------""--------------

movf CYCINV,W ; Запись нового числа в ячейку EEPROM
movwf EEDATA ; -------------""---------------

bsf EECON1,WREN ; Разрешить запись

bcf STATUS,RP0 ; Переход в банк 0
bcf PIR1,EEIF ; Сбросить флаг прерывания по окончании записи в EEPROM
bsf STATUS,RP0 ; Переход в банк 1

movlw 55h ; Обязательная
movwf EECON2 ; процедура
movlw 0AAh ; при записи
movwf EECON2 ; ----"----
bsf EECON1,WR ; ----"----

bcf STATUS,RP0 ; Переход в 0-й банк.
wrt btfss PIR1,EEIF ; Проверка флага прерывания по окончании записи в EEPROM
goto wrt ; Если поднялся, то программа исполняется далее.
bsf STATUS,RP0 ; Переход в 1-й банк.
bcf EECON1,WREN ; Запрет записи.

movf EEDATA,W ; Чтение записываемых данных, для проверки

bsf EECON1,RD ; Инициализировать чтение
subwf EEDATA,W ; Проверка записанных данных
btfss STATUS,Z ;
goto wrterr ;

bcf PIR1,EEIF ; Сбросить флаг прерывания по окончании записи в EEPROM



Obligatus Servus Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 48
Зарегистрирован: 26.12.06
Откуда: Одесса
Рейтинг: 0
ссылка на сообщение  Отправлено: 25.01.07 09:28. Заголовок: Re:


Dmitry Dubrovenko пишет:

 цитата:
Вот кусок кода


Вотэто совсем другой компот, а то постоянно "колесо" приходится изобретать
Теперь есть от чего стартонуть

Я не МАГ, я только учусь. Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 1
Зарегистрирован: 01.02.07
Рейтинг: 0
ссылка на сообщение  Отправлено: 01.02.07 22:52. Заголовок: EEPROM память данных


Здравствуйте. Я недавно занимаюсь PICами и возник вопрос по поводу записи в EEPROM
память данных. В своей программе я несколько раз подряд вызываю процедуру записи данных в память
по последовательно возрастающим адресам.После отработки программы читаю программатором содержимое
памяти данных. Там записана только одна (первая) ячейка. В чем проблема, может кто подскажет?
Ниже привожу фрагмент программы:
................................
clrf Temp
call EEPROM
call EEPROM
call EEPROM
call EEPROM
call EEPROM
call EEPROM
call EEPROM
call EEPROM
.................................
EEPROM bcf Intcon,GIE
movf Temp
movwf EEAdr
movwf EEData
bsf Status,RP0
bsf EECon1,2
movlw 055h
movwf EECon2
movlw 0AAh
movwf EECon2
bsf EECon1,1
bcf EECon1,4
bcf Status,RP0
incf Temp,F
return

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 1
Зарегистрирован: 25.12.06
Откуда: Россия, Липецк
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.02.07 00:15. Заголовок: Re:


Все очень просто: для записи байта необходимо время (и не малое), а у Вас идет "потоковая" запись без задержек после отработок процедур записи, и поэтому 1-й байт будет писаться все время этой "потоковой" записи, блокируя тем самым запись последующих байтов.
Для устранения этого недоразумения нужно либо сформировать в конце процедуры записи (каждого байта) фиксированную задержку миллисекунд эдак на 5 (возможно и меньше, зависит от конкретного типа ПИКа. Под это дело, в нем имеется низкостабильный, внутренний RC генератор, так что "разбросы" будут), либо применить "плавающую" задержку на основе анализа состояний флага окончания записи, что является самым лучшим вариантом (запись будет происходить быстрее, надежнее и количество команд минимально).
Все это подробно расписано в "Самоучителе...".
Корабельников Е.А.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1
Зарегистрирован: 01.12.08
Откуда: Киргизия, Бишкек
Рейтинг: 0
ссылка на сообщение  Отправлено: 09.01.09 07:30. Заголовок: EEPROM


Здравствуйте, участники форума. Я еще не фокусник я только учусь.
Поэтому не судите строго если что не так. Вот какая проблема запускаю в симуляторе
Файл из самоучителя eeprom_a и не наблюдаю изменения ячейки по адресу 02Н
И что характерно, что в версии MPLAB 5.70 все работает нормально, а вот в версиях MPLAB 7.42 и
MPLAB 7.10 нет.
У меня вопрос, это какой то глюк MPLAB более поздних версий программы или нужно где-то изменить настройки?


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 542
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг: 1
Фото:
ссылка на сообщение  Отправлено: 09.01.09 09:10. Заголовок: А конкретнее можно ч..


А конкретнее можно что именно не работает? Лично у меня все работает...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 2
Зарегистрирован: 01.12.08
Откуда: Киргизия, Бишкек
Рейтинг: 0
ссылка на сообщение  Отправлено: 09.01.09 12:01. Заголовок: Можно и конкретно. Р..


Можно и конкретно. Разбирался с процедурой записи в EEPROM в симуляторе.
При пошаговом исполнении все проходит нормально число 65Н читается, далее увеличивается на единицу походит обязательная процедура записи, а вот в ячейки 02h (окно EEPROM) число. Как было 65Н так и остается. Хотя если в ручную изменить число в ячейки то при с следующем круге
Это число считывается, инкрементируется, проходит процедура записи но в самой ячейки остается тоже самое число которое было установлено .
Я несколько раз переустанавливал программу MPLAB то одной версии то другой и пробовал на трех разных компьютерах эффект один и тот же. За исключением версии 5.70 в ней все без проблем с каждым кругом число увеличивается.




Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 858
Зарегистрирован: 26.12.06
Откуда: Россия, Заозерск, Мурманской обл.
Рейтинг: 3
ссылка на сообщение  Отправлено: 09.01.09 12:20. Заголовок: Игорь, приведите кус..


Игорь, приведите кусок кода, который Вы используете. Телепатов, увы, здесь нет.

Удивление рождает жажду познания... Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 3
Зарегистрирован: 01.12.08
Откуда: Киргизия, Бишкек
Рейтинг: 0
ссылка на сообщение  Отправлено: 09.01.09 12:25. Заголовок: Файл из самоучителя ..


Файл из самоучителя (eeprom_a)
Чтение данных из EEPROM
;=============================================================================================== 
; Считывание содержимого байта с адресом 02h и запись его в регистр общего назначения Registr.
;-----------------------------------------------------------------------------------------------
bcf Status,RP0 ; Переход в нулевой банк.

movlw 2 ; Записать в регистр W константу 02h.
movwf EEAdr ; Скопировать 02h из регистра W в регистр EEAdr.

bsf Status,RP0 ; Переход в первый банк.
bsf EECon1,0 ; Инициализировать чтение.
bcf Status,RP0 ; Переход в нулевой банк.

movf EEData,W ; Скопировать число из ячейки EEPROM с адресом 02h в регистр W.
movwf Registr ; Скопировать число из регистра W в регистр Registr.
;-----------------------------------------------------------------------------------------------
; Изменение содержимого регистра Registr.
;-----------------------------------------------------------------------------------------------
incf Registr,F ; Увеличить на 1 содержимое регистра Registr с
; сохранением результата в нем же.
;===============================================================================================
; Запись данных в EEPROM.
;===============================================================================================
; Запись содержимого регистра Registr в ячейку EEPROM с адресом 02h.
;-----------------------------------------------------------------------------------------------
bcf Intcon,GIE ; Глобальный запрет прерываний.

movlw 2 ; Записать в регистр W константу 02h.
movwf EEAdr ; Скопировать константу 02h из регистра W в регистр EEAdr.

movf Registr,W ; Скопировать число из регистра Registr в регистр W.
movwf EEData ; Скопировать число из регистра W в ячейку EEPROM с адресом 02h.

bsf Status,RP0 ; Переход в первый банк.
bsf EECon1,2 ; Разрешить запись.

movlw 055h ; Обязательная
movwf EECon2 ; процедура
movlw 0AAh ; при записи.
movwf EECon2 ; ----"----
bsf EECon1,1 ; ----"----

bcf EECon1,4 ; Сбросить флаг прерывания по окончании записи в EEPROM.
bcf Status,RP0 ; Переход в нулевой банк.
goto START ; Переход на новый цикл программы.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 859
Зарегистрирован: 26.12.06
Откуда: Россия, Заозерск, Мурманской обл.
Рейтинг: 3
ссылка на сообщение  Отправлено: 09.01.09 13:10. Заголовок: А где проверка оконч..


А где проверка окончания записи? Найдите отличия...

;*********************************************************************************************** 
list p=16F84a ; Используется PIC16f84A
#include <p16F84A.inc> ; Файл, описывающий специфические переменные,
; соответствующие процессору
__CONFIG 03FF1H ; WDT выключен, бит защиты не установлен
;***********************************************************************************************
CBLOCK 10H
Registr
ENDC
;***********************************************************************************************
ORG 0x000
goto START
;***********************************************************************************************
; Считывание содержимого байта с адресом 02h и запись его в регистр общего назначения Registr.
;***********************************************************************************************
START movlw 2 ; Записать в регистр W константу 02h.
movwf EEADR ; Скопировать адрес из w в EEADR
bsf STATUS, RP0 ; 1-й банк
bsf EECON1, RD ; Инициализация чтения
bcf STATUS, RP0 ; 0-й банк
movf EEDATA, w ; Скопируем данные из ячейки EEPROM в w
movwf Registr ; Скопировать число из регистра W в регистр Registr.
;***********************************************************************************************
; Изменение содержимого регистра Registr.
;***********************************************************************************************
incf Registr, f ; Увеличить на 1 содержимое регистра Registr с
; сохранением результата в нем же.
;***********************************************************************************************
; Запись данных в EEPROM.
;***********************************************************************************************
; Запись содержимого регистра Registr в ячейку EEPROM с адресом 02h.
;***********************************************************************************************
bcf INTCON, GIE ; Глобальный запрет прерываний.
movlw .2 ; Записать в регистр W константу 02h.
movwf EEADR ; Скопировать константу 02h из регистра W в регистр EEAdr.
movf Registr, w ; Скопировать число из регистра Registr в регистр W.
movwf EEDATA ; Копируем из w данные в ячейку EEPROM с адресом Temp
bsf STATUS, RP0 ; 1-й банк
bsf EECON1, WREN ; Разрешение записи
movlw 55H ; стандартная
movwf EECON2 ; процедура
movlw 0AAH ; при
movwf EECON2 ; записи
bsf EECON1, WR ; Инициализация записи
WR_END btfss EECON1, EEIF ; Запись завершена?
goto WR_END ; Нет, ждёмс...
bcf EECON1, EEIF ; Да, сброс флага записи данных
bcf STATUS, RP0 ; 0-й банк
goto START ; Переход на новый цикл программы.
;***********************************************************************************************
END


Удивление рождает жажду познания... Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 543
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг: 1
Фото:
ссылка на сообщение  Отправлено: 09.01.09 20:06. Заголовок: Да, нет проверки око..


Да, нет проверки окончания записи! Он просто тупо еще пишет, ждите. Видимо в старой версии это не учтено. Посмотрите в даташите сколько идет запись, это конечная величина...
Так можно делать только если гарантировано в основном теле программы будет проходить больше времени перед следующей записью в память.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1104
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг: 3

Награды: Отлично!',
ссылка на сообщение  Отправлено: 09.01.09 20:22. Заголовок: RW1ZK пишет: где пр..


RW1ZK пишет:

 цитата:
где проверка окончания записи


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

Не ошибается только тот, кто ничего не делает. Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 860
Зарегистрирован: 26.12.06
Откуда: Россия, Заозерск, Мурманской обл.
Рейтинг: 3
ссылка на сообщение  Отправлено: 09.01.09 21:48. Заголовок: Alberto пишет: толь..


Alberto пишет:

 цитата:
только ее лучше перед процедурой записи поставить, т.е. перед началом записи проверить закончилась ли предыдущая запись.



PIC16F84A datasheet п9.2 (DS35007B-page54) DC Characteristics D122: TDEW - Erase/Write cycle time от 4 до 8 ms... А если это первая, или единственная запись? Как убедиться, что данные записаны?

Удивление рождает жажду познания... Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1105
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг: 3

Награды: Отлично!',
ссылка на сообщение  Отправлено: 09.01.09 23:37. Заголовок: RW1ZK пишет: А если..


RW1ZK пишет:

 цитата:
А если это первая, или единственная запись?


если запись первая и единственная, то флаг окончания записи будет выставлен по умолчанию, т.к. записи-то небыло (если интересно проверьте в реальном уст-ве).

 цитата:
Как убедиться, что данные записаны?


а как убедиться что данные записаны правильно? Точно так и здесь: считать данные. Ведь программа что-то еще делает, пусть занимается своими делами (например 0,02 сек), а потом проверит пправильно ли данные записались. А в конкретном, приведенном выше, случае данные увеличивались и пересохранялись. Вот для такого случая множественного сохранения и лучше ставить проверку на окончание записи до, а не после, так как если проверка стоит после команды записи, то мы гарантированно теряем 4-8 мсек (4000-8000 команд), а в случае записи-занятие своими делами-проверка окончания записи-записи- и т.д. такие потери времени сильно уменьшаются. А вообще-то, в каждом конкретном случае нужно смотреть как лучше.

Не ошибается только тот, кто ничего не делает. Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 862
Зарегистрирован: 26.12.06
Откуда: Россия, Заозерск, Мурманской обл.
Рейтинг: 3
ссылка на сообщение  Отправлено: 09.01.09 23:53. Заголовок: Alberto пишет: если..


Alberto пишет:

 цитата:
если запись первая и единственная, то флаг окончания записи будет выставлен по умолчанию, т.к. записи-то небыло (если интересно проверьте в реальном уст-ве).


Не понял... Что значит небыло записи?

Alberto пишет:

 цитата:
А в конкретном, приведенном выше, случае данные увеличивались и пересохранялись. Вот для такого случая множественного сохранения и лучше ставить проверку на окончание записи до, а не после, так как если проверка стоит после команды записи, то мы гарантированно теряем 4-8 мсек (4000-8000 команд)



А мы их и так теряем. В конкретном случае процессор больше занять нечем... Нам всё-равно нужно ждать Erase/Write cycle time от 4 до 8 ms...




Удивление рождает жажду познания... Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1107
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг: 3

Награды: Отлично!',
ссылка на сообщение  Отправлено: 10.01.09 00:45. Заголовок: RW1ZK пишет: Что зн..


RW1ZK пишет:

 цитата:
Что значит небыло записи?


флаг окончания записи WR сброшен по умолчанию и при всех видах сброса (аппаратно), для инициализации записи выставляется в "1", по окончанию записи опять сбрасывается в "0" аппаратно. Прошу прощения, я не совсем внимательно посмотрел программу, но именно флаг WR я и контролирую, про него и писал, отсюда и непонятки: стр.14 даташита.

 цитата:
В конкретном случае процессор больше занять нечем...


ну если так подходить, то и МК в данном случае не нужен, резутаты его работы никому, кроме него самого, не нужны. Я говорил про реальное устройство.

Не ошибается только тот, кто ничего не делает. Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 863
Зарегистрирован: 26.12.06
Откуда: Россия, Заозерск, Мурманской обл.
Рейтинг: 3
ссылка на сообщение  Отправлено: 10.01.09 01:40. Заголовок: Разница между WR или..


Разница между WR и EEIF: WR после успешной записи сбрасывается аппаратно, а EEIF нужно сбросить программно. Вот именно флаг прерывания я и привык контроллировать. Ты предлагаешь "плюнуть" на проверку окончания записи в EEPROM и исполнять программу дальше... Интересно... Вопрос спорный... По моему мнению, так делать нельзя. Игра на грани фола, но на вооружение взять можно для неответственных операций.

Удивление рождает жажду познания... Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1108
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг: 3

Награды: Отлично!',
ссылка на сообщение  Отправлено: 10.01.09 02:16. Заголовок: RW1ZK пишет: Ты пре..


RW1ZK пишет:

 цитата:
Ты предлагаешь "плюнуть" на проверку окончания записи в EEPROM и исполнять программу дальше...


кто сказал? Ссылку, пожалуйста. Я говорил:

 цитата:
именно флаг WR я и контролирую, про него и писал


про наплевать ни слова.

 цитата:
Разница между WR и EEIF: WR после успешной записи сбрасывается аппаратно, а EEIF нужно сбросить программно.


да нет, не читайте переводные даташиты и не будет геморроя. Бит WR сбрасывается в "0" аппаратно по окончанию записи. Его и нужно контролировать, а бит EEIF - это бит прерывания по окончанию записи (видишь разницу?), т.е. запись закончилась и уход в прерывание. Т.е. его функция немного тоньше и гибче чем простой контроль командой btfss.

 цитата:
Игра на грани фола


никакой игры. Просто данные биты служат для разных целей. Задача бита EEIF именно прерывания. Например: есть какая-то программа, которая что-то делает и при этом периодически нужно как можно быстрее сохранить 40 байт данных в EEPROM. Есть два пути: можно тупо отправлять байт на запись, ждать 4-6 мсек (контроль бита EEIF или WR), потом отправка следующего байта и так 40 раз с потерей 160-240 мсек. А можно сделать проще: разрешаем прерывание по EEIF, отправляем данные на запись в EEPROM и спокойно занимаемся своими делами, как только запись будет завершена выставится бит EEIF, уход в прерывание, сброс бита EEIF, отправка следующего байта на запись, занимаемся своими делами до следующего прерывания по окончанию записи в EEPROM и так пока не будут сохранены все данные. Нет тупого ожидания. Вот это, в моём понимании, будет его (EEIF бита) задача.
Хотя, по большому счёту, можно отключить прерывание EEIF и решить задачу и так и эдак. Просто в случае с WR я не заморачиваюсь с установками/сбросами битов. Установил бит - запись пошла, запись закончилась - бит сбросился, автоматом.

Не ошибается только тот, кто ничего не делает. Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1109
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг: 3

Награды: Отлично!',
ссылка на сообщение  Отправлено: 10.01.09 02:21. Заголовок: А вот здесь то, о че..


А вот здесь то, о чем я говорил:
Start: 
bcf Intcon,GIE ; Глобальный запрет прерываний.

clrf Addr_EE ;
movlw 0Fh ;
movwf TempData ;
ReStart:
;---------------------------------------------------------------------------------------------
; Сохранение байта в EEPROM памяти PIC'а
;---------------------------------------------------------------------------------------------
movf Addr_EE,W ; Записать в регистр W константу значение адреса.
movwf EEAdr ; Скопировать константу из регистра W в регистр EEAdr.

movf TempData,W ; Скопировать число из регистра TempData в регистр W.
movwf EEData ; Скопировать число из регистра W в ячейку EEPROM

bsf Status,RP0 ; Переход в первый банк.

EEWrt btfsc EECon1,WR ; Запись завершена?
goto EEWrt ; если нет ждать завершения

bsf EECon1,WREN ; Разрешить запись.

movlw 055h ; Обязательная
movwf EECon2 ; процедура
movlw 0AAh ; при записи.
movwf EECon2 ; ----"----
bsf EECon1,WR ; ----"----

bcf Status,RP0 ; Переход в нулевой банк

nop ; Много полезного кода
nop ; вместо бестолкового ожидания
nop ;
nop ;
nop ;
goto ReStart ;


Не ошибается только тот, кто ничего не делает. Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 4
Зарегистрирован: 01.12.08
Откуда: Киргизия, Бишкек
Рейтинг: 0
ссылка на сообщение  Отправлено: 10.01.09 08:01. Заголовок: Спасибо огромное за ..


Спасибо огромное за отклики и много полезной информации.
Но! я только что взял текст программки RW1ZK создал проект, про ассемблировал (компилировал) и запустил в симуляторе MPLAB V7.42 программа взята с СD.
Парадоксально но это факт в окне EEPROM в ячейке с адресом 02Н как установилось изначально
FF так и стоит. Что в пошаговом режиме, что в автомате. По ходу выполнения я в окне File Registers я вижу, правильное исполнение команд в ячейке с адресом 10Н число с FF меняется на 00. Далее проходит процедура записи но в окне EEPROM не чего не меняется.
Программа закольцовывается на командах
WR_END btfss EECON1, EEIF ; Запись завершена?
goto WR_END
И дело встало
Может дело в MPLAB ? но я уже несколько раз переустанавливал и на разных машинах.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 5
Зарегистрирован: 01.12.08
Откуда: Киргизия, Бишкек
Рейтинг: 0
ссылка на сообщение  Отправлено: 10.01.09 08:41. Заголовок: Спасибо огромное все..


Спасибо огромное всем!!!
Разобрался в пошаговом режиме и в полуавтомате нечего не происходит.
А вот если поставить остановку на команде
bsf EECON1, WR
и запустить в автоматическом режиме то через некоторое время происходит изменение и остановка выполнения автоматического режима
замерил примерно 4000 мц. = 4 msec
Я только учусь.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1112
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг: 3

Награды: Отлично!',
ссылка на сообщение  Отправлено: 10.01.09 14:40. Заголовок: Игорь пишет: замери..


Игорь пишет:

 цитата:
замерил примерно 4000 мц. = 4 msec


это то, о чем Иван писал:
RW1ZK пишет:

 цитата:
Erase/Write cycle time от 4 до 8 ms


просто, я думаю, MPLAB 7 версии и выше (у меня 8.00 и работает точно также как у Вас) более точно эмулирует работу МК, с выдержкой минимальных времен задержки и т.д.

Не ошибается только тот, кто ничего не делает. Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 864
Зарегистрирован: 26.12.06
Откуда: Россия, Заозерск, Мурманской обл.
Рейтинг: 3
ссылка на сообщение  Отправлено: 10.01.09 14:59. Заголовок: Игорь пишет: Парадо..


Игорь пишет:

 цитата:
Парадоксально но это факт в окне EEPROM в ячейке с адресом 02Н как установилось изначально
FF так и стоит. Что в пошаговом режиме, что в автомате. По ходу выполнения я в окне File Registers я вижу, правильное исполнение команд в ячейке с адресом 10Н число с FF меняется на 00. Далее проходит процедура записи но в окне EEPROM не чего не меняется.
Программа закольцовывается на командах
WR_END btfss EECON1, EEIF ; Запись завершена?
goto WR_END
И дело встало
Может дело в MPLAB ?



Постарайтесь использовать последнюю версию MPLAB. У меня установлена v8.15a.

Игорь пишет:

 цитата:
А вот если поставить остановку на команде
bsf EECON1, WR
и запустить в автоматическом режиме то через некоторое время происходит изменение и остановка выполнения автоматического режима



Установите Breakpoints на bcf EECON1, EEIF и будет Вам счастье в автоматическом режиме наблюдать изменения в окошке EEPROM.

Alberto пишет:

 цитата:
бит прерывания по окончанию записи (видишь разницу?), т.е. запись закончилась и уход в прерывание. Т.е. его функция немного тоньше и гибче чем простой контроль командой btfss.


В конкретном случае разницы я не вижу. Цитирую из "Микроконтроллеры Microchip практическое руководство" В.С.Яценков стр.37... "Когда цикл записи завершается, аппаратно сбрасывается бит WR и выставляется флаг прерывания EEIF. Пользователь может использовать любой из этих битов для определения момента окончания записи. Впоследствии бит EEIF необходимо программно сбросить. " Так если его необходимо программно сбрасывать, не правильнее всё-же контролировать по нему а не по WR?

Удивление рождает жажду познания... Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1113
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг: 3

Награды: Отлично!',
ссылка на сообщение  Отправлено: 10.01.09 15:27. Заголовок: RW1ZK пишет: В конк..


RW1ZK пишет:

 цитата:
В конкретном случае разницы я не вижу.


Alberto пишет:

 цитата:
Хотя, по большому счёту, можно... решить задачу и так и эдак.




Не ошибается только тот, кто ничего не делает. Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1115
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг: 3

Награды: Отлично!',
ссылка на сообщение  Отправлено: 10.01.09 16:53. Заголовок: Понимаю что уже всех..


Понимаю что уже всех достал , это мой последний пост по данной теме, так что прошу терпения .
Из книги Майка Предко "Устройства управления роботами. Схемотехника и программирование", стр. 102:
"Вместо того чтобы в цикле проверять состояние бита WR, ожидая сигнал успешного завершения операции записи, можно использовать прерывания. Для этого надо установить бит EEIE. После того как запись в EEPROM будет выполнена, автоматически установится флаг ЕЕIF и будет сгенерирован запрос на прерывание."
т.е. фактически то, о чем я говорил выше, контроль бита WR. С той лишь разницей что было предложено контролировать бит WR не сразу же, а перед началом следующей записи. Зачем ждать впустую, если за это время можно сделать кучу полезных дел, а будете ли вы контролировать бит WR или EEIF, по большому счёту, без разницы:
RW1ZK пишет:

 цитата:
Пользователь может использовать любой из этих битов для определения момента окончания записи.


просто бит EEIF надо сбросить программно, а бит WR сбросится сам. Я запрещаю прерывания по EEIF и не парюсь с ним, сброшен/установлен без разницы, прерывания-то по нему запрещены.
Всё, ушёл .

Не ошибается только тот, кто ничего не делает. Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 866
Зарегистрирован: 26.12.06
Откуда: Россия, Заозерск, Мурманской обл.
Рейтинг: 3
ссылка на сообщение  Отправлено: 10.01.09 17:33. Заголовок: Alberto пишет: Пони..


Alberto пишет:

 цитата:
Понимаю что уже всех достал


Ну ты блин даёшь... Никого ты не достал! Наоборот, мне интересно разобраться в этом вопросе вместе с тобой. Я уже согласен, что за время записи в EEPROM возможно сделать массу дел. Согласен и с твоей позицией контроля окончания записи в EEPROM по WR. Но ведь нужно проконтроллировать и запись последнего байта данных, а у тебя проверка стоит в начале цикла записи...


Удивление рождает жажду познания... Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1116
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг: 3

Награды: Отлично!',
ссылка на сообщение  Отправлено: 10.01.09 19:42. Заголовок: RW1ZK пишет: Но вед..


RW1ZK пишет:

 цитата:
Но ведь нужно проконтроллировать и запись последнего байта данных


Ни я битом WR, ни ты битом EEIF не контролируем запись байта данных в EEPROM. Мы контролируем факт окончания записи. Зачем? Для того чтобы не начать запись через промежуток времени меньший цикла "Erase/Write cycle time". Можно сделать фиксированную задержку, в самом плохом случае где-то около 10 мсек. Мы же, проверяя биты WR или EEIF, всего лишь организовываем плавающую задержку. Если байты в EEPROM записываются непрерывно, то я с тобой согласен, проверка до или после записи выиграша не даст, но если байты записываются в EEPROM по одному и нужно какое-то время на их подготовку, то проверка окончания записи перед самой записью позволяет сэкономить время ожидания. Что бы было понятнее: данные подготовились за 2 мсек, бит WR будет в "0" (первая запись, только что включили питание), поэтому без всякой паузы запускается запись в EEPROM, начинаем готовить следующие данные, через 2 мсек данные готовы, проверяем бит WR, он равен "1" (время записи около 4 мсек), плавающая задержка пока бит WR не сбросится в "0" (уже осталось только 2 мсек, 4 мсек полного цикла минус 2 мсек пока готовились данные), сбросился, запускается новая запись в EEPROM и начинают готовиться новые данные и т.д.
В твоем же случае работа идет по алгоритму: данные подготовились за 2 мсек, без всякой паузы запускается запись в EEPROM, ждем установки бита EEIF в "1" (около 4 мсек), сбрасываем его, готовим следующие данные (2 мсек), отправляем на запись в EEPROM и опять плавающая задержка в 4 мсек.
Там где я трачу 4 мсек, ты тратишь 6 мсек. Чем это лучше?
И второе, давай определимся что значит "проконтролировать"? Проверить правильность записи или просто окончание записи? Если правильность записи, то включаем прерывания по EEIF и проверяем в прерывании простым считыванием записанного с записываемым. Если просто сам факт окончания записи, то от выключения питания не спасет ничего: пользователь выключил питание и кырдык хоть одним битом контролируй, хоть двумя...
Всё, иду .

Не ошибается только тот, кто ничего не делает. Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 870
Зарегистрирован: 26.12.06
Откуда: Россия, Заозерск, Мурманской обл.
Рейтинг: 3
ссылка на сообщение  Отправлено: 10.01.09 21:26. Заголовок: Разумеется, что 4 мс..


Разумеется, что 4 мсек лучше, чем 6 мсек. Если судить по тому, когда пользователь вырубит питание, то получается без разницы, когда контролировать запись байта данных в EEPROM, до или после. Чего выпендриваться с исполнением команд на Erase/Write cycle time, если можно тупо ждать. Лично моё мнение... Порылся сейчас по различным исходникам... Везде проверка с ожиданием после записи (либо WR, либо EEIF). Твой вариант возьму на вооружение. Спасибо за участие!

Удивление рождает жажду познания... Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1121
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг: 3

Награды: Отлично!',
ссылка на сообщение  Отправлено: 10.01.09 22:17. Заголовок: RW1ZK пишет: Спасиб..


"Везде так" - это не аргумент.
RW1ZK пишет:

 цитата:
Спасибо за участие!


Всегда пожалуйста. Флудить - не мешки ворочать.

Не ошибается только тот, кто ничего не делает. Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 872
Зарегистрирован: 26.12.06
Откуда: Россия, Заозерск, Мурманской обл.
Рейтинг: 3
ссылка на сообщение  Отправлено: 10.01.09 22:21. Заголовок: Alberto пишет: Флуд..


Alberto пишет:

 цитата:
Флудить - не мешки ворочать.


Это не флуд, а поиск истины.

Удивление рождает жажду познания... Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 945
Зарегистрирован: 26.12.06
Откуда: Санкт-Ленинград
Рейтинг: 1
ссылка на сообщение  Отправлено: 11.01.09 01:05. Заголовок: Вот, что могу сказат..


Вот, что могу сказать по данному поводу.
Я контролирую флаг окончания записи в EEPROM, а затем произвожу считывание из только что записанной ячейки, и сверяю считанное с данными для записи. Конечно, времени такой алгоритм порядочно занимает (по меркам МК, разумеется), зато надёжно.
Что бы зря время не тратить, строю программу так, что запись осуществляется только в самых необходимых случаях. Например. Коррекция хода часов. Данная константа записывается в EEPROM не после каждого нажатия на кнопку "+", или "-", а только при выходе из режима настройки. Заодно и ресурс EEPROM экономлю.
Про МПЛАБ. Сколько раз пытался прогнать данный алгоритм записи в режиме "Animate", всё время зацикливает его на проверке флага. Пытался ждать несколько десятков минут, пока терпения хватало, так и не дождался ни разу. Поэтому ставлю сразу после проверки точку останова, и обычным "Run". Тогда, всё нормально, и данные в EEPROM появляются.

Obligatus Servus Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1122
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг: 3

Награды: Отлично!',
ссылка на сообщение  Отправлено: 11.01.09 01:14. Заголовок: Dmitry Dubrovenko пи..


Dmitry Dubrovenko пишет:

 цитата:
произвожу считывание из только что записанной ячейки, и сверяю считанное с данными для записи


ну это нужно только для особо ответственных случаев. ПИКи довольно надёжны. Хотя если есть подозрение на нестабильное питание и т.д., то почему бы не перестраховаться, тем более что считывание и сравнение занимают всего лишь пару мксек. Но, возвращаясь к моим баранам, лучше делать всё это в прерывании. Хотя... не буду настаивать.

 цитата:
константа записывается в EEPROM не после каждого нажатия на кнопку "+", или "-", а только при выходе из режима настройки


ну это логично и понятно. Писать EEPROM при каждом нажатии просто глупо.

Не ошибается только тот, кто ничего не делает. Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 94
Зарегистрирован: 13.12.07
Откуда: г.Макеевка
Рейтинг: 1
ссылка на сообщение  Отправлено: 11.01.09 11:16. Заголовок: Использую проверку з..


Использую проверку записи один в один, как писал Alberto, и нет проблем.

В программе нужно было довольно часто писать в память, сохранять данные.
Питание могло вырубиться в любую минуту и не раз, а это своеобразная защита от потери данных.
Подсчитал, ресурса памяти должно хватить примерно на 5-6 лет.
Товарищ подсказал: поставь ко-во записей в память на счетчик - счетчик отсчитал свое,
программа начала писать в следующую ячейку новую, чистую, красивую и т.д...


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1130
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг: 3

Награды: Отлично!',
ссылка на сообщение  Отправлено: 17.01.09 18:03. Заголовок: RW1ZK пишет: Порылс..


RW1ZK пишет:

 цитата:
Порылся сейчас по различным исходникам... Везде проверка с ожиданием после записи (либо WR, либо EEIF).


Иван, посмотри процедуру записи в русском (DS30292C ревизия важна) даташите (стр. 45, Запись в EEPROM память данных) или в английском даташите DS30292С на той же странице. А вот в старой редакции (DS30292B, стр.43) про окончание записи совсем не упоминают, считают, наверное, что пользователь сам должен "догнать".

Не ошибается только тот, кто ничего не делает. Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 877
Зарегистрирован: 26.12.06
Откуда: Россия, Заозерск, Мурманской обл.
Рейтинг: 3
ссылка на сообщение  Отправлено: 20.01.09 22:00. Заголовок: Alberto, посмотрел. ..


Alberto, посмотрел. Действительно, есть такая штука. Этот шит я никогда не смотрел до этого, т.к. этими PICами не занимался. В шитах на PIC16F870/871, PIC18F242/252/442/452, PIC18F1220/1320 в примерах записи в EEPROM после установки бита WR для начала записи и разрешения прерывания, рекомендуют ожидать прерывание завершения цикла записи. Кроме этого, рекомендуется произвести контрольное чтение. Вопрос на самом деле "философский" и каждый сам должен определиться, как ему поступить.

Удивление рождает жажду познания... Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1134
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг: 3

Награды: Отлично!',
ссылка на сообщение  Отправлено: 20.01.09 23:51. Заголовок: RW1ZK пишет: Кроме ..


RW1ZK пишет:

 цитата:
Кроме этого, рекомендуется произвести контрольное чтение.


про это Дмитрий писал. В принципе чтение и сравнение занимают десяток команд, так что почему бы и нет?

 цитата:
Вопрос на самом деле "философский" и каждый сам должен определиться, как ему поступить.


согласен. Я просто последние месяца два "сижу" на одном устройстве с динамической индикацией и если сделать ожидание окончания записи сразу после записи ( ), то заметны мигания индикатора, вот и пришлось перейти на другой способ. Сейчас никаких миганий. При использовании ЖКИ c контроллером таких заморочек небыло.

Не ошибается только тот, кто ничего не делает. Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 55 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 13
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет



Создай свой форум на сервисе Borda.ru
Текстовая версия