Skriva till eeprom fungerar ej

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Rocky_AL
Inlägg: 617
Blev medlem: 7 december 2006, 15:14:50
Ort: Stockholm

Skriva till eeprom fungerar ej

Inlägg av Rocky_AL »

Försöker skriva till det inbyggda eepromet i min pic16f887 men det fungerar inte.

Jag har kopierat koden från databladet men får det ej att fungera.

Kod: Markera allt

	BANKSEL EEADR
	movlw 0x04
	movwf EEADR
	movlw 0x23
	movwf EEDAT ;skriver 0x23 till adress 0x04
	BANKSEL EECON1
	bcf EECON1,EEPGD ;pekar till dataminne
	bsf EECON1,WREN ;tillåter skrivningar till eeprom
	bcf INTCON,GIE ;stänger av interrupts
	btfsc INTCON,GIE
	goto $-2
	movlw 0x55
	movwf EECON2
	movlw 0xAA
	movwf EECON2
	bsf EECON1,WR ;Startar skrivningen
	bsf INTCON,GIE ; tillåter interrupts
	sleep
	bcf EECON1,WREN ;skrivning till epprom inte längre tillåtet
	bcf INTCON,GIE ;stänger av interrupts igen (använder inga interrupts i programmet)
Programmet fastnar på sleep. Jag har även i mplabs simulator kollat på eepromet men inget händer där heller, alla adresser innehåller bara värdet 0xFF.
Vad kan vara felet?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Programmet fastnar på sleep.

Hur vet du att den fastnar just där ?

> Jag har även i mplabs simulator kollat på eepromet

Jag skulle i och för sig gissa att EEPROM skrivningar kan simuleras,
men jag är inte 100% säker...

Du skulle även kunna prova med att polla EEIF istället för att
köra med SLEEP, ifall det faktiskt är något problem med "uppvaknandet"...
Rocky_AL
Inlägg: 617
Blev medlem: 7 december 2006, 15:14:50
Ort: Stockholm

Inlägg av Rocky_AL »

Hittills har jag bara kört programmet i mplabs simulator. Anledningen till att jag vet att den fastnar på sleep är för att när jag låtit programmet köra en stund och sedan trycker på pause så är den gröna pilen, som visar var i programmet man är, fortfarande kvar på sleep.

Jag tog för givet att man kunde simulera eeprom skrivningar eftersom det finns en tabell med detta under "view"
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK, jag förstår.
Som sagt, jag är inte 100% säker att EEPROM fungerar i MPSIM, men
jag skulle förvänta mig att deet gör det...

Dessutom, när du säger "programmet fastnar på sleep", så *tala om*
att det är i MPSIM, och inte "på riktigt"...

Men kör in det på en PIC och kolla !
Rocky_AL
Inlägg: 617
Blev medlem: 7 december 2006, 15:14:50
Ort: Stockholm

Inlägg av Rocky_AL »

Provade att lägga in koden på picen och mycket riktigt så fryser den med. Jag vet för att direkt efter den har skrivit till eepromet så startar jag en display. (Displayen fungerade aldeles utmärkt innan jag lade in eepromskrivningen)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK, bra (eller inte bra kanske... :-) )
Jag skulle tetsa med en loop istället för sleep...
Rocky_AL
Inlägg: 617
Blev medlem: 7 december 2006, 15:14:50
Ort: Stockholm

Inlägg av Rocky_AL »

Provade med en loop som kollade EEIF istället för att köra med sleep. Det var mycket bättre. Men nu har jag fått ett nytt problem istället. När jag läser av eepromet så får jag bara värdet 0x00. :? vilket är mycket märkligt eftersom jag har eeprom tabellen uppe i simulatorn och ser att värdet minsan inte alls är noll.
så här ser koden ut:

Kod: Markera allt

	movf NUM_POS,W ;num_pos är vilken adress som skall läsas av.
	BANKSEL EEADR
	movwf EEADR
	BANKSEL EECON1
	bcf EECON1,EEPGD
	bsf EECON1,RD ;läs...
	BANKSEL EEDAT
	movf EEDAT,W ;lägg datan i w-reg.
	incf NUM_POS,F
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Inlägg av v-g »

Den gången jag skulle testa att använda EPROM körde jag exemplet rakt ur manualen och det fungerade direkt. Kanske du skulle kolla i manualen om inte manualen för just din har så kan du kolla på en annan i serien.
Rocky_AL
Inlägg: 617
Blev medlem: 7 december 2006, 15:14:50
Ort: Stockholm

Inlägg av Rocky_AL »

Jo man kan ju alltid kolla i en annan manual men jag har ju faktiskt tagit read delen rakt ur databladet och skrivdelen har jag tagit där ifrån också (utom sleep delen).
När jag kör programmet i simulatorn så ser jag ju i eeprom tabellen att värdena ändrar sig till det jag satt dem till, så skrivdelen verkar iaf fungera.

Kan det vara något med min config?

Kod: Markera allt

	__CONFIG _CONFIG1, _CP_OFF & _LVP_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT & _FCMEN_OFF & _DEBUG_OFF
	__CONFIG _CONFIG2, _WRT_OFF
Edit: Nu blir jag arg på mig själv! Efter ett otal simuleringar så upptäckte jag att allt eepromskrivande/läsande fungerade aldeles utmärkt. Problemet var att jag nästan direkt efter att ha sparat eepromdatan i w-reg, sparade något annat i w-reg... En liten rad hade försvunnit där datan skulle sparas i en variabel. Men eftersom den variabeln var 0x00 från början och inget sparades i den så blev resultatet alltid 0x00. :oops:
Här är en bild på eländet:
Bild
http://img113.imageshack.us/img113/7673/disp2iz6.jpg

Sodjan: Har du något datablad till displayen på bilden. Det var 4x20 LCDn som jag köpte av dig för några dagar sen. Vet inte riktigt vilken spänning jag ska köra på bakrundsbelysningen (kör med 4,2V nu)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Vet inte riktigt vilken spänning jag ska köra på bakrundsbelysningen

Inge alls. Precis som för *ALLA* lysdioder !

Öka strömmen tills du får en behaglig bakgrund.
Det brukar ligga på ett par 100 mA på de flesta displayer.
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Inlägg av PHermansson »

Är väl bara att koppla som vanligt? Bilden visar parallellport men det har ingen betydelse här.

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

Inlägg av sodjan »

Jo, med reservation för att ett par hundra mA kan vara lite
väl mycket för en vanlig pot. Dessutom, som det är kopplat, så
kan man vrida potten i botten och i princip kortsluta backlighten...
Skriv svar