axe 216

MGU

Senior Member
je ne trouve aucun programme pour ce module pouvez vous m'aider
Bonjour,

Il y a déjà le quartz horloger, on peut faire une horloge, manque juste un LCD1602 et un DS1307.

Il y a quelques temps, j'avais expérimenté:
http://electromag1.wifeo.com/horloge-temps-reel-ds1307-picaxe-lcd-serie.php
La vidéo et le code sont pas extraordinaires...

On trouve sur eBay des modules DS1307, avec quartz, et batterie rechargeable LIR2032 (attention , la batterie est souvent remplacée par une pile CR2032, qui se retrouve "chargée" à 4,4 V ! On trouve tout sur eBay...lire la description du produit !).
Mais on trouve aussi des modules avec un DS3132, plus précis, sans quartz, compensé en t° avec une LIR2032, pour 1 euro, port gratuit...
Ces modules sont en I2C, il utilisent le même code, comme celui ci:
(Faut aussi ajouter un poussoir)

Code:
'########################################
'# 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 poussoir
;Faire défiler les chiffres par appuis sur le poussoir
;Lorsque le bon chiffre apparait, attendre 2 secondes
;Le chiffre est mémorisé et on passe au suivant 
;A la fin, réparer la minute entière suivante
; Affichage "TOP SYNCHRO" pour attendre la seconde "S"
;appuyer sur pouss et relacher lorsque la seconde tombe
;l'écran affiche la date et l'heure


	#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 500  	'temps initialisation LCD	
	' Initialisation DS3231
	'****** %11010000 est l'adresse i2c ******** 	
	hi2csetup i2cmaster,%11010000, i2cslow, i2cbyte	;init I2C
	
	#macro transdectobcd(varb)	;transformation de dec vers bcd, y a pas sur M2...
		dch=varb//10
		varb=varb/10*16		'mises au format BCD
		varb=varb+dch		'pour enregistrement
	#endmacro

	Do			'boucle principale
	if pouss=0 then gosub init	;un appui sur poussoir pour le réglage	
 	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,%00010000)	
	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
MMz
 
Last edited:
Top