Capsense sur PSOC CYC20234

From Eric

(Difference between revisions)
Jump to: navigation, search
m
m
Line 1: Line 1:
=Objectif=
=Objectif=
-
Expérimenter la technologie Capsense de Cypress ; expérimenter les PSOC.
+
Expérimenter les PSOC de Cypress ; expérimenter la technologie Capsense.
=Principes=
=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.
+
J'utilise un PSOC CY8C20234 acheté directement chez Cypress pour un prix très faible ($1.9), frais de port compris. C'est un composant CMS (SOP16) ; il faut donc acheter un adaptateur qui coûte pratiquement le prix du chip...
=Réalisation=
=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.
+
La réalisation est très simple : une carte comprenant le PSOC et un circuit imprimé "maison" pour le clavier. Les fichiers "Eagle" sont [https://skydrive.live.com/#cid=0528791E823E13E0&id=528791E823E13E0!37674 ici].
Voila la photo de la carte principale et du "clavier" :
Voila la photo de la carte principale et du "clavier" :

Revision as of 09:49, 3 December 2012

Contents

Objectif

Expérimenter les PSOC de Cypress ; expérimenter la technologie Capsense.

Principes

J'utilise un PSOC CY8C20234 acheté directement chez Cypress pour un prix très faible ($1.9), frais de port compris. C'est un composant CMS (SOP16) ; il faut donc acheter un adaptateur qui coûte pratiquement le prix du chip...

Réalisation

La réalisation est très simple : une carte comprenant le PSOC et un circuit imprimé "maison" pour le clavier. Les fichiers "Eagle" sont ici.

Voila la photo de la carte principale et du "clavier" :

Psoc capsense board.jpg


Configuration du PSOC

Un PSOC est un composant comportant un coeur de microcontroleur (un 8 bit pour les séries PSOC-1 et PSOC-3) et plusieurs blocs configurables. Cypress fournit un environnement de développement gratuit très agréable : PSoC Designer.

Voila une vue d'ensemble de l'IHM :

Psoc capsense ihm.jpg

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), le composant comporte 4 blocs dont un bloc "Capsense".

Psoc capsense blocs.jpg

La configuration des broches d'entrées/sorties se fait à partir de l'IHM. C'est aussi ici que l'on pourra affecter des noms symboliques aux broches.

Voici la vue de la configuration des broches :

Psoc pin overview.jpg

Voici le menu de configuration des broches :

Psoc pin config.jpg

La sélection des blocs se fait en "glissant-déposant" une fonction sur le bloc. Leur configuration se fait à l'aide de "Wizards" (ou directement). 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.

Psoc capsense wizard.jpg

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".

Voici les options de configuration du bloc Capsense :

Psoc config capsense.jpg

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 (il fait usage d'un deuxième bloc : le bloc timer).

A noter que 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
 
 BYTE  beep_counter;
 
 #pragma interrupt_handler timer_ISR_Handler
 void              	timer_ISR_Handler( void );
 
 
 void main(void)
 {
     
 	M8C_EnableGInt;  // Activation des ITs pour le bloc CSA_EMC et le timer
 
 	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
 
 	beep_counter = 0;
       Timer13_1_EnableInt();
 	Timer13_1_SetPeriod(16);
       Timer13_1_Start(); // On émet un petit bip de test.
 
 	while(1) 
 	{
 
 		// Echantillonnage des boutons et mise à jour des "baselines"
 		CSA_EMC_1_ScanAllSensors();    
 	
 		// Test des boutons.
 		if (CSA_EMC_1_bIsAnySensorActive ())
 		{
 			LED1_Data_ADDR |= 0b00001000;
 			Timer13_1_SetPeriod(10);		
    			Timer13_1_Start();
 			beep_counter = 5;
 		}
 		else
 		{
 			LED1_Data_ADDR &= ~0b00001000;
 		}
 
 				
 		if ( ! (beep_counter --) )
 		{
 			Timer13_1_Stop();
 		}
   }
 } 
 
 //------------------------------------------------------------------------
 // myTimer_ISR_Handler    // The handler for the Timer ISR
 //------------------------------------------------------------------------
 void timer_ISR_Handler(void)
 {
 	BUZZER_Data_ADDR ^= 0b00010000;
 }

Le handler d'IT est déclaré avec le pragma "interrupt_handler". Pour qu'il soit effectivement appelé, il faut l'associer au vecteur "Time interrupt" dont l'adresse est 10h. Pour ce faire, il faut modifier le fichier "boot.asm". En voici un extrait :

   ;---------------------------------------------------
   ; Insert your custom code below this banner
   ;---------------------------------------------------
   org   04h                      ;Low Voltage Detect (LVD) Interrupt Vector
   halt                           ;Stop execution if power falls too low
   org   08h                      ;Analog Interrupt Vector
   // call	void_handler
   reti
   org   0Ch                      ;CapSense Interrupt Vector
   ljmp	_CSA_EMC_1_ISR
   reti
   org   10h                      ;Timer Interrupt Vector
   ljmp	_timer_ISR_Handler
   reti
   org   14h                      ;GPIO Interrupt Vector
   ljmp	PSoC_GPIO_ISR
   reti

Attention : si on regénère l'application, on perd les modifications du fichier "boot.asm". Aussi, une fois le composant configuré, l'application se génère avec le menu "Build/Build '<xxx>' Project" et non celui surligné en jaune sur la copie d'écran ci-après :

Psoc build.jpg

Conclusion

Personal tools