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
CHRONOMÈTRE LONGUE DURÉE de 0 à 99h:59mn
picaxe 08M2 et afficheur TM1637
Cette page est une réponse à une demande sur un forum d'électronique. Il s'agissait de fabriquer un chrono avec "de belles leds rouges bien voyantes". Voir ICI Cette réponse se compose essentiellement de trois composants: un picaxe 08M2, un afficheur horaire basé sur un TM1637 et un poussoir. L'alimentation peut être un de ces blocs secteur régulés 5 V qui remplissent maintenant nos tiroirs.
Le schéma:
Un minimum de composants, en considérant que si le µC n'est pas programmé sur site, les deux résistances sont supprimées et C.5 est relié au 0 V. Le condensateur 100µF est déjà dans le bloc secteur, seul le 100nF près du µC est nécessaire. Il reste deux broches libres, C.0 et C.4 pour des extensions.
Petite vidéo de démo:
Le code, une méthode parmi d'autres: La gestion du TM1637 occupe le plus de place, voir les pages sur cet afficheur . La boucle principale ne comprend que quelques lignes, une commande "select case" à deux états:
état 0, le chrono est en attente
état 1, le chono compte le temps sous la forme HH:MM
Les deux points centraux clignottent au rythme de la seconde et visualisent le fonctionnement du chronomètre. Le changement d'état est obtenu sur interruption par le poussoir:
appui court < 2 s, changement d'état 0 ou 1
appui long, reset du chrono.
Remarque, avec la correction d'une seconde par heure, le précision reste inférieure à 1 seconde sur plus de 20 heures. Cette correction n'est sans doute pas valable pour tous les µC et devra être ajustée.
Le code: Avec un copier coller dans l'éditeur PE5 ou PE6, il retrouvera des couleurs.
; ******************************************* ; Application TM 1637: Minuterie 0 à 99:59 ; MM 08/03/2015 ,modification 13/03/2015 ; ******************************************* ;Broches I/O *************** symbol LED= C.0 symbol clk= C.2 symbol dio= C.1 symbol valid=pinC.3 ;Bits ********************* symbol clignot=bit8 symbol etat=bit9 ;Bytes ********************** symbol Octet=b0 ;b1 pour les bits symbol i=b2 symbol j=b3 symbol minut=b4 symbol heur=b5 symbol dp=b6 symbol Chiffre=b7 ;Words ***************************** symbol Div=w12 symbol Nombre=w13 ; nombre de 4 chiffres à afficher ;Initialisation TM1634 ********************************************************* ;symbol TypeAdr=$40 ; adressage auto-incrémenté symbol AdrDep=$c0 ; adresse du 1er digit (poids fort) symbol RegLum=$8c ; réglage luminosité $80 + 8(allumé, 0:éteint) + 0 à 7(intensité) setfreq M32 ;à 32MHz, time = 0,5 s pullup %1000 ;activation résistance pullup sur C.3 ; **************** laissé pour mémoire **************** ;gosub I2CStart ;Octet=TypeAdr ;Mode d'adresse, incrémenation auto par défaut ;gosub I2CEnvoiOctet; ;gosub I2CStop ; ********************************** gosub I2CStart ; Octet=RegLum ;Réglage luminosité gosub I2CEnvoiOctet gosub I2CStop ;Affichage données en mémoires EEPROM ********************************************* dp=$80 ;pour allumage DP read 0,heur,minut ;lecture EEPROM nombre=heur*100 + minut ;mise en forme affichage gosub Affnbre setint %0000,%1000 ;interruption sur C.3 niveau bas etat=0 time=0 ;etat initial ;*** boucle principale **************** do select etat case 0 ;état arret chrono dp=0 ;affichage sans : centraux nombre=100*heur+minut gosub Affnbre do loop while etat=0 ;attente interruption case 1 do clignot=time//2 ;parité time if clignot=0 then dp=0 ;pas de : else dp=$80 ;affichage : endif if time>119 then ;é 32 MHz time=0,5 s inc minut ;1 mn = 120 time time=0 ;raz time write 0,heur,minut ;sauvegarde if minut>59 then ;increm heure inc heur time=time+2 ;retard 1s/heure minut=0 ;raz minutes endif endif nombre=100*heur+minut ;mise en forme affichage gosub Affnbre loop while etat=1 endselect loop
;**** Affichage *************** Affnbre: gosub I2CStart Octet=AdrDep ;début séqunce sur digit n?1 gosub I2CEnvoiOctet div=1000 for j=1 to 4 Chiffre=Nombre/Div gosub DecTo7seg if j=2 then octet=octet | dp ;ajout points centraux endif gosub I2CEnvoiOctet Nombre=Nombre//Div Div=Div/10 next j gosub I2CStop return
; ******* sous programme interruption sur C.3 ************** interrupt: time=0 do ;boucle attente pour raz if time>3 then heur=0:minut=0 write 0,heur,minut ;raz chrono reset endif loop while valid=0 ;attente relachement poussoir etat= not etat ;si appui court changement d'état setint %0000,%1000 ;réactivation interruption time=0 return
;****** balise Start ********************* I2CStart: high clk high dio low dio return
;******* balise Stop ******************** I2CStop: low clk low dio high clk high dio return
;******* Envoi des chiffres (octet) bit à bit dans le registre ******** I2CEnvoiOctet: ;lecture de b0 bit à bit de bit0 à bit8 poids faible en tête. for i=1 to 8 ; envoi low clk if bit0=1 then high dio else low dio endif ;positionnement DIO Octet = Octet/2 ;effacement du bit lu, bit1 devient bit0 high clk next i
low clk ; traitement ACK high clk low clk return
;****** Conversion des chiffres en segments DecTo7seg: lookup Chiffre,($3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f), Octet ; 0-9 uniquement return