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
 
 

Chenillard programmable -Animations de LED


Ce projet répond à une demande posée sur le forum d'aide Picaxe francophone. IL s'agissait de créer un panneau lumineux comportant un nom entouré d'un chenillard avec animations diverses. Le tout pouvant fonctionner indifféremment en 12 ou 24 volt. La conversation initiale conversation est sur cette page.

Cahier des charges:

Panneau comprenant une inscription entourée d'un cadre chenillard.
L'inscription à une animation indépendante du cadre;
Choix de l'animation du cadre par poussoir ou enchainement automatique.
Choix de la luminosité du cadre.
Alimentation en 12 ou 24 volts
Ici, l'alimentation est fixée à 12 v par convertisseur. Une alimentation en 24 v augmente les possibilités

Voici le schéma proposé:
 
chenille
.
 
Le résultat obtenu sur maquette:

 

Le code :

Remarque: Les animations ont été écrites par le demandeur initial (non expérimenté) avec les commandes high et low. Il est possible de faire plus "élégant" avec des outpins, mais le résultat est le même.

    #picaxe 20M2
    
'C.1 select Anim
'C.2 PWM sortie lumière cadre
'C.3 ADC vitesse

'C.5 PWM sortie lumière texte
'C.6 Commande lumière cadre

'******** 1er programme en temps partagé **********
'******** Descriptions et enchainement des animations ************    
start0:
    dirsB= %11111111        'définition des ports B en sortie (en vue utilisation possible de outpinsB)
    
'********** Nomination des variables ****************        
    symbol  suite =     bit0        'Mémorisation de la demande de changement par interruption
    symbol  vitesse=    w13        'type word (sup à 255)
    symbol  choix=    b1        'Choix de la vitesse
    symbol  intens=    pinC.6    'Poussoir réglage de l'intensité lumineuse
    
'********* Nomination des ports *****************
    symbol cadre = C.2
    symbol texte = C.5
    
'***** Programme principal **************************************
Debut:    '*** Enchainement des Animations *******************
    Do    
        Gosub Anim1
        Gosub Anim2
        Gosub Anim3
        Gosub Anim4
        Gosub Anim5
        Gosub Anim6
        Gosub Anim7
        Gosub Anim8
        Gosub Anim9
        Gosub Anim10
        Gosub Anim11
        Gosub Anim12        
    Loop   
'***** Sous programmes Animations ******************************************
Anim1: 'chenillard simple aller'
    suite =0                'Reset mémorisation pousoir     
    setint %00000010,%00000010     '(Ré)activation de l'interruption niveau haut sur C.1
    Do                    'Boucle Anim1
        readadc c.3, vitesse    'Lecture de la vitesse à chaque boucle àde 0 à 255ms
        vitesse=vitesse+100    'vitesse = de 100 à 355 ms
        high B.0            'idem : outpinsB = %00000001
        pause vitesse
        low B.0
        high B.1
        pause vitesse
        low B.1
        high B.2
        pause vitesse
        low B.2
        high B.3
        pause vitesse
        low B.3
        high B.4
        pause vitesse
        low B.4
        high B.5
        pause vitesse
        low B.5
        high B.6
        pause vitesse
        low B.6
        high B.7
        pause vitesse
        low B.7
        if suite=1 then        'Si il y a eu action sur le poussoir,
                exit        ' on sort de la boucle        
        endif    
    loop                    'Fin de boucle Anim1
    return                'Retour programme principal pour Anim suivante
    
Anim2: 'chenillard simple retour'
    suite =0
    
    setint %00000010,%00000010 'sur C.1    
    Do
        readadc c.3, vitesse
        vitesse=vitesse+100
        high B.7
        pause vitesse
        low B.7
        high B.6
        pause vitesse
        low B.6
        high B.5
        pause vitesse
        low B.5
        high B.4
        pause vitesse
        low B.4
        high B.3
        pause vitesse
        low B.3
        high B.2
        pause vitesse
        low B.2
        high B.1
        pause vitesse
        low B.1
        high B.0
        pause vitesse
        low B.0
        if suite=1 then    
             exit
        endif    
    loop
    return
    
