Capsense sur PSOC CYC20234

From Eric

(Difference between revisions)
Jump to: navigation, search
m (Created page with "=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éri...")
m
Line 31: Line 31:
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.
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 ===
 +
Voici un extrait du code C:
 +
  //----------------------------------------------------------------------------
 +
  // 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;
 +
  }
 +
    }
 +
  }
=Conclusion=
=Conclusion=

Revision as of 22:17, 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

Voici un extrait du code C:

 //----------------------------------------------------------------------------
 // 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;
 		}
   }
 }


Conclusion

Personal tools