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
 
 

Temporisateur rapport cyclique programmable picaxe + LCD série

 

    Voici une application du LCD série "fait maison" basé sur un LCD HD44770 décrit sur ce blog. 
 Le problème du timer à cyclique programmable revient souvent  dans les forums d'électronique avec des temporisations diverses, voici une solution picaxe au problème.
 
MISE à JOUR: 28/11/2012 ; 12/06/2013;13/06/2013
Nouveau cahier des charges:
Plages de temporisation de 0 seconde à 17h 59 mn 59s
Résolution 1 seconde.
Utilisation du poussoir validation en cours de cycle:
Appui court (<5s) :changement de cycle
Appui long   (>5s) :modification des temporisations
Passage en mode réglage des tempos à la première mise sous tension
Réglage des temps par potensiomètre, format "hhmmss"
Mémorisation de la programmation en EEPROM 
Passage d'un cycle à l'autre par poussoir à tout moment.
Affichage des réglages et des temps restants sur LCD série 1602
 
Le schéma:
 
    rapcyclique08M2  
 Pour le LCD série "fait maison", voir cette page,.
 Il serait possible d'utiliser un LCD HD44780 standart, avec un picaxe 14M2 et une programmation plus lourde.
 
Le résultat final:
 La sortie est la led rouge sur cette vidéo


 
