Shock Media

Navigatie

PIC12F683 eeprom lees probleem

Forum > Digitaal > PIC12F683 eeprom lees probleem
Naam Bericht
Zom-B

Ik heb een probleempje met de EEPROM van de PIC12F683.

Ik kan wel schrijven naar het EEPROM, dit weet ik omdat de software WRERR error trap niet wordt uitgevoerd, en via de programmer zie ik goede data in EEPROM. Het probleem is dat het me niet lukt het EEPROM uit te lezen in software.

Als ik uitlees heb ik soms goede data, soms ruis (willekeurige bits) en soms alles 00 (kan door CLEAR komen)

Ik heb zowel een oude als nieuwe PIC geprobeerd.
De clock is intosc en draait op 125kHz

Dit is mijn code:

code:
	BANKSEL	0x80

	;IF EEPROM WRITE ERROR, RESET VALUES TO DEFAULT
	BTFSC	EECON1,WRERR
	GOTO	CLEAR

	CLRF	EEADR
	BSF	EECON1,RD
	MOVF	EEDAT,W
	BANKSEL	0x00
	MOVWF	COUNT
	BANKSEL	0x80

	INCF	EEADR,F
	BSF	EECON1,RD
	MOVF	EEDAT,W
	BANKSEL	0x00
	MOVWF	VALUE0
	BANKSEL	0x80

	INCF	EEADR,F
	BSF	EECON1,RD
	MOVF	EEDAT,W
	BANKSEL	0x00
	MOVWF	VALUE1
	BANKSEL	0x80

	INCF	EEADR,F
	BSF	EECON1,RD
	MOVF	EEDAT,W
	BANKSEL	0x00
	MOVWF	VALUE2
	BANKSEL	0x80

	INCF	EEADR,F
	BSF	EECON1,RD
	MOVF	EEDAT,W
	BANKSEL	0x00
	MOVWF	VALUE3

	;CLEAR WHEN EEPROM EMPTY
	BTFSC	VALUE3,7
	GOTO	CLEAR

[Bericht gewijzigd door Zom-B op 24 augustus 2008 15:41:59]
Arco

Ik mis een BANKSEL aan het begin... Trouwens:

code:
	BANKSEL	0x00
	MOVWF	COUNT

is eigenlijk niet de bedoeling

code:
	BANKSEL	COUNT
	MOVWF	COUNT

is een stuk makkelijker. (Zeker als je de variabelen ooit verplaatst; dan hoef je de boel niet aan te passen)
Arco
Zom-B

Ik vind dat banksel op een variabele een beetje onzin zelf. Als ik bank wissel doe ik dat voor een stuk kode dat in bank 0 werkt, totdat ik weer een andere bank nodig heb.

Als ik jou advies opvolg bij bijvoorbeeld deze code,
code:
	BCF	SENDSTAT,NEXTCLK
	BTFSS	GPIO,CLK
	BSF	SENDSTAT,NEXTCLK
dan werkt dat ook niet meer. Ik stop al mijn variabelen in bank 0 en als ik ooit ruimte tekort zou komen zal dat denk ik niet komen door een overvloed aan losse variabelen maar zal dat komen door arrays. Als ik die arays dan in een andere bank zet houd ik daar vanaf het begin rekening mee en verplaats ik die ook niet achteraf.


Ik heb in mijn code de volgende regels verwijderd
code:
	BTFSC	EECON1,WRERR
	GOTO	CLEAR
en nu ziet het er uit dat het wel werkt. wat ik dan niet begrijp is waarom ik af en toe die spookwaarden krijg, en nog meer, waarom WRERR niet gecleard is bij een powerup reset. In de datasheet word alleen gesproken over de staat van dat register na een write, en niks anders. Dus hoe moet ik dan weten of een write mislukt is door een brownout (en dus mogelijk totale powerdown) reset?
[Bericht gewijzigd door Zom-B op 24 augustus 2008 18:42:35]
Zoeken in topic