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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> работа с EEPROM данных (PIC16F631), что-то с флагами не то ?
rx3apf
сообщение Jul 16 2009, 19:42
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Я, в общем-то, работаю с PIC16 изредка и всегда, когда работал с EEPROM данных на запись, контролировал завершение по EEIF, как описано в даташите. А тут, для простоты и компактности, решил сделать поллингом бита WR в EECON1. И - зацикливаюсь на его опросе, как он встал в "1", так и остался (запись произошла, потом проверил). Вроде такого быть не должно, он должен по окончанию записи обнуляться ? Кто что подскажет ? Переделал пока на EEIF, но все ж странно...
Go to the top of the page
 
+Quote Post
FiNik
сообщение Jul 16 2009, 20:11
Сообщение #2





Группа: Участник
Сообщений: 6
Регистрация: 17-01-09
Из: Н.Новгорлд
Пользователь №: 43 500



Проверьте БАНК (EECON1,WR находится в BANK1).
Должно работать, всегда проверяю окончание записи по этому биту (правда, на 16F631 еще не приходилось).
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Jul 16 2009, 20:21
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(FiNik @ Jul 17 2009, 00:11) *
Проверьте БАНК (EECON1,WR находится в BANK1).
Должно работать, всегда проверяю окончание записи по этому биту (правда, на 16F631 еще не приходилось).

Банк тот, я его не менял, поскольку только что выставлял WR в "1". У F631 это банк 3, но непринципиально... Усомнившись, не подгаживает ли вдруг обработчик прерываний, попробовал с сброшенным GIE - то же самое. Странно это...
Go to the top of the page
 
+Quote Post
FiNik
сообщение Jul 16 2009, 20:50
Сообщение #4





Группа: Участник
Сообщений: 6
Регистрация: 17-01-09
Из: Н.Новгорлд
Пользователь №: 43 500



Сразу после установки WR в 1 я запрещаю новую запись
bcf EECON1,WREN
и только потом проверяю WR.
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Jul 16 2009, 21:09
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(FiNik @ Jul 17 2009, 00:50) *
Сразу после установки WR в 1 я запрещаю новую запись
bcf EECON1,WREN
и только потом проверяю WR.

Проверил такой вариант - не помогает. Странно...
Go to the top of the page
 
+Quote Post
FiNik
сообщение Jul 16 2009, 21:32
Сообщение #6





Группа: Участник
Сообщений: 6
Регистрация: 17-01-09
Из: Н.Новгорлд
Пользователь №: 43 500



Если уж быть совсем точным, WR я всегда проверяю перед началом записи или чтения (закончилась ли предыдущая запись). Но, вроде бы, разницы не должно быть.
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Jul 16 2009, 22:44
Сообщение #7





Guests






В общем, есть мнение, что это глюк микрочипа. При первой записи в EEPROM может всплыть эта проблема. Лечится включением WDT. Я обычно при первом запуске программы инициализирую содержимое EEPROM. Если на первой попытке записи происходит зацикливание, то выхожу по сбросу от WDT и начинаю сначала... С какой-то по счету попытке запись все-таки проходит - WR обнуляется, а при дальнейшей работе такая проблема с записью уже не возникает... Встречаются экземпляры которые подозрительно долго инициализируют EEPROM при первом включении - по несколько секунд... Но, в конце концов, обычно все нормализуется.
Go to the top of the page
 
+Quote Post
FiNik
сообщение Jul 17 2009, 03:02
Сообщение #8





Группа: Участник
Сообщений: 6
Регистрация: 17-01-09
Из: Н.Новгорлд
Пользователь №: 43 500



Цитата(@Ark @ Jul 17 2009, 02:44) *
В общем, есть мнение, что это глюк микрочипа.

А что по этому поводу "говорит" MPLAB?
Go to the top of the page
 
+Quote Post
Eddy71
сообщение Jul 17 2009, 05:01
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 224
Регистрация: 23-11-08
Из: Украина, Луганск
Пользователь №: 41 879



Цитата
After a write sequence has been initiated, clearing the
WREN bit will not affect this write cycle. The WR bit will
be inhibited from being set unless the WREN bit is set.
At the completion of the write cycle, the WR bit is
cleared in hardware and the EE Write Complete
Interrupt Flag bit (EEIF) is set. The user can either
enable this interrupt or poll this bit. EEIF must be
cleared by software.

На днях сам пол дня пропрыгал вокруг 690-го (они родственники). В итоге всё заработало, но куча этих переключателей банков.. Через строчку BANKSEL. Бррр..


--------------------
«Чтобы что-то изобрести, вам потребуется хорошее воображение и куча мусора» /Томас Эдисон/
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Jul 17 2009, 09:14
Сообщение #10