Anim3: 'chenillard simple aller-retour'
    suite =0    
    setint %00000010,%00000010 'sur C.1    
    Do
        readadc c.3, vitesse
        vitesse=vitesse+100
        high B.0
        pause vitesse
        low B.0 : high B.1
        pause vitesse
        low B.1: high B.2
        pause vitesse
        low B.2 :high B.3
        pause vitesse
        low B.3 : high B.4
        pause vitesse
        low B.4 :high B.5
        pause vitesse
        low B.5 :high B.6
        pause vitesse
        low B.6 : high B.7
        pause vitesse
        low B.7 :high B.6
        pause vitesse
        low B.6 : high B.5
        pause vitesse
        low B.5 : high B.4
        pause vitesse
        low B.4 : high B.3
        pause vitesse
        low B.3 : high B.2
        pause vitesse
        low B.2 : high B.1
        pause vitesse
        low B.1 :high B.0
        pause vitesse
        low B.0
        if suite=1 then    
             exit
        endif    
    loop
    return
    
Anim4: 'chenillard double aller'
    suite =0    
    setint %00000010,%00000010 'sur C.1    
    Do
        readadc c.3, vitesse
        vitesse=vitesse+100
        high B.0:high B.4
        pause vitesse
        low B.0:low B.4
        high B.1:high B.5
        pause vitesse
        low B.1:low B.5
        high B.2:high B.6
        pause vitesse
        low B.2:low B.6
        high B.3:high B.7
        pause vitesse
        low B.3:low B.7
        if suite=1 then    
             exit
        endif    
    loop
    return

Anim5: 'chenillard double retour'
    suite =0    
    setint %00000010,%00000010 'sur C.1    
    Do
        readadc c.3, vitesse
        vitesse=vitesse+100
        high B.0:high B.4
        pause vitesse
        low B.0:low B.4: high B.3:high B.7
        pause vitesse
        low B.3:low B.7 : high B.2:high B.6
        pause vitesse
        low B.2:low B.6 : high B.1:high B.5
        pause vitesse
        low B.1:low B.5
        if suite=1 then    
             exit
        endif       
    loop
    return
    
Anim6: 'chenillard double aller-retour'
    suite =0   
    setint %00000010,%00000010 'sur C.1    
    Do
        readadc c.3, vitesse
        vitesse=vitesse+100
        high B.0:high B.4
        pause vitesse
        low B.0:low B.4 : high B.1:high B.5
        pause vitesse
        low B.1:low B.5 : high B.2:high B.6
        pause vitesse
        low B.2:low B.6 :high B.3:high B.7
        pause vitesse
        low B.3:low B.7: high B.0:high B.4
        pause vitesse
        low B.0:low B.4:high B.3:high B.7
        pause vitesse
        low B.3:low B.7:high B.2:high B.6
        pause vitesse
        low B.2:low B.6: high B.1:high B.5
        pause vitesse
        low B.1:low B.5    
        if suite=1 then    
             exit
        endif    
    loop
    return
        
Anim7: 'allumage progressif aller'
    suite=0
    
    setint %00000010,%00000010 'sur C.1    
    Do
        readadc c.3, vitesse
        vitesse=vitesse+100
        high B.6
        pause vitesse
        high B.5:high B.7
        pause vitesse
        high B.0:high B.4
        pause vitesse
        high B.1:high B.3
        pause vitesse
        high B.2
        pause vitesse
        low B.0:low B.1:low B.2:low B.3:low B.4:low B.5:low B.6:low B.7
        if suite=1 then
             exit
        endif
    loop
    return
    
Anim8: 'allumage progressif retour'
    suite=0    
    setint %00000010,%00000010 'sur C.1
    Do
        readadc c.3, vitesse
        vitesse=vitesse+100
        high B.2
        pause vitesse
        high B.1:high B.3
        pause vitesse
        high B.0:high B.4
        pause vitesse
        high B.7:high B.5
        pause vitesse
        high B.6
        pause vitesse
        low B.0:low B.1:low B.2:low B.3:low B.4:low B.5:low B.6:low B.7
        if suite=1 then    
             exit
        endif
    loop
    return
    
Anim9: 'allumage progressif aller-retour haut'
    suite=0    
    setint %00000010,%00000010 'sur C.1
    Do
        readadc c.3, vitesse
        vitesse=vitesse+100
        high B.6
        pause vitesse
        high B.5:high B.7
        pause vitesse
        high B.0:high B.4
        pause vitesse
        high B.1:high B.3
        pause vitesse
        high B.2
        pause vitesse
        low B.2
        pause vitesse
        low B.1:low B.3
        pause vitesse
        low B.0:low B.4
        pause vitesse
        low B.7:low B.5
        pause vitesse
        low B.6
        if suite=1 then    
             exit
        endif
    loop
    return
    
