| Автор |
Съобщение |
|
pldimitroff
Ранг: Минаващ
Регистриран на: Чет Мар 19, 2009 11:22 am Мнения: 38 Местоположение: Стара Загора
|
 Запис в 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 |  |  |  |  |
Защо не ми записва в другите адреси? Каква грешка допускам? Благодаря Ви предварително!
|
| Пон Ное 21, 2016 10:28 am |
|
 |
|
didofen
Ранг: Популярен
Регистриран на: Вто Юни 27, 2006 11:13 am Мнения: 381 Местоположение: Варна
|
 Re: Запис в EEPROM Data на PIC16F84A
проверявай си флага за край на записа. проца е мн по бърз от времето за запис
|
| Пон Ное 21, 2016 10:31 am |
|
 |
|
pldimitroff
Ранг: Минаващ
Регистриран на: Чет Мар 19, 2009 11:22 am Мнения: 38 Местоположение: Стара Загора
|
 Re: Запис в EEPROM Data на PIC16F84A
Начинаещ съм. Някакъв пример да ми дадете. След записа на всяка клетка ли трябва да го правя? И ако има грешка, какво трябва да направя?
|
| Пон Ное 21, 2016 10:35 am |
|
 |
|
sparkybg
Ранг: Форумен бог
Регистриран на: Вто Авг 23, 2005 12:02 pm Мнения: 3070 Местоположение: София
|
 Re: Запис в EEPROM Data на PIC16F84A
Да, след записа на всяка клетка трябва да проверяваш и да чакаш докато приключи предходния запис.
|
| Пон Ное 21, 2016 11:45 am |
|
 |
|
pldimitroff
Ранг: Минаващ
Регистриран на: Чет Мар 19, 2009 11:22 am Мнения: 38 Местоположение: Стара Загора
|
 Re: Запис в EEPROM Data на PIC16F84A
Кое точно да проверявам, стойността на адреса в EEPROM или флага (WRERR) за грешка при запис? Как да изчакам предходния запис? Да направя първия запис, да пусна програмата да си работи и след това да направя втория и пак програмата да работи и т.н. Използвам ги за таймер и времената са ми от значение.
|
| Пон Ное 21, 2016 12:03 pm |
|
 |
|
sparkybg
Ранг: Форумен бог
Регистриран на: Вто Авг 23, 2005 12:02 pm Мнения: 3070 Местоположение: София
|
 Re: Запис в EEPROM Data на PIC16F84A
Имаш флаг за прекъсване след приключване на записа, който нулираш. И да не си сложил прекъсване, флага ти показва кога записа е приключил. Чети datasheet-а на процесора - там си пише всичко.
|
| Пон Ное 21, 2016 12:10 pm |
|
 |
|
pldimitroff
Ранг: Минаващ
Регистриран на: Чет Мар 19, 2009 11:22 am Мнения: 38 Местоположение: Стара Загора
|
 Re: Запис в EEPROM Data на PIC16F84A
Не бях се досетил за флаг EEIF. Трябва да го проверя и тогава да предприема следващия запис. Ще го пробвам. Благодаря Ви!
|
| Пон Ное 21, 2016 12:17 pm |
|
 |
|
sparkybg
Ранг: Форумен бог
Регистриран на: Вто Авг 23, 2005 12:02 pm Мнения: 3070 Местоположение: София
|
 Re: Запис в EEPROM Data на PIC16F84A
Няма нужда да се сещаш. Чети чаршафите на чипа внимателно. Там си пише всичко, а документацията на Микрочип е една от най-достъпните и лесни за четене.
|
| Пон Ное 21, 2016 12:25 pm |
|
 |
|
pldimitroff
Ранг: Минаващ
Регистриран на: Чет Мар 19, 2009 11:22 am Мнения: 38 Местоположение: Стара Загора
|
 Re: Запис в EEPROM Data на PIC16F84A
Това е първия микрконтролер, с който се занимавам. Нямам никакъв опит и затова ми е трудно. Реших да включа и EEPROM-а, при спиране на захранването и повторното му появяване, да продължи таймера да работи, от където е стигнал, но се появи горния проблем, а в симулатора на MPLAB си работи без проблем. Пак Ви благодаря!
|
| Пон Ное 21, 2016 12:33 pm |
|
 |
|
itso.t
Ранг: Форумен бог
Регистриран на: Чет Фев 03, 2005 2:21 am Мнения: 12765 Местоположение: София
|
 Re: Запис в EEPROM Data на PIC16F84A
Нали не правиш запис в еепрома на всеки такт на таймера? Тия памети имат някакъв брой гарантирани цикли за запис, и след това могат да се приемат за загинали...
|
| Пон Ное 21, 2016 1:12 pm |
|
 |
|
pldimitroff
Ранг: Минаващ
Регистриран на: Чет Мар 19, 2009 11:22 am Мнения: 38 Местоположение: Стара Загора
|
 Re: Запис в EEPROM Data на PIC16F84A
Мислех на половин секунда да правя записи, но мога и на минута да го направя. Какво ще ми препоръчате? Ако в различни адреси записвам, ще се увеличи ли броя на записи без да загинат? И на Вас благодаря за информацията!
|
| Пон Ное 21, 2016 2:17 pm |
|
 |
|
slav4o.com
Ранг: Форумен бог
Регистриран на: Нед Яну 01, 2012 8:04 pm Мнения: 2663 Местоположение: София / Велико Търново
|
 Re: Запис в EEPROM Data на PIC16F84A
По-добре е с този флаг да проверяваш края на записа. Друг вариант е да се изчаква известно време след всеки запис. Този вариант не го препоръчвам. Става само за проби. Аз бих направил системата като сложа голям кондензатор на захранването само на контролера, но през някакъв диод за да не се разрежда от останалата част на схемата. Един от пиновете ще назнача за следене на захранването и така когато то отпадне, процесора да направи запис.
|
| Пон Ное 21, 2016 3:15 pm |
|
 |
|
pldimitroff
Ранг: Минаващ
Регистриран на: Чет Мар 19, 2009 11:22 am Мнения: 38 Местоположение: Стара Загора
|
 Re: Запис в EEPROM Data на PIC16F84A
Това е много хубава идея да се следи захранването и след отпадането му, контролера да работи още малко време. Лошото е, когато контролера захранва, например дисплей, и консумацията на схемата основно да е от контролера. Може да се помисли контролера да има малка консумация, да не захранва директно консуматори.
|
| Пон Ное 21, 2016 3:55 pm |
|
 |
|
michev
Ранг: Форумен бог
Регистриран на: Сря Юли 11, 2007 10:16 am Мнения: 1730
|
 Re: Запис в EEPROM Data на PIC16F84A
Или просто изчакай Комет да заредят от тези и ще си решиш проблема.
|
| Пон Ное 21, 2016 4:09 pm |
|
 |
|
slav4o.com
Ранг: Форумен бог
Регистриран на: Нед Яну 01, 2012 8:04 pm Мнения: 2663 Местоположение: София / Велико Търново
|
 Re: Запис в EEPROM Data на PIC16F84A
Това е същото но го прави самата схема. А контролера ако захранва дисплея, може при хващане на отпадането на захранването да се изкючи веднага.
|
| Пон Ное 21, 2016 4:23 pm |
|
|