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

PIC16F628A ПРОБЛЕМ ЗАПИС B EEPROM
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=12889
Страница 1 от 1

Автор:  Nenko [ Чет Май 01, 2014 11:50 am ]
Заглавие:  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

Автор:  CarBeta [ Чет Май 01, 2014 1:16 pm ]
Заглавие:  Re: PIC16F628A ПРОБЛЕМ ЗАПИС B EEPROM

След всяко начало на запис трябва да изчакаш записа да приключи. Или следиш WR в EECON1 да падне в ниско ниво или чакаш прекъсване от ЕЕIF. Чак след това пиши следващия адрес. Като приключиш със записите нулирай WREN!

Променливите Game_count, Game_count_10 и т.н. предплагам си ги декларирал в адресното пространство на банка 0, а при записите си стоиш в банка 1. Т.е. няма как да вземеш данните от тях без да минеш в банка 0. В случая процесора взима данни от аналогичните адреси на банка 1 т.е. дори да записва нещо не е това което искаш. В случая със симулатора взима FF и го записва върху FF и затова си мислиш, че не записва щото няма промяна.

Или сменяй банката като искаш да ползваш променливата или ползвай последните адреси на банка 0 (0x70-0x7F) за такива променливи! Тия адреси се виждат от всички банки.

Автор:  tolstolob [ Чет Май 01, 2014 6:01 pm ]
Заглавие:  Re: PIC16F628A ПРОБЛЕМ ЗАПИС B EEPROM

Настъпвал съм мотиката с чакането на края на записа (с друг 16F). Затова препоръчвам да следиш флага ЕЕIF, а не WR. Имаше нещо по въпроса из ератите (по далечни спомени).
В допълнение искам да обърна внимание, че докато ЕЕПРОМ-а записва, не трябва да променяш съдържанието на ЕЕххх регистрите (примерно да се опитваш да четеш, докато върви запис).

Автор:  Nenko [ Чет Май 01, 2014 9:54 pm ]
Заглавие:  Re: PIC16F628A ПРОБЛЕМ ЗАПИС B EEPROM

благодаря за отговорите и насоките, след малко се заемам пак със опитите.
ще следя как се държат съответните регистри които споменахте.
декларирал съм ги променливите в банка0, но така или инъче започват от 0х70
всъщност това е таймер със 7 сегментни цифри, и брояч който да показва съответно колко пъти е пускан таймера.
аз на симулатора, а и на чипа му записвам някакви стойности D'0'-D'9' не ги оставям на FF но промяна няма. следя че Game_count и т.н. си имат правилните стойности, но не се записват в EE-то.
както казах благодаря за насоките, след малко се заемам пак с опитите

Автор:  Cekins [ Пет Май 02, 2014 9:38 am ]
Заглавие:  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-ца.

Автор:  Nenko [ Пет Май 02, 2014 12:59 pm ]
Заглавие:  Re: PIC16F628A ПРОБЛЕМ ЗАПИС B EEPROM

успях!
пробвах снощи да следя как се държат регистрите, пробвах и този код днес. но проблема се разреши когато му зададох между записите да има малка пауза от няколко милисекунди. предполагам че и от по малко време ще има ефект...

благодаря на всички които се отзоваха със насоки и препоръки. новак съм в програмирането още, уча се.
мисля, че тази случка може да бъде поучителна и за някои други колеги, които тепърва се захващат с ПИК-ове като мен :)

Автор:  Cekins [ Пет Май 02, 2014 2:05 pm ]
Заглавие:  Re: PIC16F628A ПРОБЛЕМ ЗАПИС B EEPROM

Да - точно това ти каза колегата CarBeta, само че за да не чакаш излишно се следи един от двата флага EECON1,RW или флага за прекъсване на епрома(PIR1,7). В кода дето аз ти го пуснах следя първия. Ако трябва да следиш втория, трябва в началото на loop да се добави BCF PIR1,7. Моя код може и да не проработи кадърно - забравил съм да сложа превключването на банките... Ама то тъй - с 16-ките мъка човече с тия банки. А и аз много рядко пиша на асемблер директно.

Автор:  CarBeta [ Пет Май 02, 2014 5:04 pm ]
Заглавие:  Re: PIC16F628A ПРОБЛЕМ ЗАПИС B EEPROM

Cekins написа:
Моя код може и да не проработи кадърно - забравил съм да сложа превключването на банките...

Ще си работи, колега, чудесно при това. Така както човека си е декларирал променливите и си стои в първа банка по време на тая процедура няма да има грижи. Единствената ти грешка е протонския коментар :mrgreen:

Автор:  Cekins [ Пет Май 02, 2014 5:57 pm ]
Заглавие:  Re: PIC16F628A ПРОБЛЕМ ЗАПИС B EEPROM

Е ко да праиш - съдбъ :)
Да - ако стои само в bank 1 ще е ок, ама ако има нещо в 0 и ще трябва едно превключване в началото.

Автор:  tolstolob [ Пон Май 05, 2014 10:07 pm ]
Заглавие:  Re: PIC16F628A ПРОБЛЕМ ЗАПИС B EEPROM

Мисля, че тука е мястото да шерна моя ЕЕПРОМ драйвер за PIC16/18:
ЕЕПРОМ драйвер за PIC16
ЕЕПРОМ драйвер за PIC18

Писани са за Hi-Tech компилатор. Драснах и един малък пример за всеки случай.

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