Systeme embarqué

Fermé
Hello_sarra Messages postés 33 Date d'inscription samedi 22 décembre 2012 Statut Membre Dernière intervention 22 février 2014 - 27 mai 2013 à 19:20
Bonjour
Merci de vos aides et desolé por le dérangement


//----------------------------------------------------------------------------
// C main line
//----------------------------------------------------------------------------

#include <m8c.h>
#include "PSoCAPI.h"
#include "PWM16.h"
#include "stdlib.h"
#include "string.h"
#include "PCF8583.h"
#include "M93C56.h"

char key_result[2] = {0, 0};
char rows = 0, cols = 0;
int i;
date_time_t dt={00,44,8,10,8,11};




char keypad_scan(void)
{
/* Drive rows */
PRT4DR = 0xF0;
/* Read columns */
rows = PRT4DR;
/* Drive columns */
PRT4DR = 0x0F;
/* Read rows */
cols = PRT4DR;

/* Combine results, return result */
return (rows & cols);
}

void debut_led(void)
{
LED0_Switch(1); // Turn on LED
delayms(100);
LED0_Invert(); // Flash LED
LED1_Switch(1); // Turn on LED
delayms(100);
LED1_Invert(); // Flash LED
LED2_Switch(1); // Turn on LED
delayms(100);
LED2_Invert(); // Flash LED
LED3_Switch(1); // Turn on LED
delayms(100);
LED3_Invert(); // Flash LED
LED4_Switch(1); // Turn on LED
delayms(100);
LED4_Invert(); // Flash LED
LED5_Switch(1); // Turn on LED
delayms(100);
LED5_Invert(); // Flash LED
LED6_Switch(1); // Turn on LED
delayms(100);
LED6_Invert(); // Flash LED
LED7_Switch(1); // Turn on LED
delayms(100);
LED7_Invert(); // Flash LED
}



void chrono_7segment(void)
{
for(i=0;i<9999;i++)
{
LED7SEG_DispInt(i, 1, 4);
key_result[0] = keypad_scan();
if(key_result[0]!=0) break;
delayms(10);
}

}


void test_keypad(void)
{

switch (key_result[0])
{ case 0x18:
// Display pressed keypad button

LCD_Position(1, 0);
LCD_PrCString("B1");
break;
case 0x14:
// Display pressed keypad button

LCD_Position(1, 0);
LCD_PrCString("B2");
break;
case 0x12:

// Display pressed keypad button

LCD_Position(1, 0);
LCD_PrCString("B16");
break;
default:
LCD_Start();
LCD_PrCString("test Keypad:");
break;

}
}

void main(void)
{
int i;
LCD_BL_Start();
LED0_Start();
LED1_Start();
LED2_Start();
LED3_Start();
LED4_Start();
LED5_Start();
LED6_Start();
LED7_Start();
LCD_BL_Switch(1); // Turn on LED
OneWire_1_Start();
LCD_Start();
// Start PGA with High power
PGA_1_Start(PGA_1_HIGHPOWER);
//ADC power level set to highest power.
DELSIG11_Start(DELSIG11_HIGHPOWER);
//starts conversion process by enabling the timer,integrator and the decimator
DELSIG11_StartAD();
I2Cm_Start();
PCF8583Init();
CS_CAN_Start();
CS_EEPROM_Start();
M93C56Init();
//Enable global interrupts
M8C_EnableGInt;

while(1)
{
key_result[0] = keypad_scan();
while(key_result[0]!=0x18)
{ LCD_Init();
delayms(1000);
LCD_Position(0,1);
LCD_PrCString(" B1 next");
delayms(500);
key_result[0] = keypad_scan();
}


//test led
LCD_Init();
LCD_Position(0,1);
LCD_PrCString("test Led :");
delayms(100);
delayms(100);
test_led();
delayms(500);
key_result[0] = keypad_scan();
while(key_result[0]!=0x18)
{
debut_led();
delayms(100);
key_result[0] = keypad_scan();
}

//test 7 segment

LCD_Init();
delayms(100);
LCD_Position(0,0);
LCD_PrCString("test tr");
delayms(100);
LED7SEG_Start(); // Enable display
chrono_7segment();
LED7SEG_Stop(); // Enable display
delayms(100);
key_result[0] = keypad_scan();

while(key_result[0]!=0x18)
{

delayms(100);
LED7SEG_Start(); // Enable display
chrono_7segment();
LED7SEG_Stop(); // Enable display
delayms(100);
key_result[0] = keypad_scan();

}




//test Keypad

LCD_Init();
delayms(100);
LCD_Position(0,0);
LCD_PrCString("test Keypad:");
delayms(100);
test_keypad();
delayms(1000);
key_result[0] = keypad_scan();

while(key_result[0]!=0x18)
{
delayms(100);
LCD_Init();
test_keypad();
delayms(100);
key_result[0] = keypad_scan();
}

LCD_Init();
delayms(100);
LCD_Position(0,0);
LCD_PrCString(" B2 end");
delayms(100);
while(key_result[0]!=0x14)
{
delayms(100);
key_result[0] = keypad_scan();
}

}
}



Fonctionnement


Dans cette application le PSOC permet de gérer le programme en trois parties principales :
Lorsque le LED est s'allume la première partie est commencée, cette partie permet de mesurer le temps de réaction : c'est le période de temps entre l'instant d'allumage d'une LED et l'appui sur un bouton B1 de clavier. Cet mesure se fait à partir d'un compteur qui est déclenché lorsque la LED est s'allume et s'arrête au niveau de l'appui sur B1. Cette fonction de compteur se fait à l'aide d'un module « afficheur 7 segment » qui facilite de compter la période de temps puis en l'envoi cette valeur à EEPROM pour le stockée. Cet appui de B1 c'est au même temps le début de deuxième partie « période d'effort » qui permet de mesurer la période à l'aide d'un compteur entre le 1ére appui sur un bouton B1 et l'arrêter du comptage au 2ème appui sur le même bouton. Enfin on trouve la troisième partie « force maximale » permet d'afficher la valeur de force à l'aide d'un capteur bien programmé qui détecter la valeur exacte de force et le transformer à une tension électrique modulé et adaptée a la tension d'entrée de la carte PSoC . Cette carte acceptée cette signal qui stockée directement dans la mémoire EEPROM et fait la démodulation pour l'affichée enfin tous les valeurs sur LCD de PSOC.