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
 
 

APPLICATION TM1637

MINUTERIE COMPTEUSE-DÉCOMPTEUSE
DE 0 à 99mn59sec
 
Cette application est la suite de la page consacrée au TM1637.
La minuterie décrite ci dessous utilse un de ces afficheurs horaires quatre digits pas chers.
Plage de réglage de 0 à 99min 59sec . Résolution 1 seconde


Le schéma:
 














Très simple, il suffit de remplacer la led par un relais statique et on peut commander n'importe quoi: des tubes fluo pour insoleuse par exemple, voir en bas de cette page.
Très facile de modifier pour mémoriser la dernière valeur utilisée. (C'est fait, modifié le 01/03/2015)

Voir les détails de la programmation du TM1637 sur cette page.

Mode d'emploi:
A l'allumage, affichage du dernier temps utilisé
Départ en appuyant sur le poussoir
Allumage de la LED (ou relais statique), décomptage et arrêt à 0
RAZ par appui en cours de décomptage.
Mémorisation d'un temps:
Appui long (>2s) sur le poussoir
Extinction des ":" pendant cette phase
Réglage du nombre de minutes  (0 à 99)
Valider par le poussoir
Réglage du nombre de secondes (0 à 59)
Valider par poussoir,
RAZ du programme, les ":" réaparaîssent avec la nouvelle valeur.
Si la valeur mémorisée est 00:00, le programme lance un comptage au lieu d'un décomptage.

Petite vidéo de démo:
 

Nouveau code (légèrement optimisé) pour cette minuterie à mémoire 

;************************************************
; Application TM1637: Chronométre 0 à 99mn:59s
; MM 08/03/2015 mod 13/03/2015
;*************************************************
;Broches I/O ***************
    symbol LED= C.0
    symbol clk= C.2
    symbol dio= C.1    
    symbol valid=pinC.3
;Bytes **********************
    symbol Octet=b0
    symbol Chiffre=b1
    symbol i=b2
    symbol j=b3
    symbol minut=b4
    symbol second=b5
    symbol dp=b6
;Words *****************************
    symbol temps=w10
    symbol depart=w11
    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 m16        ;pas plus pour garder time en secondes
    pullup %1110    ;activation des résistances pullup
        
    ;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,minut,second        ;lecture EEPROM    
    nombre=minut*100 + second    ;mise en forme affichage
    div=1000
    gosub Affnbre
    
; Attente lancement ou intro paramétres ***********************            
    do    
        if valid=0 then  ;attente appui poussoir        
            time=0                
            do
            if time>1 then
                goto  Intropar    ;appui > 2 secondes                
            endif
            loop while valid=0 ;attente relachement poussoir
            exit
        endif
    loop  
; Départ lancé **********************        
    depart=minut*60+second    ;calcul temps en seondes
    if depart>0 then
            gosub Decompte         ;temps>0 ,on décompte
            else gosub compte    ;temps=0 ,on compte
    endif
    low LED
    do loop while valid=0    ;sortie sur appui poussoir
    reset        ;redémarrage programme    
    
;****** Début programme décompteur *********
Decompte:    
    time=0
    high LED
    do
        temps= depart-time    ;temps restant    
        nombre=temps
        minut=nombre/60
        nombre=nombre//60
        nombre=100*minut+nombre
        Div=1000
        gosub Affnbre
        if valid=0 then exit    
    loop while temps >0
    return

;****** Début programme compteur *********
compte:
    ;depart=minut*60+second
    time=0
    high LED
    do        
        nombre=time
        minut=nombre/60
        nombre=nombre//60
        nombre=100*minut+nombre
        Div=1000
        gosub Affnbre
        if valid=0 then exit
    loop
    return

;****** Introduction des minutes ************
Intropar:
; préaffichage,jusqu'au relachement du poussoir
    dp=0    ;suppression affichage dp
    div=10    ;pour affichage 2 chiffres
    readadc C.4,minut
    minut=99*minut/255    
    nombre=minut
    gosub Affnbre
    do loop while valid=0
; introduction des minutes *****************    
    div=10
    do
        readadc C.4,minut
        minut=99*minut/255        
        nombre=minut
        if valid=0 then            
            do loop while valid=0
            exit
        endif            
        div=10 ; initialisation diviseur pour affichage 2 premiers digits (minutes)
        gosub Affnbre            
    loop
                
;****** Introduction des secondes ******************        
    do
        readadc C.4,second
        second=59*second/255    
        nombre=minut*100+second
        if valid=0 then                
            do loop while valid=0
            exit
        endif    
        div=1000
        gosub Affnbre    
    loop
    write 0,minut,second    ;sauvegarde en EEPROM
    reset    ;relance du programme **********
    
;******* Découpage du nombre en chiffres ************
Affnbre:
    gosub I2CStart
    Octet=AdrDep        ;synchro adresse départ
    gosub I2CEnvoiOctet
    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
        
;****** 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


 
Application complète, minuterie pour insoleuse
La led est toujours là, le relais statique est ajouté, et la résistance de limitation passe de 330 à 120 ohms
La minuterie alimente des modules électroniques pour lampes fluocompactes de 15 ou 8 Watts, suivant les tubes UV utilisés (mais choisissez plutôt des 15 W). Voir une insoleuse ici

Le schéma:

Le typon:
Le circuit tient sur une plaque de 10 cm x 4 cm
Alimentation traditionnelle par transfo et fusible, plus sécure que l'alimentation par condensateur, une récupération de circuit de bloc secteur à découpage est aussi possible.
 



Créer un site
Créer un site