Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Запис в EEPROM Data на PIC16F84A
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=14907
Страница 1 от 3

Автор:  pldimitroff [ Пон Ное 21, 2016 10:28 am ]
Заглавие:  Запис в EEPROM Data на PIC16F84A

Здравейте,
Използвам PIC16F84A и MPLAB. Искам да запиша в пет адреса (от 0х00 до 0х04) на EEPROM Data memory. Използвам процедурата, дадена от разработчиците, но ми записва само на първия адрес (0х00). Давам Ви пример за запис на три клетки от EEPROM, както съм го направил:
Код:
; Запис на регистър 0x28 в клетка 0x00 от EEPROM.
Label       BCF     INTCON    , GIE  ; Глобална забрана за прекъсване.
            MOVLW   0x00             ; Номер на клетка от EEPROM,
            MOVWF   EEADR            ; в която ще се записва.
            MOVF    0x28      , W    ; Копиране на съдържанието на регистър 0x28
            MOVWF   EEDATA           ; в регистър EEDATA.
            BSF     STATUS    , RP0  ; Преход в 1-ва банка.
            BSF     EECON1    , 02   ; Разрешаване на запис.
            MOVLW   0x55             ; Задължителни.
            MOVWF   EECON2           ; Задължителни.
            MOVLW   0xAA             ; Задължителни.
            MOVWF   EECON2           ; Задължителни.
            BSF     EECON1    , 01   ; Задължителни.
            BCF     EECON1    , 04   ; Нулиране флагът за прекъсване за завършване на записа в EEPROM.
            BCF     STATUS    , RP0  ; Преход в 0-ва банка.
; Запис на регистър 0x29 в клетка 0x01 от EEPROM.
            BCF     INTCON    , GIE  ; Глобална забрана за прекъсване.
            MOVLW   0x01             ; Номер на клетка от EEPROM,
            MOVWF   EEADR            ; в която ще се записва.
            MOVF    0x29      , W    ; Копиране на съдържанието на регистър 0x29
            MOVWF   EEDATA           ; в регистър EEDATA.
            BSF     STATUS    , RP0  ; Преход в 1-ва банка.
            BSF     EECON1    , 02   ; Разрешаване на запис.
            MOVLW   0x55             ; Задължителни.
            MOVWF   EECON2           ; Задължителни.
            MOVLW   0xAA             ; Задължителни.
            MOVWF   EECON2           ; Задължителни.
            BSF     EECON1    , 01   ; Задължителни.
            BCF     EECON1    , 04   ; Нулиране флагът за прекъсване за завършване на записа в EEPROM.
            BCF     STATUS    , RP0  ; Преход в 0-ва банка.
; Запис на регистър 0x2А в клетка 0x02 от EEPROM.
            BCF     INTCON    , GIE  ; Глобална забрана за прекъсване.
            MOVLW   0x02             ; Номер на клетка от EEPROM,
            MOVWF   EEADR            ; в която ще се записва.
            MOVF    0x2A      , W    ; Копиране на съдържанието на регистър 0x2A
            MOVWF   EEDATA           ; в регистър EEDATA.
            BSF     STATUS    , RP0  ; Преход в 1-ва банка.
            BSF     EECON1    , 02   ; Разрешаване на запис.
            MOVLW   0x55             ; Задължителни.
            MOVWF   EECON2           ; Задължителни.
            MOVLW   0xAA             ; Задължителни.
            MOVWF   EECON2           ; Задължителни.
            BSF     EECON1    , 01   ; Задължителни.
            BCF     EECON1    , 04   ; Нулиране флагът за прекъсване за завършване на записа в EEPROM.
            BCF     STATUS    , RP0  ; Преход в 0-ва банка.
            RETURN

Защо не ми записва в другите адреси? Каква грешка допускам?
Благодаря Ви предварително!

Автор:  didofen [ Пон Ное 21, 2016 10:31 am ]
Заглавие:  Re: Запис в EEPROM Data на PIC16F84A

проверявай си флага за край на записа. проца е мн по бърз от времето за запис

Автор:  pldimitroff [ Пон Ное 21, 2016 10:35 am ]
Заглавие:  Re: Запис в EEPROM Data на PIC16F84A

Начинаещ съм. Някакъв пример да ми дадете.
След записа на всяка клетка ли трябва да го правя? И ако има грешка, какво трябва да направя?

Автор:  sparkybg [ Пон Ное 21, 2016 11:45 am ]
Заглавие:  Re: Запис в EEPROM Data на PIC16F84A

