Bonjour, j'utilise un PCF8583 sur ma carte électronique gérée par un PIC 16F876A, j'ai aussi une pile CR2032 connectée sur le RealTimeClock PCF et j'ai un souci de sauvegarde de l'horloge: au démarrage du programme, je lit le PCF, j'affiche, j'attends et si l'heure = 00:00; je lui rentre une valeur dedans et je relis le PCF et je l'affiche, j'ai bien ce que je lui ai envoyé.
Mais seulement quand j'éteinds le montage avec la pile bien connectée sur le PCF, il fait la même chose, à savoir qu'il m'affiche 00:00 , l'heure qu'il vient de lire dans le PCF, je ne comprends pas pourquoi il n'y a pas de sauvegarde alors même que le Vdd du PCF est à 3V...
Le schéma:
contrôlé par le 16F876A:
Code:;NEUF EQU B'00100000' ; valeur en 7 segments de NEUF ;BLANC EQU B'11111110' ; pas d'affichage, accès avec 10 ;LETTRECM EQU B'01001110' ; valeur de c en 7 segments accès avec 11 ;LETTREC EQU B'10001100' ; valeur de C en 7 segments accès avec 12 ;LETTRED EQU B'01000010' ; valeur de d en 7 segments accès avec 13 ;LETTREE EQU B'00001100' ; valeur de E en 7 segments accès avec 14 ;LETTREF EQU B'00011100' ; valeur de F en 7 segments accès avec 15 ;LETTREP EQU B'00011000' ; valeur de P en 7 segments accès avec 16 ;DEGRE EQU B'00000000' ; valeur de ° en 7 segments accès avec 17 ; Affiche P C F (blanc) movlw D'16' ; charger 16 movwf dact1 ; dans digit1 movlw D'12' ; charger 12 movwf dact2 ; dans digit1 movlw D'15' ; charger 15 movwf dact3 ; dans digit1 movlw D'10' ; charger 10 movwf dact4 ; dans digit1 ;***** balayage de l'affichage activé bsf T1CON, TMR1ON ; mise en route du timer1 call tempolong ; tempo longue pour affichage visible quelques instants call tempolong ; ;***** balayage de l'affichage désactivé bcf INTCON,GIE ; désactiver toutes les interruptions bcf T1CON, TMR1ON ; mise hors service du timer1 ;***** lecture du RTC PCF8583 call lecture_pcf ; va lire le PCF8583 ;***** fonction de mise en forme de l'heure dans les digits call conv_pcf ; va convertir les données lues ;***** balayage de l'affichage activé bsf T1CON, TMR1ON ; mise en route du timer1 bsf INTCON,GIE ; réactiver toutes les interruptions call tempolong ; tempo longue pour affichage visible quelques instants call tempolong ; call tempolong ; ;***** balayage de l'affichage désactivé bcf INTCON,GIE ; désactiver toutes les interruptions bcf T1CON, TMR1ON ; mise hors service du timer1 ;***** vérification si date différent de 01/01/xxxx 0 H 00 M 00 S 00 1/100 S verifdate movlw 0x00 ; charge 0 dans w subwf heure,w ; (heure) - w dans w btfss STATUS, Z ; saute si = 0 goto verifdateok ; sort de la routine de vérification movlw 0x00 ; charge 0 dans w subwf minute,w ; (minute) - w dans w btfss STATUS, Z ; saute si = 0 goto verifdateok ; sort de la routine de vérification ;***** pas à l'heure? => recherche DCF ; désactiver toutes les interruptions sauf ; timer1 servant à l'affichage ; envoyer DCF à l'afficheur ; attendre, ... ; et envoyer "d" sur un des 4 digits en continu ; et désactiver toutes les interruptions pour ; ne pas perturber la recherche de l'heure ; ; ; recherche DCF terminée? ; oui => écriture dans PCF8583 ; pour l'exemple => 18 H 56 movlw D'1' ; charger 15 movwf dact1 ; dans digit1 movlw D'8' ; charger 11 movwf dact2 ; dans digit1 movlw D'5' ; charger 14 movwf dact3 ; dans digit1 movlw D'6' ; charger 10 movwf dact4 ; dans digit1 ;***** convertit les données pour les envoyer au PCF8583 call conv_pour_pcf ; va convertir ;***** écriture des données "formatées" au PCF8583 call ecriture_pcf ; mettre à jour le PCF8583 ;******************************** ;*pour test de sauvegarde pcf8583 movlw 0x01 movwf dact1 clrf dact2 clrf dact3 clrf dact4 ;********************************* ;***** balayage de l'affichage activé bsf T1CON, TMR1ON ; mise en route du timer1 bsf INTCON,GIE ; réactiver toutes les interruptions call tempolong ; call tempolong ; ; Affiche P c F (blanc) movlw D'16' ; charger 16 movwf dact1 ; dans digit1 movlw D'11' ; charger 11 movwf dact2 ; dans digit1 movlw D'15' ; charger 15 movwf dact3 ; dans digit1 movlw D'10' ; charger 10 movwf dact4 ; dans digit1 call tempolong ; call tempolong ; ;***** balayage de l'affichage désactivé bcf INTCON,GIE ; désactiver toutes les interruptions bcf T1CON, TMR1ON ; mise hors service du timer1 ;***** lecture du RTC PCF8583 call lecture_pcf ; va lire le PCF8583 ;***** fonction de mise en forme de l'heure dans les digits call conv_pcf ; va covertir les données lues verifdateok ;***** RTC à l'heure => exécution programme principal premain ; label pour les tests bsf INTCON,GIE ; réactiver toutes les interruptions ;***** balayage de l'affichage activé bsf T1CON, TMR1ON ; mise en route du timer1 ;***** programme principal boucle movf TMR0, w ; btfsc STATUS, Z ; TMR0 overflow? call special ; oui => ; y a t-il un comptage à faire? btfsc mode, OPE ; saute si OPE = 0 goto comptage goto boucle ; boucler
-----