Guests






Цитата
А что по этому поводу "говорит" MPLAB?

MPLAB я не использую, но строго придерживаюсь рекомендациям в ДШ... IMHO, причина где-то в самом в железе.
Просто, первое, что обычно начинают делать, столкнувшись с этой проблемой - выискивать ошибки и править программу. Не нужно. С N-ой попытки запись заработает сама... Почему, так происходит - я до сих пор не понял.
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Jul 17 2009, 14:20
Сообщение #11


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(rx3apf @ Jul 17 2009, 00:21) *
Банк тот, я его не менял, поскольку только что выставлял WR в "1". У F631 это банк 3, но непринципиально... Усомнившись, не подгаживает ли вдруг обработчик прерываний, попробовал с сброшенным GIE - то же самое. Странно это...

Короче, обманул я - подгаживал все ж обработчик прерываний (очевидно, при проверке что-то не так закомментировал). А причина - проста до безобразия: я от большого ума разместил области сохранения w и status по младшим адресам RAM, а сам полез в старшие банки. Сработало прерывание и по выходу восстановило из несуществующего адреса, выставив банк 0. Ну а дальше WR можно поллить хоть до посинения. Все ж PIC16 хороши до того момента, пока можно обходиться одним-двумя банками (да и то с осторожностью), а так спятить можно...
Go to the top of the page
 
+Quote Post
PIC_Embedder
сообщение Jul 17 2009, 16:43
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 123
Регистрация: 30-07-08
Из: Украина Луганск
Пользователь №: 39 308



Цитата(Eddy71 @ Jul 17 2009, 08:01) *
На днях сам пол дня пропрыгал вокруг 690-го (они родственники). В итоге всё заработало, но куча этих переключателей банков.. Через строчку BANKSEL. Бррр..

После перехода на Си забыл о подобных проблемах. Компилятор берет на себя все вопросы с переключением банков.
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Jul 17 2009, 20:41
Сообщение #13





Guests






Цитата
После перехода на Си забыл о подобных проблемах. Компилятор берет на себя все вопросы с переключением банков.

Аппаратные проблемы с EEPROM компилятор Си тоже на себя берет? smile.gif
Видимо, Вам туда: http://electronix.ru/forum/index.php?showt...t=0&start=0
Go to the top of the page
 
+Quote Post
PIC_Embedder
сообщение Jul 17 2009, 21:26
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 123
Регистрация: 30-07-08
Из: Украина Луганск
Пользователь №: 39 308



Цитата(@Ark @ Jul 17 2009, 23:41) *
Аппаратные проблемы с EEPROM компилятор Си тоже на себя берет?

Да берёт.... А куда нам, решим без вас )
Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Jul 17 2009, 23:12
Сообщение #15


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126



Цитата(@Ark @ Jul 17 2009, 01:44) *
В общем, есть мнение, что это глюк микрочипа. При первой записи в EEPROM может всплыть эта проблема. Лечится включением WDT. Я обычно при первом запуске программы инициализирую содержимое EEPROM. Если на первой попытке записи происходит зацикливание, то выхожу по сбросу от WDT и начинаю сначала... С какой-то по счету попытке запись все-таки проходит - WR обнуляется, а при дальнейшей работе такая проблема с записью уже не возникает... Встречаются экземпляры которые подозрительно долго инициализируют EEPROM при первом включении - по несколько секунд... Но, в конце концов, обычно все нормализуется.


Не нужно путать своё мнение с общим... Все глюки Микрочип расписал в ERRATA, остальное - отсебятина... Не можете разобраться с EEPROM - ваша проблема... А то что написали Вы - полный бред... Или Вам за него платят???

Цитата(@Ark @ Jul 17 2009, 12:14) *
MPLAB я не использую, но строго придерживаюсь рекомендациям в ДШ... IMHO, причина где-то в самом в железе.
Просто, первое, что обычно начинают делать, столкнувшись с этой проблемой - выискивать ошибки и править программу. Не нужно. С N-ой попытки запись заработает сама... Почему, так происходит - я до сих пор не понял.


А зачем тогда советы давать как лечить, как с бубном плясать, если не танцор и не доктор???

Цитата(@Ark @ Jul 17 2009, 23:41) *
Аппаратные проблемы с EEPROM компилятор Си тоже на себя берет? smile.gif
Видимо, Вам туда: http://electronix.ru/forum/index.php?showt...t=0&start=0


И что там??? Вам туда не надо, там нет строчки "Выдумываю глюки Микрочипа с особым рвением"...
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 29th June 2025 - 10:54
Рейтинг@Mail.ru


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