Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : Jérémy
Flasher data dans EEPROM PIC en C
-
flolarajasse
Membre- Messages : 22
- Enregistré en : septembre 2015
Bonjour,
J'ai su qu'il était possible d'écrire des données dans l'EEPROM du PIC directement à son démarrage, sans passer par toute la procédure qu'on trouve dans le datasheet. Savez vous quelles sont les instructions adéquates? J'ai cherché sur le net, je n'ai rien trouvé de particulier.
Pour info, je travaille avec un PIC18F4431 avec MPLABX et XC8 comme compilo.
Merci d'avance, et bonne journée
J'ai su qu'il était possible d'écrire des données dans l'EEPROM du PIC directement à son démarrage, sans passer par toute la procédure qu'on trouve dans le datasheet. Savez vous quelles sont les instructions adéquates? J'ai cherché sur le net, je n'ai rien trouvé de particulier.
Pour info, je travaille avec un PIC18F4431 avec MPLABX et XC8 comme compilo.
Merci d'avance, et bonne journée
Flasher data dans EEPROM PIC en C
-
flolarajasse
Membre- Messages : 22
- Enregistré en : septembre 2015
J'ai trouvé cette page, l'instruction assembleur serait 'DE', existe-t-il une équivalence en C?
http://fabrice.sincere.pagesperso-orang ... eeprom.htm
http://fabrice.sincere.pagesperso-orang ... eeprom.htm
Flasher data dans EEPROM PIC en C
-
flolarajasse
Membre- Messages : 22
- Enregistré en : septembre 2015
Pour faire une "synthèse" des mes problèmes :
- Celui cité sur le message ci-dessus ; j'ai l'impression que cette instruction :
écrit sur 2 octets au lieu d'un seul, d'où l'erreur quand j'écris l'instruction suivante :
Comment écrire seulement sur un octet? Pourtant unsigned char correspond à un octet?!?
- 2ème problème : le programme ci-dessous écrit mes données en EEPROM en simulation, mais pas en debug sur mon PIC? Savez vous pourquoi? Le problème ne vient pas de mes bits de config, ils sont tous en "no code-protected".
- Celui cité sur le message ci-dessus ; j'ai l'impression que cette instruction :
Code : Tout sélectionner
const unsigned char abc0 @ 0xF00000 = 0x05; // Écrit dans la première case de l'EEPROM la valeur 0x05 au démarrage
écrit sur 2 octets au lieu d'un seul, d'où l'erreur quand j'écris l'instruction suivante :
Code : Tout sélectionner
const unsigned char abc1 @ 0xF00001 = 0x05; // Écrit dans la première case de l'EEPROM la valeur 0x09 au démarrage
:0: error: psect "_abc1_const" not relocated on 0x2 byte boundary
Comment écrire seulement sur un octet? Pourtant unsigned char correspond à un octet?!?
- 2ème problème : le programme ci-dessous écrit mes données en EEPROM en simulation, mais pas en debug sur mon PIC? Savez vous pourquoi? Le problème ne vient pas de mes bits de config, ils sont tous en "no code-protected".
Code : Tout sélectionner
unsigned char valeur1 = 5;
unsigned char valeur2 = 10;
void ecriture_valeur_eeprom (void)
{
EEADR = 0x00; // Ecriture adresse
EEDATA = valeur1;
EECON1bits.EEPGD = 0; // Access data EEPROM memory.
EECON1bits.CFGS = 0; // Acces program flash or data EEPROM memory.
EECON1bits.WREN = 1; // Allows erase/ write cycles.
INTCONbits.GIE = 0; // Disable interrupts.
EECON2 = 0x55;
EECON2 = 0xAA;
EECON1bits.WR = 1; // Initiates a data EEPROM erase/write cycle
while (EECON1bits.WR == 1)
{
}
EECON1bits.WREN = 0; // Inhibs erase/ write cycles.
EEADR = 0x01; // Ecriture adresse
EEDATA = valeur2;
EECON1bits.EEPGD = 0; // Access data EEPROM memory.
EECON1bits.CFGS = 0; // Acces program flash or data EEPROM memory.
EECON1bits.WREN = 1; // Allows erase/ write cycles.
//INTCONbits.GIE = 0; // Disable interrupts.
EECON2 = 0x55;
EECON2 = 0xAA;
EECON1bits.WR = 1; // Initiates a data EEPROM erase/write cycle
while (EECON1bits.WR == 1)
{
}
EECON1bits.WREN = 0; // Inhibs erase/ write cycles.
INTCONbits.GIE = 1; // Enable interrupts.
}
int main(int argc, char** argv)
{
Config_Init();
ecriture_valeur_eeprom();
while(1)
{
}
}
Flasher data dans EEPROM PIC en C
bonjour
1et 2
Tu ne crois pas, que ton adresse 0xF00000 est un peut élevé.32K soit 0X7FF0 c'est le max.Le problème, ne vient pas de la, car sur 18F, EEPROM, est en fin de programme,pas facile. Voir IMAGE1, bienvenu est en fin de mon programme, écrit avec la fonction ci joint , memprom pointe sur un tableau
Je ne connais pas ton problème, tu veux modifier après,ces variables?
A+
1et 2
Code : Tout sélectionner
const unsigned char abc0 @ 0xF00000 = 0x05; // Écrit dans la première case de l'EEPROM la valeur 0x05 au démarrage
Tu ne crois pas, que ton adresse 0xF00000 est un peut élevé.32K soit 0X7FF0 c'est le max.Le problème, ne vient pas de la, car sur 18F, EEPROM, est en fin de programme,pas facile. Voir IMAGE1, bienvenu est en fin de mon programme, écrit avec la fonction ci joint , memprom pointe sur un tableau
Code : Tout sélectionner
void
near ecritureEeprom(int nb)
{
EEADR = 0;
for (i=0;i <= nb; i++)
{
EECON1bits.EEPGD = 0;
EECON1bits.WREN = 1;
EEDATA = memprom[i];
EECON2 = 0x55;
INTCONbits.GIE = 0;
EECON2 = 0xAA;
EECON1bits.WR = 1;
INTCONbits.GIE = 1;
while (!PIR2bits.EEIF); teste le flag eeprom
PIR2bits.EEIF = 0;
EEADR++;
}
}
Je ne connais pas ton problème, tu veux modifier après,ces variables?
A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Flasher data dans EEPROM PIC en C
-
flolarajasse
Membre- Messages : 22
- Enregistré en : septembre 2015
J'avais lu sur un forum que l'adresse de l'EEPROM commençait en 0xF00000 ; c'est pour ça que j'ai mis cette valeur.
Mais tu n'a pas spécialement répondu à mes questions avec ton exemple :
- Comment se fait-il que mon instruction écrive dans 2 octets au lieu d'un seul?
- Pourquoi mon programme fonctionne en simul mais pas en debug?
pour répondre à ta question, j'écris des valeurs en EEPROM au démarrage, puis les modifies au cours de mon programme ci-besoin.
Mais tu n'a pas spécialement répondu à mes questions avec ton exemple :
- Comment se fait-il que mon instruction écrive dans 2 octets au lieu d'un seul?
- Pourquoi mon programme fonctionne en simul mais pas en debug?
pour répondre à ta question, j'écris des valeurs en EEPROM au démarrage, puis les modifies au cours de mon programme ci-besoin.
Flasher data dans EEPROM PIC en C
-
flolarajasse
Membre- Messages : 22
- Enregistré en : septembre 2015
Flasher data dans EEPROM PIC en C
bonjour
Vous devriez essayer cela:
cela fonction chez moi
Merci je n’ai jamais utiliser cette adresse. j'utilise EEprom plutôt pour les paramètres a l'int, si eeprom vierge active le menu paramètres
voila pour le 1
Pour le 2 je ne connais que 2 façons d'utiliser le debuggeur :
-en mode simulation
-en mode réel in situ en utilisant comme interface le programmateur entre le PC et la carte
la fonction ecritureEeprom à était passe en mode simulation avec debug. Donc je ne comprend pas trop ou est votre problème(fonctionne en simulation pas en debug), un petit explication merci
A+
Vous devriez essayer cela:
Code : Tout sélectionner
const char mesPagesRom [] @ 0XF00000 ={ 0X01,0X9};
Merci je n’ai jamais utiliser cette adresse. j'utilise EEprom plutôt pour les paramètres a l'int, si eeprom vierge active le menu paramètres
voila pour le 1
Pour le 2 je ne connais que 2 façons d'utiliser le debuggeur :
-en mode simulation
-en mode réel in situ en utilisant comme interface le programmateur entre le PC et la carte
la fonction ecritureEeprom à était passe en mode simulation avec debug. Donc je ne comprend pas trop ou est votre problème(fonctionne en simulation pas en debug), un petit explication merci
A+
Flasher data dans EEPROM PIC en C
-
flolarajasse
Membre- Messages : 22
- Enregistré en : septembre 2015
Flasher data dans EEPROM PIC en C
bon ok
faite un test, point d’arrêt avant fonction écriture puis un test après la fonction si ok c'est AHMA,il ne doit pas aimer être interrompue en mode pas à pas entre
et la
je préféré utiliser les fag pour tout test de fin d' opération, ici fin écriture car même en simulation j'ai eu quelques soucis avec WR en autre, ce n'est il va de soit qu'un simple conseil
A+
faite un test, point d’arrêt avant fonction écriture puis un test après la fonction si ok c'est AHMA,il ne doit pas aimer être interrompue en mode pas à pas entre
Code : Tout sélectionner
EECON2 = 0xAA;
EECON1bits.WR = 1;
et la
je préféré utiliser les fag pour tout test de fin d' opération, ici fin écriture car même en simulation j'ai eu quelques soucis avec WR en autre, ce n'est il va de soit qu'un simple conseil
A+
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 53 invités