Да, след записа на всяка клетка трябва да проверяваш и да чакаш докато приключи предходния запис.

Автор:  pldimitroff [ Пон Ное 21, 2016 12:03 pm ]
Заглавие:  Re: Запис в EEPROM Data на PIC16F84A

Кое точно да проверявам, стойността на адреса в EEPROM или флага (WRERR) за грешка при запис?
Как да изчакам предходния запис? Да направя първия запис, да пусна програмата да си работи и след това да направя втория и пак програмата да работи и т.н.
Използвам ги за таймер и времената са ми от значение.

Автор:  sparkybg [ Пон Ное 21, 2016 12:10 pm ]
Заглавие:  Re: Запис в EEPROM Data на PIC16F84A

Имаш флаг за прекъсване след приключване на записа, който нулираш. И да не си сложил прекъсване, флага ти показва кога записа е приключил. Чети datasheet-а на процесора - там си пише всичко.

Автор:  pldimitroff [ Пон Ное 21, 2016 12:17 pm ]
Заглавие:  Re: Запис в EEPROM Data на PIC16F84A

Не бях се досетил за флаг EEIF. Трябва да го проверя и тогава да предприема следващия запис. Ще го пробвам.
Благодаря Ви!

Автор:  sparkybg [ Пон Ное 21, 2016 12:25 pm ]
Заглавие:  Re: Запис в EEPROM Data на PIC16F84A

pldimitroff написа:
Не бях се досетил за флаг EEIF.


Няма нужда да се сещаш. Чети чаршафите на чипа внимателно. Там си пише всичко, а документацията на Микрочип е една от най-достъпните и лесни за четене.

Автор:  pldimitroff [ Пон Ное 21, 2016 12:33 pm ]
Заглавие:  Re: Запис в EEPROM Data на PIC16F84A

Това е първия микрконтролер, с който се занимавам. Нямам никакъв опит и затова ми е трудно.
Реших да включа и EEPROM-а, при спиране на захранването и повторното му появяване, да продължи таймера да работи, от където е стигнал, но се появи горния проблем, а в симулатора на MPLAB си работи без проблем.
Пак Ви благодаря!

Автор:  itso.t [ Пон Ное 21, 2016 1:12 pm ]
Заглавие:  Re: Запис в EEPROM Data на PIC16F84A

Нали не правиш запис в еепрома на всеки такт на таймера?
Тия памети имат някакъв брой гарантирани цикли за запис, и след това могат да се приемат за загинали...

Автор:  pldimitroff [ Пон Ное 21, 2016 2:17 pm ]
Заглавие:  Re: Запис в EEPROM Data на PIC16F84A

Мислех на половин секунда да правя записи, но мога и на минута да го направя. Какво ще ми препоръчате?
Ако в различни адреси записвам, ще се увеличи ли броя на записи без да загинат?
И на Вас благодаря за информацията!

Автор:  slav4o.com [ Пон Ное 21, 2016 3:15 pm ]
Заглавие:  Re: Запис в EEPROM Data на PIC16F84A

По-добре е с този флаг да проверяваш края на записа. Друг вариант е да се изчаква известно време след всеки запис. Този вариант не го препоръчвам. Става само за проби.
Аз бих направил системата като сложа голям кондензатор на захранването само на контролера, но през някакъв диод за да не се разрежда от останалата част на схемата. Един от пиновете ще назнача за следене на захранването и така когато то отпадне, процесора да направи запис.

Автор:  pldimitroff [ Пон Ное 21, 2016 3:55 pm ]
Заглавие:  Re: Запис в EEPROM Data на PIC16F84A

Това е много хубава идея да се следи захранването и след отпадането му, контролера да работи още малко време. Лошото е, когато контролера захранва, например дисплей, и консумацията на схемата основно да е от контролера. Може да се помисли контролера да има малка консумация, да не захранва директно консуматори.

Автор:  michev [ Пон Ное 21, 2016 4:09 pm ]
Заглавие:  Re: Запис в EEPROM Data на PIC16F84A

Или просто изчакай Комет да заредят от тези и ще си решиш проблема.

Автор:  slav4o.com [ Пон Ное 21, 2016 4:23 pm ]
Заглавие:  Re: Запис в EEPROM Data на PIC16F84A

Това е същото но го прави самата схема. А контролера ако захранва дисплея, може при хващане на отпадането на захранването да се изкючи веднага.

Страница 1 от 3 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/