Le maximum des temporisations est ici de 17h 59 mn 59 s (la variable système "time" compte jusqu'à 65535 secondes avant de repasser à 0). Il est possible, avec quelques lignes de programmation supplémentaires de pousser jusqu'à 99h 59mn 59s, affichable sur un LCD 1602.
Il n'est pas plus difficile de compter des jours, heures et minutes.

Réalisation avec relais statique sur plaque véroboard à pastilles 10 x 5 cm (voir la page véroboard et TCI)

 
ATTENTION: CE CIRCUIT EST RELIÉ AU SECTEUR.
NE FAITES AUCUNE MANIPULATION SOUS TENSION
RESPECTEZ LES POLARITÉS  PHASE - NEUTRE
 
  

Le programme basic .bas (ci dessous)et le fichier .TCI (ci dessus) sont en téléchargement ICI
 
Le programme:  (modif 28/11/2012) ,(modif 12/06/2013), (modif 13/06/2013)
Information :9/02/2014
La variable système time de la série des picaxe M2 ou le timer des X2 sont perturbés par la commande serout. Il est donc préférable d'utiliser la commande HSEROUT qui ne provoque pas de retard sur les timers. Cette variable n'est présente que sur une broche du picaxe (C.0 sur le 08M2).
Il est recommandé d'apliquer cette modification au projet de cette page
 

     '    LCD ALPHANUMERIQUE SERIE ET PICAXE 08M2
      ;    Temporisareur cyclique programmable
      ;    Maj 13/06/2003
        
    #picaxe 08M2        'directive 08M2
    
    symbol baud=N4800_16    'liaison série à 4800bauds 16Mhz
    
'*********** Nomination des I/O ***************
    symbol sortie=C.4        'Sortie sur C.0
    symbol pouss=pinC.3        'Poussoir sur pinC3
    symbol LCD=C.2            'port LCD
    symbol potent=C.1        'potentiomètre    
'*********** Nomination des variables type bit/byte *********
    symbol flag=bit0   
    symbol potar=b1        ;valeur pot
    symbol dhr=b2            ;dizaine d'h
    symbol hr=b3            ;heures
    symbol dmn=b4            ;diz de mn
    symbol mn=b5            ;min
    symbol dsec=b6            ;diz de sec
    symbol sec=b7            ;secondes
    symbol var1=b8            ;variable temporaire byte
'*********** Nomination des variables type word *********        
    symbol var2=w9            ;variable temporaire word
    symbol temps= w10        
    symbol memo    = w11    ;mémorisation temps
    symbol tempsON= w12
    symbol tempsOFF= w13
'******************************************    
    setfreq m16        'fréquence horloge 16 MHz    
    pause 500           'pause pour initialisation LCD
    '***** Affichage fixe ***************************************
init:
    low sortie    
    serout LCD,baud,(254,1)                'Effacement écran
    serout LCD,baud,(254,128,"MA       /")     'position ligne 1
    serout LCD,baud,(254,192,"AR       /")    'position ligne 2    
    read 0,word TempsOn,word TempsOff        'lecture réglages en mémoire
    If TempsOn=0 OR flag=1 then                ;si pas de temps mémorisés
        gosub lectemps               ;passage au réglage des tempos
            else                    'sinon, reprise des temps enregistrés
        temps=tempsOn
        gosub conver                'conversion temps On
        serout LCD,baud,(254,138,dhr,hr,dmn,mn,dsec,sec) 'affichage
        temps=tempsOff                '
        gosub conver                'conversion temps Off
        serout LCD,baud,(254,202,dhr,hr,dmn,mn,dsec,sec)
    end if
'******************************************************
debut:            'En inversant les lignes, on change le cycle de départ
    goto arret    'demarrage par le cycle "Arret"
    goto marche    'cette ligne, en option, n'est pas prise en compte    
'*****************************************************************
marche:    'Sub  moteur ON
    time=0        'variable système: +1 toutes les secondes
    memo=0
    high sortie    'sortie  passe à 5 volts
        
    Do            'boucle sortie ON
    temps=tempsON-time
    if memo<>time then    'affichage temps UNE fois chaque seconde,pas plus     
        gosub conver    
        serout LCD,baud,(254,131,dhr,hr,dmn,mn,dsec,sec)'position ligne4, col8
        memo=time
    endif
        
    if pouss =1 then                    'Bascule entre les deux boucles par poussoir
        time=0    
        Do
             If time>5 then
                flag=1
                goto init
            endif                 
        Loop while pouss=1    'attente relachement du poussoir        
        serout LCD,baud,(254,131,"      ")    'effacement position ligne4, col8                
        goto arret             
    endif        
    
    Loop while time < TempsOn             'fin de boucle tant que time < ...
    serout LCD,baud,(254,131,"      ")        ' effacement
    goto arret
'*******************************************************
arret:    'Sub  sortie OFF    
    time=0
    memo=0
    low sortie        'LCD passe à 0 volt
    
    Do    'Boucle sortie OFF    
    temps=TempsOff-time    'affichage temps restant
    if memo<>time then    'exécution de serout UNE fois chaque seconde seconde
        gosub conver
        serout LCD,baud,(254,195,dhr,hr,dmn,mn,dsec,sec)
        memo=time
    endif
    
    'Bascule entre les deux boucles par poussoir C.3
    if pouss =1 then
        time=0    
        Do
            If time>5 then
            flag=1
                goto init
            endif        
        Loop while pouss=1    'attente relachement du poussoir            'attente relachement du poussoir        
        serout LCD,baud,(254,195,"      ")        'position ligne4, col13
        goto marche
    endif        
    
    Loop while time < TempsOff             'fin de boucle sortie Off
    serout LCD,baud,(254,195,"      ")        'effacement position ligne4, col13
    goto marche
'*********** 'Sous programmes réglage de TempsON et TempsOFF *****************
;************     et mise à l'echelle ***************************
lectemps:    
      flag=0
    serout LCD,baud,(254,128,"MA hhmmss/")     'position ligne 1
    serout LCD,baud,(254,192,"AR hhmmss/")    'position ligne 2    
    do:loop while pouss=1    ;attente relachement modif en cours de cycle
        
'Lecture temps ON
    memo=0
    var1=138        'position curseur    
    gosub lecpot    'lecture potentiomètre
    TempsOn= memo     'enregistrement du temps en secondes
    
'Lecture temps OFF
    memo=0
    var1=202
    gosub lecpot
    TempsOff= memo
    write 0,word TempsOn,word TempsOff    'sauvegarde en EEPROM
    serout LCD,baud,(254,131,"      ")     'position ligne 1 col 4
    serout LCD,baud,(254,195,"      ")  'position ligne 2    col 4
    return    
'******* 'Sous programme lecture du potentiomètre ***************************      
lecpot:
            
    Do                    'boucle Do principale
        readadc potent, potar    'lecture du pot      
        hr= 17 *potar/254        'mise à l'échelle                    
        var2=hr            'mémo hr    
        dhr=hr/10+48        'dizaines d'hr
        hr=hr//10+48        'unités hr    
        serout LCD,baud,(254,var1,dhr,hr)    'écriture LCD
            If pouss=1 then            'pression poussoir
                Do:loop while pouss=1    'attente relachement
                Exit                 'sortie boucle Do principale
            endif
    loop
    memo=var2*3600    'mémo nombre hr en secondes
    var1=var1+2     'incrémentation curseur
    Do    
        readadc potent, potar              
        mn= 59 *potar/254
        var2=mn    
        dmn=mn/10+48
        mn=mn//10+48    '
        serout LCD,baud,(254,var1,dmn,mn)
            If pouss=1 then
                Do:loop while pouss=1
                Exit
            endif
    loop
    memo=var2*60+memo
    var1=var1+2  
    Do    
        readadc potent, potar            
        sec= 59 *potar/254
        var2=sec
        dsec=sec/10+48
        sec=sec//10+48
        serout LCD,baud,(254,var1,dsec,sec)
            If pouss=1 then
                Do:loop while pouss=1            
                Exit
            endif
    loop
    memo=memo+var2
    return
'***************************************************
conver:    'Ici, on décompose le temps en heures, minutes et secondes
        'puis +48 pour le code ascii     
    hr=temps/3600    'heures entières
    sec=temps//60    'reste secondes
    var2=3600*hr        'heures entières en minutes
    var2=temps-var2-sec    'minutes entières en secondes
    mn=var2/60        'minutes entières en mn    
    dhr=hr/10+48    'chiffre diz heures
    hr=hr//10+48    'chiffre heures                
    dmn=mn/10+48    'chiffre diz mn
    mn=mn//10+48    'chiffre mn        
    dsec=sec/10+48    'chiffre dizaines de secondes
    sec=sec//10+48    'chiffre unités de secondes                
    return  

'****************************************************************




Créer un site
Créer un site