Capsense sur PSOC CYC20234
From Eric
m |
m |
||
Line 62: | Line 62: | ||
// Test des boutons. | // Test des boutons. | ||
- | if (CSA_EMC_1_bIsSensorActive(0) || | + | if (CSA_EMC_1_bIsSensorActive(0) || CSA_EMC_1_bIsSensorActive(2)) |
{ | { | ||
LED1_Data_ADDR |= 0b00001000; | LED1_Data_ADDR |= 0b00001000; | ||
Line 71: | Line 71: | ||
} | } | ||
- | if (CSA_EMC_1_bIsSensorActive(1) || | + | if (CSA_EMC_1_bIsSensorActive(1) || CSA_EMC_1_bIsSensorActive(3)) |
{ | { | ||
LED1_Data_ADDR |= 0b10000000; | LED1_Data_ADDR |= 0b10000000; |
Revision as of 22:29, 1 December 2012
Contents |
Objectif
Expérimenter la technologie Capsense de Cypress ; expérimenter les PSOC.
Principes
J'utilise un PSOC CY8C20234 acheté directement chez Cypress pour un prix dérisoire, frais de port compris. C'est un composant CMS (SOP16) ; il faut donc acheter un adaptateur.
Réalisation
La réalisation est très simple : une carte comprenant le PSOC et un circuit imprimé "maison" pour le clavier. Le fichier "Eagle" est ici.
Voila la photo de la carte principale :
Voila la photo du clavier.
Programmation du PSOC
Un PSOC est un composant comportant un coeur de microcontroleur (un 8 bit pour la série 1) et plusieurs blocs configurables. Cypress fournit un environnement de développement gratuit très agréable : PSoC Designer.
Cet environnement comporte donc deux parties :
- une partie destinée à la programmation du microcontroleur, en C ;
- une partie destinée à la configuration des blocs analogique.
Dans notre cas (CY8C20234), il existe 4 blocs dont un est le bloc "Capsense".
La configuration des blocs se fait à l'aide de "Wizards" qui facilitent la tâche. En outre, l'environnement donne accès directement à la documentation ("datasheet") du bloc.
Dans le cas du bloc Capsense (plus précisément, le bloc CSA_EMC), la configuration consiste à définir le nombre de touches ou de "sliders" et à les associer aux broches du composant. On ne peut pas faire beaucoup plus simple.
La configuration "fine" du bloc nécessite cependant la lecture attentive de la documentation car les paramètres sont assez nombreux et, s'agissant d'électronique analogique", assez "pointus".
Une fois la bloc configuré, l'environnement génère automatiquement le code nécessaire à l'accès à la fonction Capsense à partir du code C. L'API est décrite dans la "datasheet" du bloc CSA_EMC ; elle comprend aussi des exemples de code.
Le code C
Un extrait du code C est donné ci-après. A noter :
- Les fonction CSA_EMC "Start", "SetDefaultFingerThreshold", etc. sont préfixées par le nom du bloc Capsense donné dans Psoc Designer.
De même la variable "LED1_Data_ADDR" est composée du nom de la broche ("LED1") donné sous Psoc Designer suivi de "Data_ADDR"._
//---------------------------------------------------------------------------- // C main line //---------------------------------------------------------------------------- #include <m8c.h> // part specific constants and macros #include "PSoCAPI.h" // PSoC API definitions for all User Modules #include "psocgpioint.h" // Fichier généré automatiquement ; permet d'utiliser les noms de broches symboliques (<nom>_Data_ADDR void main(void) { M8C_EnableGInt; //enable global interrupts for use with CSA_EMC CSA_EMC_1_Start(); //initialize the CSA_EMC User Module CSA_EMC_1_SetDefaultFingerThresholds(); //Load finger thresholds CSA_EMC_1_InitializeBaselines(); //Set baselines to current count while(1) { // Echantillonnage des boutons et mise à jour des "baselines" CSA_EMC_1_ScanAllSensors(); // Test des boutons. if (CSA_EMC_1_bIsSensorActive(0) || CSA_EMC_1_bIsSensorActive(2)) { LED1_Data_ADDR |= 0b00001000; } else { LED1_Data_ADDR &= ~0b00001000; } if (CSA_EMC_1_bIsSensorActive(1) || CSA_EMC_1_bIsSensorActive(3)) { LED1_Data_ADDR |= 0b10000000; } else { LED1_Data_ADDR &= ~0b10000000; } } }