Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 12.06.2020, 16:28   #1
Lunatic
Senior Member
 
Аватар для Lunatic
 
Регистрация: 26.03.2007
Сообщений: 137
Вес репутации: 102/52
Lunatic will become famous soon enoughLunatic will become famous soon enough
По умолчанию 12F675 EEPROM - проблемы с записью

Добрый день!
Использую, казалось бы, стандартную процелуру:

Код:
void Write_EEP(char addr, char data){

	EEADR = addr;
	EEDATA = data;

	WREN = 1;
	GIE = 0;
	EECON2 = 0x55;
	EECON2 = 0xAA;
	WR = 1;
	while(WR);				//Wait till the write completion
	GIE = 1;
	WREN = 0;
}
После выполнения в ячейку ВСЕГДА попадает 0xFF, то есть пишет (Если программатором еепром поправить) Режим отладки в данном контроллере не работает. Читает EEPROM нормально, нареканий нет.

Смотрел асм на выходе компилятора:
Код:
94:                void Write_EEP(char addr, char data){
95:                
96:                	EEADR = addr;
   092    1283     BCF 0x3, 0x5
   093    00A9     MOVWF 0x29
   094    1683     BSF 0x3, 0x5
   095    009B     MOVWF 0x1b
97:                	EEDATA = data;
   096    1283     BCF 0x3, 0x5
   097    0828     MOVF 0x28, W
   098    1683     BSF 0x3, 0x5
   099    009A     MOVWF 0x1a
98:                
99:                	WREN = 1;
   09A    151C     BSF 0x1c, 0x2
100:               	GIE = 0;
   09B    138B     BCF 0xb, 0x7
101:               	EECON2 = 0x55;
   09C    3055     MOVLW 0x55
   09D    009D     MOVWF 0x1d
102:               	EECON2 = 0xAA;
   09E    30AA     MOVLW 0xaa
   09F    009D     MOVWF 0x1d
103:               	WR = 1;
   0A0    149C     BSF 0x1c, 0x1
104:               	while(WR);				//Wait till the write completion
   0A1    189C     BTFSC 0x1c, 0x1
   0A2    28A1     GOTO 0xa1
105:               	GIE = 1;
   0A3    178B     BSF 0xb, 0x7
106:               	WREN = 0;
   0A4    111C     BCF 0x1c, 0x2
107:               
108:               }
   0A5    1283     BCF 0x3, 0x5
Ничего вроде криминального... В ерате есть что-то невнятное про вредное влияние первого таймера на EEIF. Taймер отключал - не помогает. Да и какие параллели... Может кто сталкивался.
Lunatic вне форума   Ответить с цитированием
Старый 12.06.2020, 18:04   #2
ИС-Xantia
Senior Member
 
Регистрация: 23.03.2007
Возраст: 65
Сообщений: 519
Вес репутации: 291/57
ИС-Xantia is a jewel in the roughИС-Xantia is a jewel in the roughИС-Xantia is a jewel in the rough
По умолчанию Re: 12F675 EEPROM - проблемы с записью

На F675 и F683 никогда не было проблем, пользую это:
Код:
EE_WR
  cblock
      EE_ADR,EE_DATA,EE_flags
  endc

    MOVFW    EE_ADR        ;запись в EEPROM
    BSF    STATUS,RP0    ;банк 1
    MOVWF    EEADR
    BCF    STATUS,RP0    ;банк 0
    MOVFW    EE_DATA
    BSF    STATUS,RP0    ;банк 1
    MOVWF    EEDATA
    BTFSC    EECON1,WR    ;предыдущая запись ?
    GOTO    $-1        ;не завершена
    BSF    EECON1,WREN
    BCF    STATUS,RP0    ;банк 0
    BCF    EE_flags,0    
    BTFSC    INTCON,GIE    ;прерывания разрешены ?
    BSF    EE_flags,0    ;да
    BCF    INTCON,GIE    ;запретить прерывания
    BSF    STATUS,RP0    ;банк 1
    MOVLW    0x55
    MOVWF    EECON2
    MOVLW    0xAA
    MOVWF    EECON2
    BSF    EECON1,WR
    BCF    EECON1,WREN
    BTFSC    EECON1,WR
    GOTO    $-1
    BCF    STATUS,RP0    ;банк 0
    BTFSC    EE_flags,0    ;прерывания разрешены ?
    BSF    INTCON,GIE    ;разрешить прерывания 
    RETURN
ИС-Xantia вне форума   Ответить с цитированием
Старый 12.06.2020, 18:47   #3
Рак
Senior Member
 
Регистрация: 02.04.2008
Адрес: Кременчуг
Возраст: 34
Сообщений: 1,436
Вес репутации: 2632/86
Рак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond repute
По умолчанию Re: 12F675 EEPROM - проблемы с записью

