PIC: Skriva till EEPROM

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
persika
EF Sponsor
Inlägg: 1541
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

PIC: Skriva till EEPROM

Inlägg av persika »

Får inte det att funka att skriva till EEPROM i PIC16f688

Någon som har falkögon o ser vad jag gör för fel.

Har hämtat mesta av nedanstående kod från databladet.

Kod: Markera allt

Lagra_EEPROM		; PIC 16f688
;
; indata:
;			(FSR), data
;			rgE, adress 
;           
; utdata:
;
; register som ändras:
;
; PC-stackanvändning: 0
; 

		movf	rgE, w
		banksel	eeadr
		movwf	eeadr 			; data memory address to write
		movf	INDF, w
		movwf	eedat 			; data memory value to write

		banksel	eecon1
		bcf		eecon1, eepgd	; point to data memory
		bsf		eecon1, wren	; enable writes

see_ioff
		bcf		intcon, gie		; disable ints. see an576
		btfsc	intcon, gie 
		goto see_ioff

		movlw	055h
		movwf	eecon2			; write 55h
		movlw	0aah
		movwf	eecon2			; write aah

see_vnt
		bsf		eecon1, wr		; set wr bit to begin write
		btfsc	eecon1, wr		; när bit=0 då är skrivning klar
		goto see_vnt

		bsf		intcon, gie 	; enable ints.
		bcf		eecon1, wren	; disable writes
		bcf		status, RP0		; bank 0

		return
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Vad händer och vad händer inte ?
Hur vet du att det inte fungerar ?

Sen så är det tveksamt om du ska sätta WR hela tiden.
Flytta ner labeln see_vnt en rad...
Användarvisningsbild
persika
EF Sponsor
Inlägg: 1541
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

Inlägg av persika »

> Flytta ner labeln see_vnt en rad...

Det var min mening att bara läsa av biten WR i den lilla slingan, inte 1-ställa den hela tiden, men det blev fel nattens sena timma.
Har ändrat det nu, men funkar ändå inte.
Hur vet jag det ?
Jag lägger in data i eepromet via källkoden så här:

Kod: Markera allt

;------------------------------------------------------
; initialize eeprom locations
ORG	02100h

;   eeUppDatTid,		
DE	00Ah,   000h

;	eeStegMotorVarv
DE	0C8h,   000h

;	eeDistTempFaktor
DE	0E8h,   003h,	000h


END                       ; directive 'end of program'

Sedan läser jag av det med hjälp av denna rutin:

Kod: Markera allt

;-------------------------------------------------------------
Läs_EEPROM
;
; indata:
;			rgE, EEadress
; utdata:
;			w=EEdata
;
; register som ändras:
;
; PC-stackanvändning: 0
;
;{


		movf	rgE, w
		banksel	EEADR
		movwf	EEADR			;Data Memory Address to read
		bcf		EECON1, EEPGD	;Point to DATA memory
		bsf		EECON1, RD		;EE Read
		movf	EEDAT, w		;W := EEDAT
		bcf		status, RP0		; bank 0


		return


;}
;-------------------------------------------------------------
De hämtade datana skickar jag sedan vidare seriellt, och kan se i hyper terminalen:

Kod: Markera allt

S T C -01
Temp : 207 x0.1 deg.C
Pos : -2098243  um

1: Update time 10 sec
2: Motor 200 step/turn
3: MoveTemp coeff 1000 um/deg.C
4: Move to ??? um

   Select 1-4 <enter>
Funkar fortfarande inte att skriva till eepromet, vad jag kan se, fattar inte varför..

Fick en tanke, om config har betydelse,
så jag ändrade _CPD_ON till _CPD_OFF

Kod: Markera allt

	errorlevel -203, -204, -205, -206, -207, -302             


list      p=16f688           ; list directive to define processor
#include <p16f688.inc>        ; processor specific variable definitions


__CONFIG   _CP_ON & _CPD_OFF & _BOD_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _EC_OSC 

Samma sak funkar forfarande inte.
Känns som jag provat allt snart....
Senast redigerad av persika 30 oktober 2008, 12:00:05, redigerad totalt 1 gång.
Användarvisningsbild
persika
EF Sponsor
Inlägg: 1541
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

Inlägg av persika »

Har meckat vidare här..

Ändring av _CPD_OFF hade ingen inverkan.

Jag gjorde en liten fuling och lade in i rutinen Lagra_EEPROM att sända ut innehållet i eeadr och eedat på serieport, så kunde jag se det verkliga innehållet. Det visade sig att de gamla värdena lagrades igen, inte de nya, därför såg det ut som att rutinen Lagra_EEPROM inte funkade, nu har jag rättat till indata o nu funkar allt så fint, så här långt i programmet.
Lätt hänt att snöa in o tro att felet är på ett visst ställe.
Men, kanske bra ändå med det här problemet, det gav ju en databladsläsande som kan vara nyttigt. Bla om att stänga av interrupt.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> kanske bra ändå med det här problemet, det gav ju en databladsläsande som kan vara nyttigt.

Det där är i fel ordning. Bättre att läsa på först...
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Inlägg av vfr »

Japp, självklart är det det! Men det gav ändå en del nyttiga insikter i sista änden. Bra att du hittade felet, Persika! Speciellt på egen hand och med hjälp av databladen. :bravo:
Användarvisningsbild
persika
EF Sponsor
Inlägg: 1541
Blev medlem: 31 juli 2006, 22:14:37
Ort: Österlen, Skåne

Inlägg av persika »

Ofta läser jag för snabbt i databladen, lätt att hoppa över nån detalj, borde sätta sig "ner", men då skulle man haft det utskrivet på papper
Användarvisningsbild
wombat
Inlägg: 721
Blev medlem: 6 november 2006, 16:39:08
Ort: Stockholm

Inlägg av wombat »

Definitivt bäst att ha på papper!
Jag skriver ut (dubbelsidigt) och ringbinder.
Lite über kanske, men sjukt praktiskt.

Jag tror jag läst 10F2XX-häftet 3-4 gånger från pärm till pärm.
Gjort hundöron på var och varannan sida och gått på med rödpenna
på allt som verkar kritiskt/viktigt. (Ändå fanns/finns det små saker jag missat.)

Guld att ha vid sin sida när man sitter och kodar, eller när man inte kan somna på naturlig väg! :D



/Wombat
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

På papper är bra när man måste läsa på något nytt.

T.ex de 1-2 första PIC som man använder alls. Eller
när man switchar till en ny arktiektur PIC16->PIC18 t.ex.

Sedan är det väldigt mycket upprepningar och när man
vet vad man ska leta efter och vad man kan förvänta sig
att hitta i databladet så fungerar PDF på skärmen utmärkt.

Jag har nog inte printat något datablad på flera år. Kanske
att man skiver ut ett visst *kapitel* (t.ex USB om man tänker
börja me det) och läser det lite mer i lugn och ro...
Skriv svar