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 ---
Forum général sur le langage C !

Modérateur : Jérémy

Flasher data dans EEPROM PIC en C
flolarajasse
Membre
Membre
Messages : 22
Enregistré en : septembre 2015

#11 Message par flolarajasse » ven. 2 oct. 2015 10:09

Je ne le fais pas tourner en mode pas à pas, j'ai fait une boucle sans fin ou le programme lit mon adresse. L'écriture se fait en initialisation. Je te poste mon programme ainsi ce que j'obtiens. Je viens de retester en simul, c'est ok, par contre en mode in situ, ça ne marche pas..

Code : Tout sélectionner

const unsigned char mesPagesRom [] @ 0XF00000 ={0x1, 0x0, 0x01, 0x0}; // 

#include <stdio.h>
#include <stdlib.h>
#include <xc.h>

unsigned char adresse_basse = 6;
unsigned char adresse_haute = 9;


void ecriture_adr_eeprom (void)
{
    EEADR = 0x00; // Ecriture adresse  basse
    EEDATA = adresse_basse;
    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;
    //Nop();
    EECON2 = 0xAA;
    EECON1bits.WR = 1; // Initiates a data EEPROM erase/write cycle
    while (EECON1bits.WR != 0)
    {
    }
    EECON1bits.WREN = 0; // Inhibis erase/ write cycles.

    EEADR = 0x01; // Ecriture adresse haute
    EEDATA = adresse_haute;
    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 != 0)
    {
    }
    EECON1bits.WREN = 0; // Inhibis erase/ write cycles.
    INTCONbits.GIE = 1; // Enable interrupts.

}

int main(int argc, char** argv)
{
    ecriture_adr_eeprom();
    while(1)
    {
        EEADR = 0;
        EECON1bits.EEPGD = 0; // Access data EEPROM memory.
        EECON1bits.CFGS = 0; // Access program Flash or data EEPROM memory.
        EECON1bits.RD = 1; // Initiates a memory read (EEPROM read)
        adresse_basse = EEDATA;
        EEADR = 1;
        EECON1bits.EEPGD = 0; // Access data EEPROM memory.
        EECON1bits.CFGS = 0; // Access program Flash or data EEPROM memory.
        EECON1bits.RD = 1; // Initiates a memory read (EEPROM read)
        adresse_haute = EEDATA;
    }

}



Et voilà ce que j'obtiens, pas logique !!Ça n'a pas écrit, sais tu pourquoi?

Sans titre.png
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Flasher data dans EEPROM PIC en C
flolarajasse
Membre
Membre
Messages : 22
Enregistré en : septembre 2015

#12 Message par flolarajasse » ven. 2 oct. 2015 10:57

En revanche, quand je suis en mode simulation, ça fonctionne bien... Une idée? Help me!!! :(
Sans titre.png
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Flasher data dans EEPROM PIC en C
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#13 Message par Guest » ven. 2 oct. 2015 11:47

Bon a priori c'est du coté hard puisque vous avez bien flasher votre EEPROM donc.

Déjà 1/ vous avez bien alimenté votre carte avec sa propre alimentation car sinon le port USB ne fait pas l'affaire?
Je suppose que oui, je ne sais pas ce qu'il y a sur votre carte ? un basculement d' une led sur un port pour voir si c'est oK.
A+

Flasher data dans EEPROM PIC en C
flolarajasse
Membre
Membre
Messages : 22
Enregistré en : septembre 2015

#14 Message par flolarajasse » ven. 2 oct. 2015 11:56

Je ne pense pas que le problème vienne de ma carte, j'ai déjà fait tourner plusieurs programmes dessus. Je sèche vraiment là...

Flasher data dans EEPROM PIC en C
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#15 Message par Guest » ven. 2 oct. 2015 12:17

alors je vous propose ceci:

fait un programme qui bascule la sortie d'un port en fonction du contenue de l'adresse 0 de EEPROM ,que vous changez après chaque lecture ,vous la flashez et vous faite un essai si c'est ok ->problème en mode in situ,Pas ok faite un essai avec ma routine qui sait .

Après je ne sais plus

A+

Flasher data dans EEPROM PIC en C
flolarajasse
Membre
Membre
Messages : 22
Enregistré en : septembre 2015

#16 Message par flolarajasse » ven. 2 oct. 2015 14:34

Comment "changez après chaque lecture" si je ne peux pas écrire dans mon EEPROM?

Flasher data dans EEPROM PIC en C
flolarajasse
Membre
Membre
Messages : 22
Enregistré en : septembre 2015

#17 Message par flolarajasse » ven. 2 oct. 2015 16:37

J'ai fais un programme qui incrémentait ma valeur dans mon EEPROM toutes les secondes et qui l'envoyait ensuite sur le PWM ; mon programme arrivait seulement à lire la valeur dans l'EEPROM, mais par contre n'arrivait pas à écrire à l'intérieur de l'EEPROM...

Flasher data dans EEPROM PIC en C
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#18 Message par Guest » ven. 2 oct. 2015 16:58

flolarajasse a écrit :J'ai fais un programme qui incrémentait ma valeur dans mon EEPROM toutes les secondes et qui l'envoyait ensuite sur le PWM ; mon programme arrivait seulement à lire la valeur dans l'EEPROM, mais par contre n'arrivait pas à écrire à l'intérieur de l'EEPROM...
toutes tes protections fuse sont sur off notamment:

Code : Tout sélectionner

// CONFIG5H
#pragma config CPB = OFF        // Boot Block Code Protection bit (Boot block (000000-0007FFh) not code-protected)
#pragma config CPD = OFF        // Data EEPROM Code Protection bit (Data EEPROM not code-protected)

apres je ne vois plus rien, sinon le µC tu as penser a voir de ce coté la

Flasher data dans EEPROM PIC en C
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#19 Message par Jérémy » ven. 2 oct. 2015 17:44

Désolé de ne pas pouvoir aider, même tu es à un niveau supérieur au mien.

j'ai travaillé avec des EEprom externes en Basic , mais pas celle du PIC .
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Flasher data dans EEPROM PIC en C
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#20 Message par paulfjujo » ven. 2 oct. 2015 19:42

bonsoir,


reference du PIC ?

PIC avec 1K eeprom => adresse sur 16 bits
adresse de debut est bien en 0xF00000.
sur 18F46K22

Code : Tout sélectionner


init EEPROM PIC en C18

#pragma romdata EEP_=0xF00000
  
rom unsigned int EEPROM_data1 =0x0000;  // zone stockage index

//--------------
#pragma romdata EEP300_=0xF003E0
rom unsigned char EEPROM_3E0 [] ={
          
"paulfjujo@free.fr            \r",//A0   sans terminateur zero
          
};
#pragma romdata 
Aide toi, le ciel ou FantasPic t'aidera


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 42 invités