Trubbel med läsa EEPROM!
Trubbel med läsa EEPROM!
Kastar ut ett litet halmstrå här och hoppas att nån kan hjälpa mig lite.. =)
Skulle vara väldigt tacksam!
Jag har byggt en apparat med en PIC18F458. i PIC:ens inbyggda EEPROM ligger en tabell på 256 bytes. Vid programmets uppstart läses tabellen från EEPROM:et till en array-variabel.
Problemet är att när man slår på spänningen till apparaten och programmet startar så misslyckas läsningen. Alla poster i array-varibeln får värdet '0', istället för värdet i EEPROM tabellen.
Slår man sedan av strömbrytaren till apparaten tillfälligt och sedan på igen så att programmet startas om, så läses EEPROM tabellen in i array-varibeln som det är tänkt.
Slår man därefter av strömbrytaren till apparaten en längre stund (några minuter) så misslyckas läsningen av EEPROM:et igen.
Man måste följdaktligen "toggla" strömbrytaren 1 gång efter man slagit på apparaten för att EEPROM:et ska läsas in.
Det här är ett problem som håller på att driva mig till vansinne. Programmet och kopplingen i övrigt verkar fungera stabilt och felfritt.
Skulle vara väldigt tacksam!
Jag har byggt en apparat med en PIC18F458. i PIC:ens inbyggda EEPROM ligger en tabell på 256 bytes. Vid programmets uppstart läses tabellen från EEPROM:et till en array-variabel.
Problemet är att när man slår på spänningen till apparaten och programmet startar så misslyckas läsningen. Alla poster i array-varibeln får värdet '0', istället för värdet i EEPROM tabellen.
Slår man sedan av strömbrytaren till apparaten tillfälligt och sedan på igen så att programmet startas om, så läses EEPROM tabellen in i array-varibeln som det är tänkt.
Slår man därefter av strömbrytaren till apparaten en längre stund (några minuter) så misslyckas läsningen av EEPROM:et igen.
Man måste följdaktligen "toggla" strömbrytaren 1 gång efter man slagit på apparaten för att EEPROM:et ska läsas in.
Det här är ett problem som håller på att driva mig till vansinne. Programmet och kopplingen i övrigt verkar fungera stabilt och felfritt.
Tabellen lägger du dit från källkoden, eller hur ?
Vad är applikationen skriven i ?
En detalj, varför kopiera över hela tabellen ? Varför inte läsa den från EEPROM'et ? Det tar ett par extra instruktioner. Dock kan man ju inte använda index registren då...
När du "togglar" spänningen, går Vdd på PICen då till 0 V ? Eller vänder spänningen en bit från noll ?
Du verkar ha något problem med matningen. Det kan vara så att koden börjar "rulla" och försöker läsa EEPROM'et innan allt har stabiliserat sig. Vad har du för oscillator ?
Har du "power-on timer" = on ?
Eller något konstigt i din applikations uppstartskod.
Kanske lägga dit en fördröjning i din kod vid power on ?
Vad är applikationen skriven i ?
En detalj, varför kopiera över hela tabellen ? Varför inte läsa den från EEPROM'et ? Det tar ett par extra instruktioner. Dock kan man ju inte använda index registren då...
När du "togglar" spänningen, går Vdd på PICen då till 0 V ? Eller vänder spänningen en bit från noll ?
Du verkar ha något problem med matningen. Det kan vara så att koden börjar "rulla" och försöker läsa EEPROM'et innan allt har stabiliserat sig. Vad har du för oscillator ?
Har du "power-on timer" = on ?
Eller något konstigt i din applikations uppstartskod.
Kanske lägga dit en fördröjning i din kod vid power on ?
- Schnegelwerfer
- Inlägg: 1863
- Blev medlem: 8 november 2004, 13:46:56
Jag håller på Cyrs lösning med en extern resetkrets. Sådana brukar tyvärr kosta några kronor, men det borde avhjälpa problemet.
En "Ful-lösning" jag kom på nu är att koppla en RC-länk med motståndet kopplat från Reset upp till spänningsmatningen, och en liten kondensator kopplad mellan Reset och jord.
Detta borde hålla Reset låg tills spänningen stabiliserat sig, och eventuella kontaktstudsar klingat av. En tidskonstant på 200ms borde fungera.
En "Ful-lösning" jag kom på nu är att koppla en RC-länk med motståndet kopplat från Reset upp till spänningsmatningen, och en liten kondensator kopplad mellan Reset och jord.
Detta borde hålla Reset låg tills spänningen stabiliserat sig, och eventuella kontaktstudsar klingat av. En tidskonstant på 200ms borde fungera.
>Tabellen lägger du dit från källkoden, eller hur ?
>Vad är applikationen skriven i ?
Tabellen läggs dit via RS232
Applikationen är skirve i C CC8E
http://www.bknd.com/cc8e/index.shtml
>En detalj, varför kopiera över hela tabellen ? Varför inte läsa den från
>EEPROM'et ? Det tar ett par extra instruktioner. Dock kan man ju inte >använda index registren då...
För att det blir smidigare så, bl.a. tillfälliga ändringar i tabell som inte sparas. Men hittar jag ingen lösning kan jag prova att ändra koden. Men jag har för mig att jag provade det utan att det hjälpte.
>När du "togglar" spänningen, går Vdd på PICen då till 0 V ? Eller vänder >spänningen en bit från noll ?
Jag alltså bryter spänningen med en vanlig strömbrytare å slår sedan på den igen.
>Du verkar ha något problem med matningen. Det kan vara så att koden >börjar "rulla" och försöker läsa EEPROM'et innan allt har stabiliserat sig. >Vad har du för oscillator ?
Använder en microprocessorkristall HC49
>Har du "power-on timer" = on ?
Jepp
>Eller något konstigt i din applikations uppstartskod.
>Kanske lägga dit en fördröjning i din kod vid power on ?
Kan inte se nåt som verkar konstigt i koden.
Jag har provat med fördröjning.
Jag är osäker på om det har något med att det tar tid att stabilisera sig att göra. Jag har nämligen låtit programmet vänta på en knapptryckning innan EEPROM:et har lästs. Det har inte hjälpt.
Det är som om att EEPROM:et inte alls vill vara med i matchen förrns det har fått en "omstart"
>Vad är applikationen skriven i ?
Tabellen läggs dit via RS232
Applikationen är skirve i C CC8E
http://www.bknd.com/cc8e/index.shtml
>En detalj, varför kopiera över hela tabellen ? Varför inte läsa den från
>EEPROM'et ? Det tar ett par extra instruktioner. Dock kan man ju inte >använda index registren då...
För att det blir smidigare så, bl.a. tillfälliga ändringar i tabell som inte sparas. Men hittar jag ingen lösning kan jag prova att ändra koden. Men jag har för mig att jag provade det utan att det hjälpte.
>När du "togglar" spänningen, går Vdd på PICen då till 0 V ? Eller vänder >spänningen en bit från noll ?
Jag alltså bryter spänningen med en vanlig strömbrytare å slår sedan på den igen.
>Du verkar ha något problem med matningen. Det kan vara så att koden >börjar "rulla" och försöker läsa EEPROM'et innan allt har stabiliserat sig. >Vad har du för oscillator ?
Använder en microprocessorkristall HC49
>Har du "power-on timer" = on ?
Jepp
>Eller något konstigt i din applikations uppstartskod.
>Kanske lägga dit en fördröjning i din kod vid power on ?
Kan inte se nåt som verkar konstigt i koden.
Jag har provat med fördröjning.
Jag är osäker på om det har något med att det tar tid att stabilisera sig att göra. Jag har nämligen låtit programmet vänta på en knapptryckning innan EEPROM:et har lästs. Det har inte hjälpt.
Det är som om att EEPROM:et inte alls vill vara med i matchen förrns det har fått en "omstart"
Har testat lite mer nu. Och det är alltså så att det spelar ingen roll när man läser EEPROM:et i programmet. det funkar inte oavsett hur länge apparaten varit påslagen. Det är som att man måste "sparka igång" EEPROM:et genom att slå av och på spänningen en extra gång.
En RESET hjälper inte heller. Det krävs att man bryter spänningen.
En RESET hjälper inte heller. Det krävs att man bryter spänningen.
En idé bara... Du har väll kollat rellevanta "Errata sheets" ?
Det är inte så ovanligt att just EEPROM delen finns med där...
Både för PICen i sig och för din C kompilator !
Hur som helst,
> Har testat lite mer nu. Och det är alltså så att det spelar ingen roll
> när man läser EEPROM:et i programmet. det funkar inte oavsett hur
> länge apparaten varit påslagen. Det är som att man måste "sparka
> igång" EEPROM:et genom att slå av och på spänningen en extra gång.
>
> En RESET hjälper inte heller. Det krävs att man bryter spänningen."
OK, så om du snabbt (*hur* lång tid ?) slår av och på spänningen, så kan du sedan *vänta* på knapptryckningen, och då fungerar EEPROM läsningen ? Oavsett hur länge du väntar ?
Jag hoppas att du har någonting som med 100% säkerhet visar om EEPROM lösningen lyckades eller misslyckades ! Så att applikationen inte "lurar" dig på något sätt...
> Jag alltså bryter spänningen med en vanlig strömbrytare å slår sedan på den igen.
Jo, men hur länge är spänningen av ? Och såelar det någon roll hur länge den är av ? Går Vdd verkligen "hårt" till 0V ? Eller slås spännigen till igen innan PICen är helt spänningslös ? Med lite elektrolyter i kopplingen kan PICen vara spänningssatt under flera sekunder efter att huvudmatningen har brytits.
Eller är det så att det fungerar varannan gång du slår på spänningen, oavsett hur länge det har varit avslaget ?
Det är inte så ovanligt att just EEPROM delen finns med där...
Både för PICen i sig och för din C kompilator !
Hur som helst,
> Har testat lite mer nu. Och det är alltså så att det spelar ingen roll
> när man läser EEPROM:et i programmet. det funkar inte oavsett hur
> länge apparaten varit påslagen. Det är som att man måste "sparka
> igång" EEPROM:et genom att slå av och på spänningen en extra gång.
>
> En RESET hjälper inte heller. Det krävs att man bryter spänningen."
OK, så om du snabbt (*hur* lång tid ?) slår av och på spänningen, så kan du sedan *vänta* på knapptryckningen, och då fungerar EEPROM läsningen ? Oavsett hur länge du väntar ?
Jag hoppas att du har någonting som med 100% säkerhet visar om EEPROM lösningen lyckades eller misslyckades ! Så att applikationen inte "lurar" dig på något sätt...