Anim10:'allumage progressif aller-retour bas'
    suite=0
    setint %00000010,%00000010 'sur C.1
    Do
        readadc c.3, vitesse
        setint %00000010,%00000010 'sur C.1
        high B.2
        pause vitesse
        high B.1:high B.3
        pause vitesse
        high B.0:high B.4
        pause vitesse
        high B.7:high B.5
        pause vitesse
        high B.6
        pause vitesse
        low B.6
        pause vitesse
        low B.7:low B.5
        pause vitesse
        low B.0:low B.4
        pause vitesse
        low B.1:low B.3
        pause vitesse
        low B.2
        if suite=1 then    
             exit
        endif
    loop
    return
    
Anim11:'allumage haut extinction bas'
    suite =0    
    setint %00000010,%00000010 'sur C.1    
    Do
        readadc c.3, vitesse        
        high B.2
        pause vitesse
        high B.1:high B.3
        pause vitesse
        high B.0:high B.4
        pause vitesse
        high B.7:high B.5
        pause vitesse
        high B.6
        pause vitesse
        low B.2
        pause vitesse
        low B.1: low B.3
        pause vitesse
        low B.0:low B.4
        pause vitesse
        low B.7: low B.5
        pause vitesse
        low B.6    
        if suite=1 then    
             exit
        endif
    
    loop
    return
    
Anim12:'allumage bas extinction haut'
    suite =0
    readadc c.3, vitesse
    setint %00000010,%00000010 'sur C.1    
    Do
        readadc c.3, vitesse        
        high B.6
        pause vitesse
        high B.7:high B.5
        pause vitesse
        high B.0:high B.4
        pause vitesse
        high B.1:high B.3
        pause vitesse
        high B.2
        pause vitesse
        low B.6
        pause vitesse
        low B.7: low B.5
        pause vitesse
        low B.0:low B.4
        pause vitesse
        low B.1: low B.3
        pause vitesse
        low B.2    
        if suite=1 then        
             exit
        endif    
    loop
    return

'********* Sous programme d'interruption *********************    
interrupt:

    suite =1 ' bit suite positionné à 1

    return
end
'***********************************************************************    
'************* Variation lumière texte (future) ***********************    
start1:
    Do
        '************** on augmente doucement ***********
        w12=0        
        Do
            pwmout pwmdiv16, C.5, 124, w12    'PWM à 500Hz sur C.5 : rap cyclique w12 = 0 ->0% ; w12= 500 ->100%            
            inc w12                'augmentation rap cyclique, la luminosité augmente
            pause 10                'règle la vitesse
        loop while w12 <500            'jusqu'au max de 500
        '************ flash rapide **************
        pause 500                    'pause au max de lumière
        pwmout texte, off                'arrêt du PWM
        low texte                    'extinction leds
        pause 200                    'temps extinction
        high texte                    'allumage max
        w12=500                    'retour w12 max pour suite
        '*********** on redescent **********
        Do
            pwmout pwmdiv16, texte, 124, w12                    
            dec  w12
            pause 10
        loop while w12 >0
        pause 1000
    loop        ' On recommence
    end
'***************************************************************    
'************** Variation lumière cadre ***************    
start2:
    choix=0
retour:
    high cadre    'Allumage du cadre au départ
    Do        
        if intens=1 then            'Pression sur poussoir
            do: loop while intens=1    'Attente relachement poussoir
                inc choix        'Incrémentation de choix
                if choix=7 then    'Boucle sur 6 choix
                     choix=1
                end if        
            
        select choix                
            case 1
                w11=150
                pwmout pwmdiv16, cadre, 124, w11
                    
            case 2
                w11=50
                pwmout pwmdiv16, cadre, 124, w11
                    
            case 3
                w11=10
                pwmout pwmdiv16, cadre, 124, w11
                    
            case 4
                w11=2
                pwmout pwmdiv16, cadre, 124, w11
                    
            case 5    'Voir Variation lumière texte
                Do
                    w11=0                       
                    Do
                        if intens=1 then retour:
                        pwmout pwmdiv16, cadre, 124, w11                    
                        inc w11
                        pause 10
                    loop while w11 <500
                        
                    pause 500
                    pwmout cadre, off
                    low cadre
                    pause 200
                    high cadre
                    w11=500                       
                    Do
                        if intens=1 then retour:
                        pwmout pwmdiv16, cadre, 124, w11            
                        dec  w11
                        pause 10
                    loop while w11 >0
                    pause 1000
                loop
                        
            case 6
            pwmout cadre, off                    
            high cadre        
                                            
        end select
        endif
    loop        
end   
Afficher la suite de cette page



Créer un site
Créer un site