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
 
 

Minuterie compteuse-décompteuse à Picaxe 14M2

et afficheur LEDS 4 digits MAX 7219



Il y a sur d'autres pages des minuteries avec des LCD ou des leds.
En voici encore une autre avec un picaxe 14M2 et un afficheur à 4 digits MAX 7219.
Réglage continu entre 0 et.... 99mn 59 s
Résolution 1 seconde

La simplicité du schéma parle d'elle même:
 

 
Très peu de composants et si on enlève la décoration, il faut:
  • 1 picaxe 14M2
  • 1 afficheur 4 digits MAX 7219 (horaire, c'est mieux avec :)
  • 1 potentiomètre
  • 1 poussoir
  1. On appuie 3 secondes sur le poussoir, les deux points s'éteignent.
  2. On affiche les minutes de 0 à 99, on valide par le poussoir.
  3. On afiche les secondes de 0 à 59, on valide par le poussoir.
  4. Les deux points se rallument, c'est prêt.
Si le temps est différent de 0, on appuie, une diode s'allume et le temps se décompte,
à 0mn 0s, une diode s'éteint, une autre s'allume et le buzzer buzze une seconde (on peut ajouter un ajustable sur C.0 pour régler ce temps)

Si le temps de départ est égale à 0, on appuie, une diode s'allume et le temps s'incrémente, comme un chronomètre.

Retour au départ si on appuie sur le poussoir pendant le fonctionnement.

Le temps est mémorisé en EEPROM et s'affiche à chaque remise sous tension.

En remplaçant les diodes par des mocs, on peut commander un système d'éclairage comme sur cette page.

Le code est celui de la page déjà citée, avec adaptation au MAX 7219.

Le code:
 
;Afficheur driver MAX7219
; Programme minuterie picaxe 14M2 et MAX7219
; MM 1/12/13

;Format des registres MAX 7219 sur 16 bits:

;|------------------------------w13------------------------------|                                                               |
;|-----------b27-----------------|------------b26 ---------------|
;|-X-|-X-|-X-|-X-|--ADRESSE------|----------DONNEES--------------|   
;|D15|D14|D13|D12|D11|D10|D09|D08|D07|D06|D05|D04|D03|D02|D01|D00|

 '  b27=position du digit (1 to 8)
 '  b26=value à afficher
 '  gosub shiftt pour remplir le registre du max7219 bit par bit
 '  Pour afficher un point décimal:  b26=value or $80

    #picaxe 14M2
    setfreq m16
   symbol  DIN   = B.1        ;Entrée Data In de l'afficheur
   symbol  LOAD  = B.2        ;Entrée Load de l'afficheur
   symbol  CLK   = B.3        ;Entrée CLK de l'afficheur
   symbol  lum   = B.4
   symbol  lum2  = B.5
   symbol  Valid = pinC.3    ;poussoir validation
   symbol  potar = C.4        ;potentiomètre    
   symbol  LEN   = 1          ;durée impulsion 1ms
       
   symbol  cpt   = b2        ;compteur
   ;               b3    unité
   ;               b4    dizaine
   ;               b5    centaine
   symbol  minut   =b6
   symbol  second  =b7     
       
   symbol  rest    =w11
   symbol  temps   =w10
   symbol  regis   =w13    ;=(b27,b26) chaque bit sera envoyé dans le registre
   
   low DIN
   low LOAD
   low CLK
      
   pullup %0000100000000000  ;activation résistance pullup sur C.3
 
;******** initialisation 7219 *******
    b27=$09  'mode décodage
    b26=%11111111  'code B sur tous les digits
    gosub shiftt
     
    b27=$0b  'limite scanner = Nbre de digits
    b26=$04     '$04=5 digits ,$03=4 digits,, etc...
    gosub shiftt
    
    b27=$0f  'display test
    b26=$00  '=normal
    gosub shiftt
    
    b27=$0c  'shutdown mode
    b26=$01  '=normal (afficheur actif)
    gosub shiftt
          
    b27=$0a  'luminosité
    b26=$04  '=croissante de 0 à 15, ici c'est 4  
    gosub shiftt
    
    b27=$0f  'display test
    b26=$00  '=normal
    gosub shiftt
    pause 500
;***************************
  debut:        
    read 0,word temps    ;lecture du temps en EEPROM    
      
;******* Programme minuterie *********************
      second= temps//60        ;reste des secondes
       gosub affsec              ;affichage secondes enregistrées
 
    minut= temps/60             ;minutes entières
    gosub affmin            ;affichage minutes enregistrées     
      
    Do
    b27=5
    b26=$80
    gosub shiftt
     loop while valid=1    ;attente appui sur valid
   
    time=0                    ;on a appuyé! RAZ de time
    Do
        if time>2 then reglage    ;si on reste appuyé plus de 3s -> sub réglages
    loop while valid=0            ;si on relache avant, on continue et...      
    If temps=0 then                ;en fonction de la valeur de temps,
            goto compte            ;on compte
               else                 ;ou
               goto decompte        ;on décompte
       endif

;******* comptage ******************           
compte:
    time=0                    ;reset time
    high lum
    Do    
        if valid=0 then exit    ;si appui sur poussoir ->sortie de boucle
        minut=time/60            ;extraction minutes entières
        gosub affmin            ;affichage
    
        second=time//60            ;reste les secondes
        gosub affsec            ;affichage
      loop                         ;on boucle      
      low lum    
      do loop while valid=0        ;attente relachement                    
    goto debut                    ;retour debut
    
;******* décomptage ******************           
decompte:
    time=0
    high lum
    Do    
        If valid=0 then exit    ;si appui sur poussoir ->sortie de boucle
        rest=temps-time            ;calcul du temps rstant
        
        minut=rest/60            ;minutes temps restant
        gosub affmin            ;affichage
               
        second=rest//60            ;secondes temps restant
        gosub affsec            ;affichage
      loop while rest>0           ;boucle jusqu'à 0
    low lum    
    high lum2
    pause 4000
    low lum2        
    do loop while valid=0        ;attente relachement
    
    goto debut
    
;***** Réglage de la temporisation **************
reglage:

    b27=5        ;extinction des :
    b26=$F
    gosub shiftt
    b27=4        ;extiction des digits secondes
    b26=$F
    gosub shiftt
    b27=3        ;extiction des digits secondes
    b26=$F
    gosub shiftt
    Do loop while valid=0    ;attente relachement pousoir
        
    Do                          ;boucle réglage des minutes
        readadc potar,minut         ;lecture minutes        
          minut= 99 *minut/255    ;mise à l'échelle 0 à 99            
           gosub affmin            ;affichage    
    loop while valid=1            ;si appui sur valid, on quite la boucle    
    
    Do loop while valid=0        ;attente relachement   
      
     Do                          ;boucle réglage des secondes    
        readadc C.4,second             ;lecture secondes        
        second    = 59 *second/255    ;mise à l'échelle 0 à 59    
         gosub affsec                ;affichage
    loop while valid=1                ;si appui sur valid, on quite la boucle
    Do loop while valid=0            ;attente relachement
    
    temps=minut*60 +second    ;temps total en secondes
    
    write 0,word temps    ;sauvegarde en EEPROM
        
    goto debut
    
;****** sub affichage minutes et secondes ****************    
affmin:
    bintoascii minut, b5,b4,b3    ;décomposition en digits
    b27=2            ;digit 3
    b26=b3-48        ;ascii -> numérique
    gosub shiftt    ;affichage
    b27=1
    b26=b4-48
    gosub shiftt    ;affichage
    return
affsec:
    bintoascii second, b5,b4,b3    ;décomposition en digits  
    b27=4            ;digit 1
    b26=b3-48        ;ascii -> numérique
    gosub shiftt    ;affichage
    b27=3
    b26=b4-48
    gosub shiftt    ;affichage
    return        
        

       
;******** Sous programme affichage caractères *************************
  ;Format du registre sur 16 bits:

;|------------------------------w13------------------------------|                                                               |
;|-----------b27-----------------|------------b26 ---------------|
;|-X-|-X-|-X-|-X-|--ADRESSE------|----------DONNEES--------------|   
;|D15|D14|D13|D12|D11|D10|D09|D08|D07|D06|D05|D04|D03|D02|D01|D00|
;Ex: chiffre 5 dans digit 2
;|-X-|-X-|-X-|-X-| 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |

;La broche DIN va prendre successivementla valeur de chaque bit de w13, scanné de gauchee à droire
shiftt:
    for cpt=1 to 16          ;test des 16 bits de w13
        w12=w13 & $8000      ;w13 = b27,b26 & %1000 0000 0000 0000: on ne garde que le 1er bit à gauche de w12   
        low DIN               ;broche DIN à 0 à priori
        if w12=0 then saut    ;w12 contient la valeur (0 ou 1) à transmettre
        high DIN              ;on ne passe ici que si w12 <> 0, alors DIN =1 (évidemment)
saut:    pulsout CLK,LEN     ;envoi 1 pulse horloge pour valider DIN
        w13=w13*2            ;on décale w13 vers la gauche pour examiner le bit suivant
    next cpt
  pulsout LOAD,LEN    ;chargement du registre terminé, un pulse sur load valide le registre (commande ou affichage)
 
  return

 

 



Créer un site
Créer un site