> Jag alltså bryter spänningen med en vanlig strömbrytare å slår sedan på den igen.
Jo, men hur länge är spänningen av ? Och såelar det någon roll hur länge den är av ? Går Vdd verkligen "hårt" till 0V ? Eller slås spännigen till igen innan PICen är helt spänningslös ? Med lite elektrolyter i kopplingen kan PICen vara spänningssatt under flera sekunder efter att huvudmatningen har brytits.
Eller är det så att det fungerar varannan gång du slår på spänningen, oavsett hur länge det har varit avslaget ?
Som bekant är det ju oftast så att felet ligger bakom spakarna, så att säga.
Borde förståss testat det för länge sen, men var övertygad att det var nåt fel på min koppling eller program. Hursomhelst så gick jag och rotade fram en annan PIC18F458 och provade med. Med denna PIC funkade allt hur bra som helst!
Antar att det måste varit nåt vajsing med PIC:en jag hade!!!
Jag kunde ju sparat mig själv ganska många timmars jobb om jag provat en annan PIC på en gång. =/ Jaja... skönt att det löste sig iaf!
Tack så jättemycket för hjälpen!
Borde förståss testat det för länge sen, men var övertygad att det var nåt fel på min koppling eller program. Hursomhelst så gick jag och rotade fram en annan PIC18F458 och provade med. Med denna PIC funkade allt hur bra som helst!
Antar att det måste varit nåt vajsing med PIC:en jag hade!!!
Jag kunde ju sparat mig själv ganska många timmars jobb om jag provat en annan PIC på en gång. =/ Jaja... skönt att det löste sig iaf!
Tack så jättemycket för hjälpen!