|
|
View previous topic :: View next topic |
Author |
Message |
oxxyfx
Joined: 24 May 2007 Posts: 97
|
Default value of eeprom memory |
Posted: Wed Jul 18, 2007 8:57 am |
|
|
Hello,
I am trying to implement a code which will set some default values in eeprom locations on the 16F88 if previously nothing been set.
The eeprom locations are defined like this:
Code: |
#Define Close 60
#Define Normal 50
#Define Far 40
#Define Low 9
#Define Medium 7
#Define High 5
#Define EESens 0
#Define EEDist 1
#Define EETime 2
|
Then I check if any values have been written to it previously if it hasn't then I put in a default value:
Code: |
Sensitivity = read_eeprom(EESens);
If (Sensitivity == 255) {
Sensitivity = Medium;
Write_eeprom(EESens,Sensitivity);
}
ETime = read_eeprom(EETime);
If (ETime == 255) {
ETime = 40;
Write_eeprom(EETime,ETime);
}
Dist = read_eeprom(EEDist);
If (Dist == 255) {
Dist = Close;
Write_eeprom(EESens,Dist);
}
|
However I am not sure that these locations by default contain 255. Later down in the execution of the code I have a feeling that these default values are not set properly.
Can somebody please confirm if this assumption is correct or not, an if it is not, than what is the default value of these eeprom locations?
thanks, Ox. |
|
|
Bill Boucher
Joined: 04 Feb 2005 Posts: 34 Location: Chatham,ON,CA
|
|
Posted: Wed Jul 18, 2007 9:09 am |
|
|
Dude, you can put the default eeprom values into your C source using the #ROM directive. You do not have to use up your valuable program memory to run code upon powerup to test for and install defaults. You might have to do that to "restore" defaults later after they've been changed, but if all you want to do is program your chips with default data, then do it like this...
Code: |
// The following initializes the locations of the data EEPROM
// using the #ROM directive
#if defined (__PCM__)
#rom 0x2100={30,0,0x58,0x02,0x20,0x1C,50,0,0xEC,0,8,0,50,0,248,0,38,0,0x58,0x02,0,0}
#elif defined(__PCH__)
#rom int 0xf00000={30,0,0x58,0x02,0x20,0x1C,50,0,0xEC,0,8,0,50,0,248,0,38,0,0x58,0x02,0,0}
#endif
|
|
|
|
oxxyfx
Joined: 24 May 2007 Posts: 97
|
|
Posted: Wed Jul 18, 2007 9:34 am |
|
|
thanks, this probably will work. Now, does this load the eprom every time I boot the Pic? I hope not, because I may change the values using the menu, and I want the values I set to be sitting permanently in my eprom.
Also I noticed why my menu is not working, maybe you have an idea what's going on.
In the menu I enter, and I have the Pic beep me the value of a certain eprom location. after that it gives me 3 or 4 - depending on the menu - choices to choose from and I can set any of these by pressing a button after the beep or beeps for the respective choice have sounded.
Now, once I set a value based on the menu, and I go back again, I get beeped many more times than the value should be. Here is the program:
Code: |
Delay_ms(1500);
Longbeep();
Delay_ms(300);
Shortbeep();
Delay_ms(1500);
If (!Input(M_Button)) {
EndBeep();
Sensitivity = read_eeprom(EESens);
Delay_ms(500);
If(Sensitivity == Low) ShortBeep();
Else If(Sensitivity == Medium) {
ShortBeep();
Delay_ms(300);
Shortbeep();
}
Else If (Sensitivity == High) {
ShortBeep();
Delay_ms(300);
ShortBeep();
Delay_ms(300);
ShortBeep();
}
Else If (Sensitivity == VHigh) {
ShortBeep();
Delay_ms(300);
ShortBeep();
Delay_ms(300);
ShortBeep();
Delay_ms(300);
ShortBeep();
}
Else {
For (iX = 1; iX < Sensitivity; iX++){
Shortbeep();
Delay_ms(250);
}
}
}
Delay_ms(2000);
Over = 0;
While(Over == 0){
Shortbeep();
Delay_ms(1500);
If (!Input(M_button)) {
EndBeep();
Delay_ms(500);
Write_eeprom(EESens,Low);
Over = 1;
}
Else {
ShortBeep();
Delay_ms(300);
ShortBeep();
Delay_ms(1500);
If (!Input(M_button)) {
EndBeep();
Delay_ms(500);
Write_eeprom(EESens,Medium);
Over = 1;
}
Else {
ShortBeep();
Delay_ms(300);
ShortBeep();
Delay_ms(300);
ShortBeep();
Delay_ms(1500);
If (!Input(M_button)) {
EndBeep();
Delay_ms(500);
Write_eeprom(EESens,High);
Over = 1;
}
Else {
ShortBeep();
Delay_ms(300);
ShortBeep();
Delay_ms(300);
ShortBeep();
Delay_ms(300);
ShortBeep();
Delay_ms(1500);
If (!Input(M_button)) {
EndBeep();
Delay_ms(500);
Write_eeprom(EESens,VHigh);
Over = 1;
}
}
}
}
}
|
Here if I write the eprom with let's say Low which is defined to be 9, after I go out and come back, I end up in the Else with the for cycle and it beeps me 49 times. Why is that? Why isn't it writing the value 9 in the eprom location I ask for?
Thanks, ox.
Than |
|
|
ckielstra
Joined: 18 Mar 2004 Posts: 3680 Location: The Netherlands
|
|
Posted: Wed Jul 18, 2007 10:03 am |
|
|
Quote: | Here if I write the eprom with let's say Low which is defined to be 9, after I go out and come back, I end up in the Else with the for cycle and it beeps me 49 times. Why is that? Why isn't it writing the value 9 in the eprom location I ask for? | Your code is not complete so we can only guess.
How did you define Low? Sounds like you are mixing the ASCII-value and binary values.
Code: | #define Low '1' // Will give you 49 beeps
#define Low 1 // Will generate a single beep |
|
|
|
oxxyfx
Joined: 24 May 2007 Posts: 97
|
|
Posted: Wed Jul 18, 2007 10:52 am |
|
|
Thank you. The definitions are in the first post of the thread. I defined them correctly as a binary - not an ASCII. |
|
|
ckielstra
Joined: 18 Mar 2004 Posts: 3680 Location: The Netherlands
|
|
Posted: Wed Jul 18, 2007 11:46 am |
|
|
How do you know it are 49 beeps? With 4 beeps a second you have to count really fast.
Could it be you are hearing 60 beeps?
Code: | #Define Close 60
...
Dist = Close;
Write_eeprom(EESens,Dist); <-- looks like a bug. Writing to EESens, should likely have been EEDist |
|
|
|
oxxyfx
Joined: 24 May 2007 Posts: 97
|
|
Posted: Wed Jul 18, 2007 12:07 pm |
|
|
Thanks for pointing that out... Copy and paste bug....
Ox. |
|
|
Bill Boucher
Joined: 04 Feb 2005 Posts: 34 Location: Chatham,ON,CA
|
|
Posted: Wed Jul 18, 2007 7:11 pm |
|
|
oxxyfx wrote: | thanks, this probably will work. Now, does this load the eprom every time I boot the Pic? I hope not... |
No, the programmer will program the eeprom when you first program your chip. After that, the data is sitting in eeprom. If your program then writes new values at runtime, they'll stay there forever as you wanted. |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|