Ecriture En EEPROM Introduction Pour ce Projet, on est sensé donner une façon d

Ecriture En EEPROM Introduction Pour ce Projet, on est sensé donner une façon d’écrire dans l’EEPROM du PIC 16F84A qui, comme nous le savons dispose de 64 octets (64 x 8 bits) de mémoire EEPROM. Les EEPROM (Electrically Erasable Programmable Read Only Memory) sont effaçables et programmables par l'utilisateur. Elles sont plus faciles à effacer que les EPROM car elles sont effaçables électriquement donc sans manipulations physiques. On rappelle qu'une opération d'écriture dans une mémoire de type EEPROM est très lente : plusieurs millisecondes (1 ms = 5 000 cycles avec un quartz de 20 MHz !).Et elles sont accessibles indirectement à travers les registres EEADR, EEDATA, EECON1 et EECON2. Définition des différents registres entrant en jeu dans cette opération : Registre EEADR Dans ce registre, on met l'adresse de la mémoire EEPROM que l'on veut lire ou écrire Cette adresse est limitée à l'espace 00h-3Fh (64 cases) Tous bits: Fonctionne en R/W Après Power On Reset: état aléatoire Après tous les autres Resets: inchangé Le 16f84 consomme légèrement moins si les bits de ce registre sont à 0, on peut donc commencer un programme par clrf EEADR Les 64 octets sont situés aux adresses 0x00 à 0x3F. Registre EEDATA Ce registre contient la valeur de la mémoire EEPROM que l'on veut lire ou écrire; on y met donc la valeur désirée avant la procédure d'écriture, on va y lire la valeur après une procédure de lecture. Il se situe a l’adresse 0x08 (banque 0) ? Tous bits Fonctionne en R/W Après Power On Reset: état aléatoire Après tous les autres Resets: inchangé Registre EECON1 C'est le registre de contrôle de la mémoire EEPROM Les trois bits forts sont à 0 Bit 4: EEIF EEPROM Interrupt Flag Fonctionne en R/W Après Power On Reset: Passe à 0 Après tous les autres Resets: Passe à 0 EEIF =1: l'opération d'écriture s'est terminée correctement EEIF =0: l'opération d'écriture n'est pas terminée, ou n'a pas commencé Penser à le remettre à 0 avant de lancer une écriture dans l'EEPROM Bit 3: WRERR Write Error Fonctionne en R/W Après Power On Reset: état aléatoire Après tous les autres Resets: Selon le cas WRERR =1: L'écriture a été interrompue prématurément par un Reset MCLR ou par le Watchdog WRERR =0: L'écriture n'a pas été interrompue prématurément Bit 2: WREN Write Enable Fonctionne en R/W Après Power On Reset: Passe à 0 Après tous les autres Resets: Passe à 0 WREN =1: Autorise l'écriture de l'EEPROM WREN =0: Interdit l'écriture de l'EEPROM Penser à le remettre à 0 après écriture Bit 1: WR Write Fonctionne en Read et en mise à 1 uniquement Après Power On Reset: Passe à 0 Après tous les autres Resets: Passe à 0 Après le cycle d'écriture: Passe à 0 WR =1: Lance l'écriture dans l'EEPROM WR =0: Le cycle d'écriture de l'EEPROM est terminé Bit 0: RD Read Fonctionne en Read et en mise à 1 uniquement Après Power On Reset: Passe à 0 Après tous les autres Resets: Passe à 0 Après le cycle de lecture: Passe à 0 RD =1: Permet la lecture de l'EEPROM RD =0: Le cycle de lecture de l'EEPROM est terminé Registre EECON2 Ce registre n'est utilisé qu'en écriture lors de l'écriture dans une mémoire EEPROM La séquence 55h AAh doit lui être écrite Ce registre est virtuel, situé dans l'adresse 0x89 (banque 1) de la mémoire des données (Data RAM). Lecture d'une donnée en mémoire EEPROM L'opération dans l'ordre est la suivante: L'adresse est mise dans le registre EEADR (09h) Le bit 0 RD du registre EECON1 (88h) est mis à 1 (par bsf EECON1,RD), il passera seul à 0 quand la lecture sera terminée La lecture du contenu se fait par lecture du registre EEDATA (08h) Exemple: (l'adresse de la case EEPROM à lire est dans le registre de travail W, le résultat sera dans W) movwf EEADR; met cette adresse dans EEADR bsf STATUS,RP0; passe en page 1 bsf EECON1,RD; lance l'opération de lecture bcf STATUS,RP0; passe en page 0 movf EEDATA,W; met le contenu de l'EEPROM dans le registre de travail W Ecriture d'une donnée en mémoire EEPROM L'opération dans l'ordre est la suivante: L'adresse est mise dans le registre EEADR (09h) Le contenu à transférer est mis dans le registre EEDATA (08h) Toutes les interruptions sont inhibées par mise à 0 du bit 7 GIE du registre INTCON (0Bh ou 8Bh) L'écriture est autorisée par mise à 1 du bit 2 WREN du registre EECON1 (88h) Mettre la valeur 55h dans le registre EECON2 Mettre la valeur AAh dans le registre EECON2 Lancer l'écriture dans l'EEPROM par mise à 1 du bit 1 WR du registre EECON1 (88h); ce bit passera seul à 0 quand l'écriture sera terminée, ce qui peut prendre une dizaine de millisecondes. Remettre l'autorisation des interruptions par mise à 1 du bit 7 GIE du registre INTCON Interdire l'écriture par mise à 0 du bit 2 WREN du registre EECON1 (88h) Le Power up Timer de 72 ms interdit une écriture accidentelle à l'allumage Lorsque l'écriture a eu lieu, le bit 4 (EEIF) du registre EECON1 (88h) passe à 1 Il peut être bon de vérifier que l'opération d'écriture s'est bien passée, le bit 3 WRERR du registre EECON1 (88h) est à 1 quand l'opération a été interrompue par un Reset MCLR ou un Watchdog; il faut alors recommencer, mais les valeurs dans EEDATA et EEADR sont toujours valables. Une interruption peut être générée à la fin de cette écriture: L' interruption est autorisée si le bit 6 (EEIE) du registre INTCON (0Bh ou 8Bh) est à 1 Exemple: (La valeur à écrire et l'adresse sont dans EEDATA etEEADR) bcf INTCON,GIE ; interdiction des interruptions bsf STATUS,RP0 ; passe en page 1 bcf EECON1,EEIF ; met à 0 le flag de fin d'écriture au cas où il serait à 1 bsf EECON1,WREN ; autorise l'écriture movlw h'55' movwf EECON2 ; exigé par le PIC movlw h'aa' movwf EECON2 ; exigé par le PIC bsf EECON1,WR ; lance l'écriture bcf EECON1,WREN ; interdit une nouvelle écriture bcf STATUS,RP0 ; passe en page 0 bsf INTCON,GIE ; ré-autorise éventuellement les interruptions Mémoire de configuration: (Mémoire flash) Elle s'étend de h'2000' à h'2007' et contient des bits de configuration Chaque mémoire occupe 14 bits mais tous ne sont pas accessibles Cette mémoire est non volatile Elle ne peut être écrite et effacée que 1000 fois Elle n'est accessible qu'à la programmation du PIC Cases Mémoire 2000h à 2003h: Il est possible d'y inscrire des informations d'identification sur les 4 bits de poids faible grâce à la directive DE après avoir précisé comme origine h'2000'. Case Mémoire 2007h: Les bits 0 et 1 (FOSC0) et (FOSC1) déterminent le Type d'oscillateur utilisé Mémoire programme 2007h Bit 1 (FOSC1) Bit 0 (FOSC0) Type d'oscillateur 1 1 RC (par défaut) 1 0 HS 0 1 XT 0 0 LP Le bit 2 (WDTE) autorise ou non le fonctionnement du Watchdog Timer Mémoire de configuration 2007h Bit 2 (WDTE) WatchDog Timer Enable 1 par défaut Watch Dog actif 0 Watch Dog désactivé Le bit 3 (PWRTE) autorise ou non le fonctionnement du Power UP Timer produisant un délai de 72 ms à l'allumage qui prolonge le Power On Reset (POR) Mémoire de configuration 2007h Bit 3 (PWRTE) Power-Up Timer Enable 1 par défaut Power-Up Timer désactivé 0 Power-Up Timer actif Ce délai dépend de la température et de la tension d'alimentation. Le bits 4 (CP) Code Protection permet d'interdire la lecture du code programme dans le microcontroleur, son effacement est toujours autorisé, et les EEPROMS sont toujours lisibles. Mémoire de configuration 2007h Bits 4 (CP) Program memory Code Protection 1 par défaut La lecture n'est pas protégée 0 La lecture est interdite Les 5 bits sont à 1 par défaut, soit Pas de Code Protect Pas de Power UP Timer Watchdog actif Oscillateur RC Code Protect Power Up Timer Watchdog Oscillateur bit 4 bit 3 bit 2 bit 1, bit 0 0->Oui 0->Oui 0->Non 00->LP, 01->XT 1->Non 1->Non 1->Oui 10->HS, 11->RC Note : On écrit dans la mémoire de configuration avec la directive __config uploads/Litterature/ 3-ecriture-eeprom.pdf

  • 50
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager