|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 10:09 pm
|
Страница 1 от 1
|
[ 10 мнения ] |
|
PIC16F628A ПРОБЛЕМ ЗАПИС B EEPROM
| Автор |
Съобщение |
|
Nenko
Ранг: Минаващ
Регистриран на: Съб Дек 10, 2011 7:53 pm Мнения: 32 Местоположение: Варна
|
 PIC16F628A ПРОБЛЕМ ЗАПИС B EEPROM
здравейте колеги, както пише в заглавието проблемът е със записването в EEPROM паметта. пробвах няколко варианта но все се получава едно и също - записва само в първият адрес. и на симулация и на практика е едно и също. някой може ли да ми даде някакъв съвет? има ли някакви тънкости при последователните записи? при смяна на адресите в които се опитвам да записвам пак се получава същото - записва само в първия адрес. пробвах да сложа проверка за коректен запис със четене от съответния адрес и сравнение и при различен резултат да записва отново - пак не се получава - опитва да записва до безкрай но без успех. прилагам час от програмата - подпрограмата ми за запис :
wr_game_count call bank1 movlw H'10' movwf EEADR movf Game_count,W movwf EEDATA
bsf EECON1,WREN bcf INTCON,GIE btfsc INTCON,GIE goto $-2 movlw H'55' movwf EECON2 movlw H'AA' movwf EECON2 bsf EECON1,WR bsf INTCON,GIE
call bank1 movlw H'11' movwf EEADR movf Game_count_10,W movwf EEDATA
bsf EECON1,WREN bcf INTCON,GIE btfsc INTCON,GIE goto $-2 movlw H'55' movwf EECON2 movlw H'AA' movwf EECON2 bsf EECON1,WR bsf INTCON,GIE
call bank1 movlw H'12' movwf EEADR movf Game_count_100,W movwf EEDATA
bsf EECON1,WREN bcf INTCON,GIE btfsc INTCON,GIE goto $-2 movlw H'55' movwf EECON2 movlw H'AA' movwf EECON2 bsf EECON1,WR bsf INTCON,GIE
call bank1 movlw H'13' movwf EEADR movf Game_count_1000,W movwf EEDATA
bsf EECON1,WREN bcf INTCON,GIE btfsc INTCON,GIE goto $-2 movlw H'55' movwf EECON2 movlw H'AA' movwf EECON2 bsf EECON1,WR bsf INTCON,GIE
call bank1 movlw H'14' movwf EEADR movf Game_count_10000,W movwf EEDATA
bsf EECON1,WREN bcf INTCON,GIE btfsc INTCON,GIE goto $-2 movlw H'55' movwf EECON2 movlw H'AA' movwf EECON2 bsf EECON1,WR bsf INTCON,GIE
goto main_start ; main_start
|
| Чет Май 01, 2014 11:50 am |
|
 |
|
CarBeta
Ранг: Форумен бог
Регистриран на: Пет Май 01, 2009 4:01 pm Мнения: 1438
|
 Re: PIC16F628A ПРОБЛЕМ ЗАПИС B EEPROM
След всяко начало на запис трябва да изчакаш записа да приключи. Или следиш WR в EECON1 да падне в ниско ниво или чакаш прекъсване от ЕЕIF. Чак след това пиши следващия адрес. Като приключиш със записите нулирай WREN!
Променливите Game_count, Game_count_10 и т.н. предплагам си ги декларирал в адресното пространство на банка 0, а при записите си стоиш в банка 1. Т.е. няма как да вземеш данните от тях без да минеш в банка 0. В случая процесора взима данни от аналогичните адреси на банка 1 т.е. дори да записва нещо не е това което искаш. В случая със симулатора взима FF и го записва върху FF и затова си мислиш, че не записва щото няма промяна.
Или сменяй банката като искаш да ползваш променливата или ползвай последните адреси на банка 0 (0x70-0x7F) за такива променливи! Тия адреси се виждат от всички банки.
|
| Чет Май 01, 2014 1:16 pm |
|
 |
|
tolstolob
Ранг: Ориентиран
Регистриран на: Вто Фев 06, 2007 2:45 am Мнения: 263
|
 Re: PIC16F628A ПРОБЛЕМ ЗАПИС B EEPROM
Настъпвал съм мотиката с чакането на края на записа (с друг 16F). Затова препоръчвам да следиш флага ЕЕIF, а не WR. Имаше нещо по въпроса из ератите (по далечни спомени). В допълнение искам да обърна внимание, че докато ЕЕПРОМ-а записва, не трябва да променяш съдържанието на ЕЕххх регистрите (примерно да се опитваш да четеш, докато върви запис).
|
| Чет Май 01, 2014 6:01 pm |
|
 |
