EEPROM & Wisp628A & MPLAB (HITEC C compilier)
EEPROM & Wisp628A & MPLAB (HITEC C compilier)
Tjena. Jag håller på att göra ett program till en PIC12F629, och då ska jag spara lite data (2 byte) i EEPROMet på den, som jag sen läser av nästa gång den startar. Så långt var de inga problem, allt står ju i databladet.
Men jag kom fram till att efter programmering är all data i EEPROMet 0xFF, och jag vill ha byte 0 till 0x7D och byte 1 till 0x00 så jag tryckte på "visa" i MPLAB (jag har HITEC c compilier i MPLAB) och sedan på "EEPROM", då kom där upp en array på 16*8 byte (128 byte) där det står 0xFF i alla. Så jag tryckte på de två till vänster på översta raden, dessa måste ju vara byte 0 och 1? också angav jag mina önskade värden.
Sen när jag kompilerar det så står det att jag har använt 0% (0 byte) utav EEPROMet, borde det stå det? Och när jag kör igång PICen så ligger det fortfarande 0xFF på de adresserna...
Är det någon som har någon idé om vad jag gör fel? Jag använder en wisp628A för att programmera PICen, det är inte där felet ligger tro?
Säg till om det är nån mer info ni vill ha!
Mvh. Danne
Men jag kom fram till att efter programmering är all data i EEPROMet 0xFF, och jag vill ha byte 0 till 0x7D och byte 1 till 0x00 så jag tryckte på "visa" i MPLAB (jag har HITEC c compilier i MPLAB) och sedan på "EEPROM", då kom där upp en array på 16*8 byte (128 byte) där det står 0xFF i alla. Så jag tryckte på de två till vänster på översta raden, dessa måste ju vara byte 0 och 1? också angav jag mina önskade värden.
Sen när jag kompilerar det så står det att jag har använt 0% (0 byte) utav EEPROMet, borde det stå det? Och när jag kör igång PICen så ligger det fortfarande 0xFF på de adresserna...
Är det någon som har någon idé om vad jag gör fel? Jag använder en wisp628A för att programmera PICen, det är inte där felet ligger tro?
Säg till om det är nån mer info ni vill ha!
Mvh. Danne
Re: EEPROM & Wisp628A & MPLAB (HITEC C compilier)
Jag tror inte att du bara kan göra så där.
Du vill alltså att två värden för EEPROM ska finnas med redan i HEX filen ?
Så att de flashas in redan vid programmeringen av PIC'en ? Detta är absolut
inget problem med Wisp'arna, bara rellevant data för EEPROM ligger i HEX
filen på korrekta adresser. Gör det det ?
Hur du gör i HitecC har jag inte en susning om...
För vanlig MPASM så kan du kolla "de" direktivet i MPASM
manualen så ser du hur du görs där.
Du vill alltså att två värden för EEPROM ska finnas med redan i HEX filen ?
Så att de flashas in redan vid programmeringen av PIC'en ? Detta är absolut
inget problem med Wisp'arna, bara rellevant data för EEPROM ligger i HEX
filen på korrekta adresser. Gör det det ?
Hur du gör i HitecC har jag inte en susning om...
För vanlig MPASM så kan du kolla "de" direktivet i MPASM
manualen så ser du hur du görs där.
Re: EEPROM & Wisp628A & MPLAB (HITEC C compilier)
Som sodjan skriver kan du inte göra så. För att göra det du vill med HiTech C gör du såhär:
Kod: Markera allt
__EEPROM_DATA(0x7D, 0x00);
Re: EEPROM & Wisp628A & MPLAB (HITEC C compilier)
Kanske att det finns något sätt att ange adresserna till EEPROM också.
En rellaterad fråga...
Jag har inte lyckats hitta en manual till Hitec C hos Microchip som bara
går att ladda ner. Någon som har en länk ?
En rellaterad fråga...
Jag har inte lyckats hitta en manual till Hitec C hos Microchip som bara
går att ladda ner. Någon som har en länk ?
Re: EEPROM & Wisp628A & MPLAB (HITEC C compilier)
Inte med makrot. Makrot tar (maximalt) 8 bytes som parameter och skriver från byte 0. Vill man sätta byte 11 "compile-time" så använder man makrot två gånger. Annars får man använda funktionen eeprom_write(adress, värde), men då blir det run-time.sodjan skrev:Kanske att det finns något sätt att ange adresserna till EEPROM också.
Re: EEPROM & Wisp628A & MPLAB (HITEC C compilier)
Hm...
Det *borde* finnas en metod att specificera EEPROM data även
vid compile-time till valfri address. Eller också så får man
fylla på med detta macro till man når den önskade adresse.
Aja, hur som helst, vi får se om squiz3r får ihop det...
Det *borde* finnas en metod att specificera EEPROM data även
vid compile-time till valfri address. Eller också så får man
fylla på med detta macro till man når den önskade adresse.
Aja, hur som helst, vi får se om squiz3r får ihop det...
Re: EEPROM & Wisp628A & MPLAB (HITEC C compilier)
Hårt för dem på höga nivån där allt ska vara så enkelt 

