IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

f-leb

PSoC 4 : ma carte configurée en esclave I2C, et pilotée par une Raspberry Pi - Partie 2

Noter ce billet
par , 23/04/2020 à 13h32 (284 Affichages)
Partie 2 - PSoC 4, programmer la LED RVB depuis l’EDI PSoC Creator

Avant de confier le contrôle de la LED au Raspbery Pi via la liaison I2C (voir Partie 1), voyons un peu comment se programme notre carte PSoC 4.

Si vous ne connaissez pas l’environnement des cartes Cypress PSoC, je vous invite à le découvrir dans le tutoriel Débuter avec les cartes Cypress PSoC et l'EDI PSoC Creator. On rappelle LA particularité des puces du constructeur Cypress : elles sont configurables, un principe qui rappelle le fonctionnement des FPGA.
La LED RVB intégrée en surface de la carte est reliée aux ports P0.6 (Rouge), P2.6 (Vert) et P6.5 (Bleu) d’après la documentation.

Nom : led_rvb.png
Affichages : 109
Taille : 17,1 Ko

Pour illuminer plus ou moins chaque composante rouge, verte ou bleue, il suffit de configurer trois générateurs de signaux PWM et de diriger leur sortie vers nos trois ports. Et là, tout se fait graphiquement et à la souris dans l’onglet TopDesign de l’EDI PSoC Creator (EDI pour Environnement de Design Intégré) :

Nom : pwm_rvb.png
Affichages : 84
Taille : 33,7 Ko
Design de la configuration

Nom : routage_ports.PNG
Affichages : 81
Taille : 24,2 Ko
Routage des entrées-sorties

Une horloge (clock) commune 12 MHz est routée vers chaque entrée des générateurs PWM. Tout ce qui est en bleu fait partie du décor pour rendre le schéma plus compréhensif, sans influence sur la configuration du PSoC, l’équivalent des commentaires dans le code…

Si on va dans la configuration des blocs PWM, par exemple pour le rouge :

Nom : config_pwm.png
Affichages : 84
Taille : 69,5 Ko
Configuration PWM

Le champ period est à 255, et on joue avec la luminosité de la couleur en faisant varier le rapport cyclique du PWM avec le paramètre compare (ici à 127 pour un signal carré, voir le chronogramme de la sortie line_n).
compare=0, LED éteinte ; compare=255, LED allumée à la luminosité maximum.

Vous pouvez régler les paramètres dans les boites de dialogue des composants, mais vous pouvez évidemment les faire varier dans le code.
Par exemple :

Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <project.h>
 
int main()
{   
    const uint8_t delay = 10; /* tempo en ms */
    /* Activation des générateurs PWM */
    PWM_Red_Start();
    PWM_Green_Start();
    PWM_Blue_Start();
 
    /* LED rouge initialement */
    PWM_Red_WriteCompare(255);
    PWM_Green_WriteCompare(0);
    PWM_Blue_WriteCompare(0);
 
    /* Autoriser les interruptions globales */
    // CyGlobalIntEnable;
 
    /* Boucle infinie */
    for (;;) {
        /* initialement, rouge */
        for(uint8_t i = 0; i < 255; i++){
            PWM_Green_WriteCompare(i);   /* + de vert ==> jaune */        
            CyDelay(delay);
        }
 
        for(uint8_t i = 0; i < 255; i++){
            PWM_Red_WriteCompare(255 - i);   /* - de rouge ==> vert */   
            CyDelay(delay);
        }
 
        for(uint8_t i = 0; i < 255; i++){
            PWM_Blue_WriteCompare(i);   /* + de bleu ==> cyan */
            CyDelay(delay);
        }   
 
        for(uint8_t i = 0; i < 255; i++){
            PWM_Green_WriteCompare(255 - i);   /* - de vert ==> bleu */
            CyDelay(delay);
        } 
 
        for(uint8_t i = 0; i < 255; i++){
            PWM_Red_WriteCompare(i);   /* + de rouge ==> magenta */
            CyDelay(delay);
        }
 
        for(uint8_t i = 0; i < 255; i++){
            PWM_Blue_WriteCompare(255 - i);   /* - de bleu ==> rouge */
            CyDelay(delay);
        }       
 
       // CyDelay(2000);
    }    
}

Ici, je génère progressivement les couleurs de l’arc-en-ciel : rouge d’abord, puis qui tend vers le jaune, vert, cyan, bleu, magenta, puis le cycle reprend.


Simplissime et élégant. Voyons maintenant comment préparer et configurer notre carte en esclave pour la communication I2C

Envoyer le billet « PSoC 4 : ma carte configurée en esclave I2C, et pilotée par une Raspberry Pi - Partie 2 » dans le blog Viadeo Envoyer le billet « PSoC 4 : ma carte configurée en esclave I2C, et pilotée par une Raspberry Pi - Partie 2 » dans le blog Twitter Envoyer le billet « PSoC 4 : ma carte configurée en esclave I2C, et pilotée par une Raspberry Pi - Partie 2 » dans le blog Google Envoyer le billet « PSoC 4 : ma carte configurée en esclave I2C, et pilotée par une Raspberry Pi - Partie 2 » dans le blog Facebook Envoyer le billet « PSoC 4 : ma carte configurée en esclave I2C, et pilotée par une Raspberry Pi - Partie 2 » dans le blog Digg Envoyer le billet « PSoC 4 : ma carte configurée en esclave I2C, et pilotée par une Raspberry Pi - Partie 2 » dans le blog Delicious Envoyer le billet « PSoC 4 : ma carte configurée en esclave I2C, et pilotée par une Raspberry Pi - Partie 2 » dans le blog MySpace Envoyer le billet « PSoC 4 : ma carte configurée en esclave I2C, et pilotée par une Raspberry Pi - Partie 2 » dans le blog Yahoo

Mis à jour 08/03/2021 à 17h12 par f-leb

Catégories
Raspberry Pi , Programmation , C

Commentaires