|
Nenko
Ранг: Минаващ
Регистриран на: Съб Дек 10, 2011 7:53 pm Мнения: 32 Местоположение: Варна
|
 Re: PIC16F628A ПРОБЛЕМ ЗАПИС B EEPROM
благодаря за отговорите и насоките, след малко се заемам пак със опитите. ще следя как се държат съответните регистри които споменахте. декларирал съм ги променливите в банка0, но така или инъче започват от 0х70 всъщност това е таймер със 7 сегментни цифри, и брояч който да показва съответно колко пъти е пускан таймера. аз на симулатора, а и на чипа му записвам някакви стойности D'0'-D'9' не ги оставям на FF но промяна няма. следя че Game_count и т.н. си имат правилните стойности, но не се записват в EE-то. както казах благодаря за насоките, след малко се заемам пак с опитите
|
| Чет Май 01, 2014 9:54 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: PIC16F628A ПРОБЛЕМ ЗАПИС B EEPROM
Ами така би изглеждало по добре:
movlw H'5' movwf loop_count 'тази променлива като брояч movlw Game_count movwf FSR movlw H'10' movwf EEADR bcf INTCON,GIE bsf EECON1,WREN
loop movf INDF,W movwf EEDATA movlw H'55' movwf EECON2 movlw H'AA' movwf EECON2 bsf EECON1,WR loop1 btfsc EECON1,WR goto loop1 incf EEADR incf FSR decfsz loop_count goto loop bsf INTCON,GIE bcf EECON1,WREN
това ще работи гарантирано в банка 0 и 1. Ако трябва да работи в 2 и 3 трябва в STATUS.7 да се сетне 1-ца.
|
| Пет Май 02, 2014 9:38 am |
|
 |
|
Nenko
Ранг: Минаващ
Регистриран на: Съб Дек 10, 2011 7:53 pm Мнения: 32 Местоположение: Варна
|
 Re: PIC16F628A ПРОБЛЕМ ЗАПИС B EEPROM
успях! пробвах снощи да следя как се държат регистрите, пробвах и този код днес. но проблема се разреши когато му зададох между записите да има малка пауза от няколко милисекунди. предполагам че и от по малко време ще има ефект... благодаря на всички които се отзоваха със насоки и препоръки. новак съм в програмирането още, уча се. мисля, че тази случка може да бъде поучителна и за някои други колеги, които тепърва се захващат с ПИК-ове като мен 
|
| Пет Май 02, 2014 12:59 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: PIC16F628A ПРОБЛЕМ ЗАПИС B EEPROM
Да - точно това ти каза колегата CarBeta, само че за да не чакаш излишно се следи един от двата флага EECON1,RW или флага за прекъсване на епрома(PIR1,7). В кода дето аз ти го пуснах следя първия. Ако трябва да следиш втория, трябва в началото на loop да се добави BCF PIR1,7. Моя код може и да не проработи кадърно - забравил съм да сложа превключването на банките... Ама то тъй - с 16-ките мъка човече с тия банки. А и аз много рядко пиша на асемблер директно.
|
| Пет Май 02, 2014 2:05 pm |
|
 |
|
CarBeta
Ранг: Форумен бог
Регистриран на: Пет Май 01, 2009 4:01 pm Мнения: 1438
|
 Re: PIC16F628A ПРОБЛЕМ ЗАПИС B EEPROM
Ще си работи, колега, чудесно при това. Така както човека си е декларирал променливите и си стои в първа банка по време на тая процедура няма да има грижи. Единствената ти грешка е протонския коментар 
|
| Пет Май 02, 2014 5:04 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: PIC16F628A ПРОБЛЕМ ЗАПИС B EEPROM
Е ко да праиш - съдбъ  Да - ако стои само в bank 1 ще е ок, ама ако има нещо в 0 и ще трябва едно превключване в началото.
|
| Пет Май 02, 2014 5:57 pm |
|
 |
|
tolstolob
Ранг: Ориентиран
Регистриран на: Вто Фев 06, 2007 2:45 am Мнения: 263
|
 Re: PIC16F628A ПРОБЛЕМ ЗАПИС B EEPROM
Мисля, че тука е мястото да шерна моя ЕЕПРОМ драйвер за PIC16/18: ЕЕПРОМ драйвер за PIC16ЕЕПРОМ драйвер за PIC18Писани са за Hi-Tech компилатор. Драснах и един малък пример за всеки случай.
|
| Пон Май 05, 2014 10:07 pm |
|
|
|
Страница 1 от 1
|
[ 10 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 2 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|