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