|
работа с EEPROM данных (PIC16F631), что-то с флагами не то ? |
|
|
|
Jul 16 2009, 19:42
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Я, в общем-то, работаю с PIC16 изредка и всегда, когда работал с EEPROM данных на запись, контролировал завершение по EEIF, как описано в даташите. А тут, для простоты и компактности, решил сделать поллингом бита WR в EECON1. И - зацикливаюсь на его опросе, как он встал в "1", так и остался (запись произошла, потом проверил). Вроде такого быть не должно, он должен по окончанию записи обнуляться ? Кто что подскажет ? Переделал пока на EEIF, но все ж странно...
|
|
|
|
|
Jul 16 2009, 20:11
|
Группа: Участник
Сообщений: 6
Регистрация: 17-01-09
Из: Н.Новгорлд
Пользователь №: 43 500

|
Проверьте БАНК (EECON1,WR находится в BANK1). Должно работать, всегда проверяю окончание записи по этому биту (правда, на 16F631 еще не приходилось).
|
|
|
|
|
Jul 16 2009, 20:21
|
Гуру
     
Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047

|
Цитата(FiNik @ Jul 17 2009, 00:11)  Проверьте БАНК (EECON1,WR находится в BANK1). Должно работать, всегда проверяю окончание записи по этому биту (правда, на 16F631 еще не приходилось). Банк тот, я его не менял, поскольку только что выставлял WR в "1". У F631 это банк 3, но непринципиально... Усомнившись, не подгаживает ли вдруг обработчик прерываний, попробовал с сброшенным GIE - то же самое. Странно это...
|
|
|
|
|
Jul 16 2009, 20:50
|
Группа: Участник
Сообщений: 6
Регистрация: 17-01-09
Из: Н.Новгорлд
Пользователь №: 43 500

|
Сразу после установки WR в 1 я запрещаю новую запись bcf EECON1,WREN и только потом проверяю WR.
|
|
|
|
|
Jul 16 2009, 21:32
|
Группа: Участник
Сообщений: 6
Регистрация: 17-01-09
Из: Н.Новгорлд
Пользователь №: 43 500

|
Если уж быть совсем точным, WR я всегда проверяю перед началом записи или чтения (закончилась ли предыдущая запись). Но, вроде бы, разницы не должно быть.
|
|
|
|
Guest_@Ark_*
|
Jul 16 2009, 22:44
|
Guests

|
В общем, есть мнение, что это глюк микрочипа. При первой записи в EEPROM может всплыть эта проблема. Лечится включением WDT. Я обычно при первом запуске программы инициализирую содержимое EEPROM. Если на первой попытке записи происходит зацикливание, то выхожу по сбросу от WDT и начинаю сначала... С какой-то по счету попытке запись все-таки проходит - WR обнуляется, а при дальнейшей работе такая проблема с записью уже не возникает... Встречаются экземпляры которые подозрительно долго инициализируют EEPROM при первом включении - по несколько секунд... Но, в конце концов, обычно все нормализуется.
|
|
|
|
|
Jul 17 2009, 03:02
|
Группа: Участник
Сообщений: 6
Регистрация: 17-01-09
Из: Н.Новгорлд
Пользователь №: 43 500

|
Цитата(@Ark @ Jul 17 2009, 02:44)  В общем, есть мнение, что это глюк микрочипа. А что по этому поводу "говорит" MPLAB?
|
|
|
|
|
Jul 17 2009, 05:01
|

Местный
  
Группа: Свой
Сообщений: 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. Бррр..
--------------------
«Чтобы что-то изобрести, вам потребуется хорошее воображение и куча мусора» /Томас Эдисон/
|
|
|
|
Guest_@Ark_*
|
Jul 17 2009, 09:14
|
Guests

|
Цитата А что по этому поводу "говорит" MPLAB? MPLAB я не использую, но строго придерживаюсь рекомендациям в ДШ... IMHO, причина где-то в самом в железе. Просто, первое, что обычно начинают делать, столкнувшись с этой проблемой - выискивать ошибки и править программу. Не нужно. С N-ой попытки запись заработает сама... Почему, так происходит - я до сих пор не понял.
|
|
|
|
|
Jul 17 2009, 14:20
|
Гуру
     
Группа: Участник
Сообщений: 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 хороши до того момента, пока можно обходиться одним-двумя банками (да и то с осторожностью), а так спятить можно...
|
|
|
|
|
Jul 17 2009, 16:43
|
Частый гость
 
Группа: Участник
Сообщений: 123
Регистрация: 30-07-08
Из: Украина Луганск
Пользователь №: 39 308

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

|
Цитата После перехода на Си забыл о подобных проблемах. Компилятор берет на себя все вопросы с переключением банков. Аппаратные проблемы с EEPROM компилятор Си тоже на себя берет?  Видимо, Вам туда: http://electronix.ru/forum/index.php?showt...t=0&start=0
|
|
|
|
|
Jul 17 2009, 21:26
|
Частый гость
 
Группа: Участник
Сообщений: 123
Регистрация: 30-07-08
Из: Украина Луганск
Пользователь №: 39 308

|
Цитата(@Ark @ Jul 17 2009, 23:41)  Аппаратные проблемы с EEPROM компилятор Си тоже на себя берет? Да берёт.... А куда нам, решим без вас )
|
|
|
|
|
Jul 17 2009, 23:12
|
Местный
  
Группа: Участник
Сообщений: 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 компилятор Си тоже на себя берет?  Видимо, Вам туда: http://electronix.ru/forum/index.php?showt...t=0&start=0И что там??? Вам туда не надо, там нет строчки "Выдумываю глюки Микрочипа с особым рвением"...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|