Re: EEPROM & Wisp628A & MPLAB (HITEC C compilier)
Det går säkert, men jag vet inte hur. Hitech rekommenderar iallafall inte att man använder deras eeprom-kod om man absolut måste ha koll på eeprom-adresser. De har rätt trevliga abstraktionslager för att hantera eeprom, så specifika adresser behövs knappast.
Det nästan mest tjusiga av allt är att man kan deklarera variabler som eeprom-variabler:
Variabeln foo (som ligger på en eeprom-adress) får värdet 42 när man programmerar kretsen. Om det sen i koden finns "foo = 92;" så uppdateras eepromet med det värdet. Startar man om kretsen så har det fortfarande värdet 92. Bekvämt som attan. Rekommenderas förstås inte till loop-variabler, för prestandan blir skräp.
Det nästan mest tjusiga av allt är att man kan deklarera variabler som eeprom-variabler:
Kod: Markera allt
eeprom unsigned char foo = 42;
Re: EEPROM & Wisp628A & MPLAB (HITEC C compilier)
Grejen är att det finns ingen vits med att ha absoluta adresser. Låt kompilatorn sköta det, precis som MPASMs linker gör när man programmerar relativ kod i assembler.v-g skrev:Hårt för dem på höga nivån där allt ska vara så enkelt
Re: EEPROM & Wisp628A & MPLAB (HITEC C compilier)
Ja men då så. Då ska man så klart köra med dom.
Det gäller bara (som vanligt) att förstå vad kompilatorn har för sig,
så att säga, så att man förstår vad som händer då man gör "foo = 92;".
Men står inte allt detta i Hitec C manualen !?
> Grejen är att det finns ingen vits med att ha absoluta adresser.
Helt rätt. Så länge som man inte kommer i närheten av refresh-gränserna
för EEPROM'et så spelar det ingen större roll. Annars kanske man vill ha
bättre kontroll över det hela.
Det gäller bara (som vanligt) att förstå vad kompilatorn har för sig,
så att säga, så att man förstår vad som händer då man gör "foo = 92;".
Men står inte allt detta i Hitec C manualen !?
> Grejen är att det finns ingen vits med att ha absoluta adresser.
Helt rätt. Så länge som man inte kommer i närheten av refresh-gränserna
för EEPROM'et så spelar det ingen större roll. Annars kanske man vill ha
bättre kontroll över det hela.
Re: EEPROM & Wisp628A & MPLAB (HITEC C compilier)
Nu fick jag ihop det. Men kompilatorn accepterade inte det som du skrev, utan den tvingade mig att ange alla 8 byte... Konstigt, men om jag läser i manualen så uppfattar jag det också som att man måste ange 8 bytes, inte upp till 8
.
För att ladda ner manualen måste man registrera sig på HI-TECs hemsida, helkonstigt.. Men manualen ligger på datorn när man har installerat kompilatorn.
Det finns en massa färdiga funktioner i HITEC C för att skriva till eeprom i run-time, men det har jag inte vågat prova, de är väll inte så effektiva kan jag tro, så jag skrev helt enkelt enligt PICens datablad
.

För att ladda ner manualen måste man registrera sig på HI-TECs hemsida, helkonstigt.. Men manualen ligger på datorn när man har installerat kompilatorn.
Det finns en massa färdiga funktioner i HITEC C för att skriva till eeprom i run-time, men det har jag inte vågat prova, de är väll inte så effektiva kan jag tro, så jag skrev helt enkelt enligt PICens datablad

Re: EEPROM & Wisp628A & MPLAB (HITEC C compilier)
> ...men det har jag inte vågat prova, de är väll inte så effektiva kan jag tro,
Det skulle förvåna mycket om inte de färdiga funktionerna gör i princip
samma sak som beskrivs i databladet. Vad skulle de annars göra ? Och vad
menar du med "effektiva", du måste ju i alla fall vänta på en "write", den
går inte snabbare än vad den gör...
Det skulle förvåna mycket om inte de färdiga funktionerna gör i princip
samma sak som beskrivs i databladet. Vad skulle de annars göra ? Och vad
menar du med "effektiva", du måste ju i alla fall vänta på en "write", den
går inte snabbare än vad den gör...
Re: EEPROM & Wisp628A & MPLAB (HITEC C compilier)
Effektiva och effektiva. De är inte mer ineffektiva än då du skriver koden själv i assembler enligt databladet. Det ineffektiva uppstår om du använder eeprom-datatyper för loop-variabler, eller variabler som kräver access snabbt och ofta. Då blir det *mycket* redundans.squiz3r skrev:Det finns en massa färdiga funktioner i HITEC C för att skriva till eeprom i run-time, men det har jag inte vågat prova, de är väll inte så effektiva kan jag tro, så jag skrev helt enkelt enligt PICens datablad.
För variabler som man vill spara undan och läsa då och då (dvs inte så ofta, kanske bara vid start) så är eeprom-datatypen ypperlig.
Re: EEPROM & Wisp628A & MPLAB (HITEC C compilier)
Ok. Min erfarenhet av såna färdiga funktioner är inte bra, tex för att styra HD44780 LCD'er, då är det allt annt än kodeffektivt att använde de funktionerna
.