Прочитал тему и вспомнил, что сам писал функцию когда на хс8 перешел. Тоже упорно не хотело писать.
Попробуй вот так
Код:
void Write_EEP(char addr, char data){
        static bit GIE_state;

	EEADR = addr;
	EEDATA = data;

	WREN = 1;
	GIE_state = GIE;
        GIE = 0;
	EECON2 = 0x55;
	EECON2 = 0xAA;
	WR = 1;
	while(WR);				//Wait till the write completion
	GIE = GIE_state;    
	WREN = 0;
}
И отпишись о результате.
Рак вне форума   Ответить с цитированием
Старый 12.06.2020, 19:18   #4
геннадий75
Member
 
Регистрация: 05.02.2012
Адрес: г.Саяногорск
Возраст: 45
Сообщений: 89
Вес репутации: 255/34
геннадий75 is a jewel in the roughгеннадий75 is a jewel in the roughгеннадий75 is a jewel in the rough
По умолчанию Re: 12F675 EEPROM - проблемы с записью

Зачем ждать окончания записи , стоя на одном месте 8 мс (это роскошь) . У меня проходит обязательная последовательность и программа продолжает работать дальше в обычном режиме , периодически проверяю флаг окончания записи. И по флагу проверяю правильность записи и если есть, включает запись следующего байта eeprom.
геннадий75 вне форума   Ответить с цитированием
Старый 12.06.2020, 19:24   #5
Рак
Senior Member
 
Регистрация: 02.04.2008
Адрес: Кременчуг
Возраст: 34
Сообщений: 1,436
Вес репутации: 2632/86
Рак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond repute
По умолчанию Re: 12F675 EEPROM - проблемы с записью

Цитата:
Сообщение от геннадий75 Посмотреть сообщение
Зачем ждать окончания записи , стоя на одном месте 8 мс (это роскошь) . У меня проходит обязательная последовательность и программа продолжает работать дальше в обычном режиме , периодически проверяю флаг окончания записи. И по флагу проверяю правильность записи и если есть, включает запись следующего байта eeprom.
Что там такого можно писать, что бы 8мс были роскошью?
Для длинных цепочек, конечно, можно сделать через прерывания, но как правило можно писать 1-2 байта.
В своём коде я еще добавил предварительное чтение ячейки, что бы понимать нужно ли писать вообще этот байт. Актуально при записи двухбайтных чисел, моточасы, например. Там старший байт обновляется в 255 раз реже младшего.
Рак вне форума   Ответить с цитированием
Старый 13.06.2020, 13:02   #6
Guaho
Senior Member
 
Аватар для Guaho
 
Регистрация: 28.06.2013
Возраст: 48
Сообщений: 773
Вес репутации: 1674/50
Guaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant futureGuaho has a brilliant future
По умолчанию Re: 12F675 EEPROM - проблемы с записью

Ошибка кроется в ожидании окончания записи. Я в своей программе пока эти две команды (проверка флага и переход) не убрал, запись никак не происходила. Т.е. как бы происходила, но всегда потом читалось 0FFh. Необъяснимо, понимаю. В коде из даташита проверки флага нет, кстати. Стоит её добавить - и опаньки.
Guaho вне форума   Ответить с цитированием
Старый 13.06.2020, 13:42   #7
Grey_cat
Junior Member
 
Регистрация: 20.04.2017
Сообщений: 23
Вес репутации: 150/14
Grey_cat has a spectacular aura aboutGrey_cat has a spectacular aura about
По умолчанию Re: 12F675 EEPROM - проблемы с записью

А автор с адресами случайно не перебрал? Там только 128 байт...а дальше только FF будут.

И да, проверка окончания записи на запись никак не влияет. Хотя могут разные внешние события повлиять...типа BORа
Grey_cat вне форума   Ответить с цитированием
Старый 14.06.2020, 01:22   #8
Lunatic
Senior Member
 
Аватар для Lunatic
 
Регистрация: 26.03.2007
Сообщений: 137
Вес репутации: 102/52
Lunatic will become famous soon enoughLunatic will become famous soon enough
По умолчанию Re: 12F675 EEPROM - проблемы с записью

В итоге пришел к такой функции:

Код:
void Write_EEP(char waddr, char data){

Wrest:
	EEADR = waddr;
	EEDATA = data;

	EEIF=0;
	WREN = 1;
	GIE = 0;
	EECON2 = 0x55;
	EECON2 = 0xAA;

	WR = 1;
	while(WR);				//Wait till the write completion
	WREN = 0;
	GIE = 1;
	if (WRERR) goto Wrest;
}
Всем спасибо за участие.
Lunatic вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Время записи в EEPROM PIC12F683 kaligraf Вопросы начинающих 2 12.04.2016 02:00
16f877 проблема с записью в EEPROM alx71 Продукция MICROCHIP 4 14.09.2011 08:14
PIC24HJ128 Проблемы с записью внутренней флеш asamuta Продукция MICROCHIP 3 18.10.2010 23:17
Проблемы с записью данных в файл на MicroSD [PIC32] ColdStart Продукция MICROCHIP 9 01.06.2010 21:09
EEPROM 93LC46 nayabuka Продукция MICROCHIP 16 20.07.2009 08:29


Часовой пояс GMT +3, время: 02:29.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot