Electromag1 Circuits électroniques et Picaxes

Petit site pour ceux qui bricolent en électronique en général et sur les PICAXES en particulier.
Les PICAXES sont des microprocesseurs (PIC de Microship) programmables en BASIC. Pleins de qualités, pas chers, ultra faciles à programmer.
Tout (ou presque) est sur le site du distributeur Gotronic (voir les liens).
Les pages  seront ajoutées ou modifiées petit à petit.
Dans le but d'améliorer ce blog, communiquez moi vos remarques et les erreurs que vous pouvez constater.
Pour me contacter: Envoyez un mail à l'adresse : mag1mic@free.fr .  Tout message reçoit une réponse
Pour retourner au menu, Cliquer sur "LISTE DES PAGES", ici ou en haut de la colonne de gauche
Pour laisser un message, allez dans le "LIVRE D'OR"
Bonne visite
 
 

Horloge RTC DS3231 et picaxe 08M2


Le DS3231 est une alternative au DS1307. On le trouve sur eBay à 1 euro, port gratuit, sur le module ZS-042, équipé d'une sauvegarde par batterie rechargeable LIR2032. Associé à une mémoire AT24C32 (voir page DS1307).

ATTENTION:
Il faut bien lire la description du produit. Il peut être livré sans batterie.
Mais le batterie LIR2032 (3,6 v) peut aussi être remplacée par une pile CR2032 (3v) qui va être "chargée" avec 4,3 v. Dans ce cas, certains recommandent de couper le circuit de charge ou de remplacer la pile.
Le plus simple est de faire attention, et si il est spécifié une LIR2032 et que l'on reçoit une CR2032, il faut demander le rembourssement pour non conformité (c'est mon avis).
 

Les avantages du DS3231:
Une précision plus grande, le circuit horloge est compensé en température.
Les registres dates et heures sont à la même place que le DS1307, compatibilité du soft avec le DS1307
Possibilité d'enregistrer deux alarmes (date et heure), avec sortie d'impulsions aux heures programmées
Les registres de controles sont déplacés, différentes fréquences disponibles (1 Hz, 1024, 2048...).
De plus, deux registres donnent la température ambiante sur 10 bits (résolution 0,25°C).

Une petite démo:

Les schéma et codes ci dessous donnent un exemple de mise en oeuvre.

Le schéma:
Essentiellement quatre composants:  un ZS-042, un picaxe 0M2, un LCD 1602 série, un poussoir
 
Il serait le même pour un module DS1307
 

Le code:
La différence porte principalement sur le registre de contrôle (n°14), Avec tous les bits à 0, on a une fréquence de 1 Hz (RC 50%) sur le broche SQW.

'########################################
'# Pour PICAXE-08M2 et MAXIM DS3231 RTC #
'# MM 12072016                        #
'########################################
' Plage de dates entre 2000 et 2100
' Affichage des données sur LCD série port LCD  
;MISE A L'HEURE:
;Appui sur le poussoir
;Faire défiler les chiffres par appui sur le poussoir
;Lorsque le bon chiffre apparait, appui pendant 2 secondes
;Le chiffre est mémorisé et on passe au suivant
;Préparer la minute entière suivante
;A la fin de l'initialisation ; Affichage "TOP SYNCHRO"
;appuyer sur pouss et relacher lorsque la seconde tombe
;l'écran affiche la date et l'heure
Debut:
    #picaxe 08m2
    SetFreq m8
    symbol baud=N2400_8    'liaison série à 2400 bauds 8 Mhz
    pullup %1000    ;pullup sur C.3
'***** Nomination des ports *********    
    symbol LCD         =C.0
    symbol pouss     = pinC.3    'poussoir poussation    
'***** Nomination des variables type byte ***********
    symbol ch        =b1    'chiffre
    symbol dch        =b2    'chiffre diz
    symbol col        =b3    'n° colonne    
    symbol varb        =b4    'temporaire byte
    symbol jour        =b5
    symbol mois        =b6
    symbol heure    =b7
    symbol minut    =b8
    symbol second    =b9
'***** Nomination des variables type word **********    
    symbol joursem    =w11
    symbol varw        =w12    'temporaire word
    symbol an         =w13    
'******************************************    
    pause 2000    'temps initialisation LCD    
    ' Initialisation DS3231
    '%11010000 est l'adresse i2c         
    hi2csetup i2cmaster,%11010000, i2cslow, i2cbyte    ;init I2C
    hi2cout 14,(0)  ;raz registre de configuration control DS3231(1Hz sur SQW)    
    #macro transdectobcd(varb)    ;transformation de dec vers bcd
        dch=varb//10
        varb=varb/10*16        'mises au format BCD
        varb=varb+dch        'pour enregistrement
    #endmacro
    if pouss=0 then gosub init    ;un appui sur poussoir pour le réglage
    
    Do            'boucle principale
    if pouss=0 then gosub tempe
     hi2cin 3,(varb)  ' jour de semaine lu dans le registre 3       
    bcdtoascii varb,dch,ch  ' DS1307 les données sont au format BCD
    serout LCD,baud,(254,128)
 
    if        ch="1" then serout LCD,baud,(" Dim ") 'affichage du jour de la semaine
    elseif    ch="2" then serout LCD,baud,(" Lun ")
    elseif    ch="3" then serout LCD,baud,(" Mar ")
    elseif    ch="4" then serout LCD,baud,(" Mer ")
    elseif    ch="5" then serout LCD,baud,(" Jeu ")
    elseif    ch="6" then serout LCD,baud,(" Ven ")
    elseif    ch="7" then serout LCD,baud,(" Sam ")
    endif    
    
    hi2cin 4,(jour)    ' jour lu dans le registre 4
    bcdtoascii jour,dch,ch    
    serout LCD,baud,(dch,ch,"/")
    
    hi2cin 5,(mois)    ' mois lu dans le registre 5
    bcdtoascii mois,dch,ch
    serout LCD,baud,(dch,ch,"/")
    
    hi2cin 6,(an)    ' année lue dans le registre 6.  
    bcdtoascii an,dch,ch
    serout LCD,baud,("20",dch,ch," ")
    
    serout LCD,baud,(254,192)    
    hi2cin 2,(heure)    ' heure lue dans le registre 2
    bcdtoascii heure,dch,ch
    serout LCD,baud,(254,192,"    ",dch,ch)
    
    hi2cin 1,(minut)    ' Minute lue dans le registre  1
    bcdtoascii minut,dch,ch
    serout LCD,baud,(":",dch,ch)
    
    hi2cin 0,(second)    ' Seconde lue dans le registre  0
    bcdtoascii second,dch,ch
    serout LCD,baud,(":",dch,ch,"    ")         
    loop            ' fin boucle principale
    
'******* Initialisation du DS1307 ************************    
init:    ;Procédure intro date et heure  
    ;Do: loop while pouss=0    'attente relachement poussoir    
    serout LCD,baud,(254,1)    'Effacement écran
    serout LCD,baud,(254,128,"20aa/MM/jj hh:mm ")    'Modèle du format
        
'********* an ***************
    Do: loop while pouss=0    'Attente relachement poussoir
    col=194            'Position colonne 1er chiffre    
    gosub chiffre        'routine affichage
    dch=ch            'mémoire dizaine
    col=195            'position 2éme chiffre    
    gosub chiffre    
    an=dch*10+ch        'nombre année
        
'******* mois ********
    col=197    
    gosub chiffre
    dch=ch    
    col=198    
    gosub chiffre    
    mois=dch*10+ch
    
'****** jour ********
    col=200        'chiffre des dizaines    
    gosub chiffre
    dch=ch    
    col=201        'chiffre des unités        
    gosub chiffre    
    jour=dch*10+ch
    
'******** heure **************
    col=203    
    gosub chiffre
    dch= ch
    col=204        
    gosub chiffre
    heure=dch*10+ch
    
'******** minutes **********
    col=206
    gosub chiffre
    dch= ch
    col=207    
    gosub chiffre
    minut=dch*10+ch    

'***** calcul joursem ****************
    'L'algorithme de Mike Keith numérote de 0 à 6
    'Dim=0, Lun=1,...,Sam=6    
    an= 2000+an    
    if mois < 3 then
             varw=an-1
            else varw=an
    end if    
    joursem= 23*mois/9 +jour+4+an
    w10=varw/4
    joursem=joursem+w10
    w10=varw/100
    joursem=joursem-w10
    w10=varw/400
    joursem=joursem+w10
    if mois>= 3 then
            joursem=joursem-2
    endif
    joursem=joursem//7+1    ;+1 pour numérotation de 1 à 7 idem DS1307
'***********************************************
    transdectobcd(minut)    
    transdectobcd(heure)    
    transdectobcd(jour)    
    transdectobcd(mois)    
    an=an-2000
    transdectobcd(an)    
    serout LCD,baud,(254,1,254,131,"TOP SYNCHRO",254,194,"au relachement")    ;c'est prêt
    do loop while pouss=1    ;appui à s-qques secondes
    do loop while pouss=0    ;relâchement quand la seconde tombe
    hi2cout 0, ($00,minut,heure,joursem,jour,mois,an)   ;mise en mémoire EEPROM
    return
    
'******* Sous programme affichage et incrémentation ***************    
chiffre:    
    ch=0
    serout LCD,baud,(254,col,#ch)    
    Do            
        serout LCD,baud,(254,col,#ch)
        do loop while pouss=0
        time=0
        do
            if time > 1 then retour
            pause 10                    
        loop while pouss=1        
            inc ch
            if ch>9 then
                ch=0
            endif                
    loop
retour:            
    return

tempe:
    do loop while pouss=0    ;attente relachement
    serout LCD,baud,(254,1,254,130,"TEMPERATURE")
    do
    hi2cin 17,(varb)     ;partie entière température
    bintoascii varb,b1,b2,b3   
    serout LCD,baud,(254,195,b2,b3,".")  ;affichage
    hi2cin 18,(varb)     ;partie décimale (résol 0,25°C)
    varb=varb/64*25      ;calcul en 1/4 de °C
    bintoascii varb,b1,b2,b3
    serout LCD,baud,(254,198,b2,b3," ßC")    ;ß =alt+0223 =° sur afficheur chinois    
    loop while pouss=1    ;boucle
    do loop while pouss=0    ;attente relachement
    return







 



Créer un site
Créer un site