Dylan Saada / Mbed 2 deprecated telemetre2

Dependencies:   mbed

Committer:
dylancachan
Date:
Wed Apr 15 06:23:18 2015 +0000
Revision:
0:6ce9c65992e5
telemetre

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dylancachan 0:6ce9c65992e5 1 /* FILE: IHM.c */
dylancachan 0:6ce9c65992e5 2 /****************************************************************************************/
dylancachan 0:6ce9c65992e5 3 /* MODULE NAME: IHM 16x2 */
dylancachan 0:6ce9c65992e5 4 /* */
dylancachan 0:6ce9c65992e5 5 /* AUTHOR : Jacques-Olivier KLEIN */
dylancachan 0:6ce9c65992e5 6 /* Bruno LARNAUDIE */
dylancachan 0:6ce9c65992e5 7 /* */
dylancachan 0:6ce9c65992e5 8 /* EMAIL : jacques-olivier.klein@u-psud.fr */
dylancachan 0:6ce9c65992e5 9 /* bruno.larnaudie@u-psud.fr */
dylancachan 0:6ce9c65992e5 10 /* */
dylancachan 0:6ce9c65992e5 11 /* INSTITUTION: IUT de CACHAN - 9 av. de la div. Leclerc - 94230 CACHAN */
dylancachan 0:6ce9c65992e5 12 /* */
dylancachan 0:6ce9c65992e5 13 /* DATE : 12/07/2012 */
dylancachan 0:6ce9c65992e5 14 /* CPU : FREESCALE MC9S12XS128MAA */
dylancachan 0:6ce9c65992e5 15 /* BOARD : CACHAN Xboard + IHM16x2 */
dylancachan 0:6ce9c65992e5 16 /* OS : None */
dylancachan 0:6ce9c65992e5 17 /* */
dylancachan 0:6ce9c65992e5 18 /* DESCRIPTION: Fonctions d'accès au Lcd émulé passant par le bus CAN */
dylancachan 0:6ce9c65992e5 19 /****************************************************************************************/
dylancachan 0:6ce9c65992e5 20
dylancachan 0:6ce9c65992e5 21 #include <stdarg.h> // Pour va_list ... dans IHM_printf
dylancachan 0:6ce9c65992e5 22 #include <stdio.h> // Pour vprintf et setprintf
dylancachan 0:6ce9c65992e5 23 #include "all_includes.h"
dylancachan 0:6ce9c65992e5 24
dylancachan 0:6ce9c65992e5 25 extern DigitalOut myled[4];
dylancachan 0:6ce9c65992e5 26 extern unsigned char Reception_CAN;
dylancachan 0:6ce9c65992e5 27 CANMessage trame_Tx;
dylancachan 0:6ce9c65992e5 28 extern CANMessage can_MsgRx[SIZE_FIFO];
dylancachan 0:6ce9c65992e5 29 extern CAN can; /*Configuration des ports du CAN : rd p30 td p29*/
dylancachan 0:6ce9c65992e5 30
dylancachan 0:6ce9c65992e5 31 /****************************************************************************************/
dylancachan 0:6ce9c65992e5 32 /* Variables globales */
dylancachan 0:6ce9c65992e5 33 /****************************************************************************************/
dylancachan 0:6ce9c65992e5 34 UINT8 curseur=0;
dylancachan 0:6ce9c65992e5 35 static char tableau_ecran[32]={32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32};
dylancachan 0:6ce9c65992e5 36 UINT8 IHM_is_running = 0;
dylancachan 0:6ce9c65992e5 37
dylancachan 0:6ce9c65992e5 38 /****************************************************************************************/
dylancachan 0:6ce9c65992e5 39 /* FUNCTION NAME: IHM_init */
dylancachan 0:6ce9c65992e5 40 /* DESCRIPTION : Initialise l'afficheur IHM */
dylancachan 0:6ce9c65992e5 41 /* RETURN : VOID */
dylancachan 0:6ce9c65992e5 42 /****************************************************************************************/
dylancachan 0:6ce9c65992e5 43 void IHM_init(void)
dylancachan 0:6ce9c65992e5 44 {
dylancachan 0:6ce9c65992e5 45 }
dylancachan 0:6ce9c65992e5 46
dylancachan 0:6ce9c65992e5 47
dylancachan 0:6ce9c65992e5 48 /****************************************************************************************/
dylancachan 0:6ce9c65992e5 49 /* FUNCTION NAME: IHM_gotoxy */
dylancachan 0:6ce9c65992e5 50 /* DESCRIPTION : Modifie la position du curseur sur l'afficheur LCD de la carte IHM */
dylancachan 0:6ce9c65992e5 51 /* RETURN : VOID */
dylancachan 0:6ce9c65992e5 52 /* PARAMETER 1 : UINT8 x : indice de la ligne (0 à 1) */
dylancachan 0:6ce9c65992e5 53 /* PARAMETER 2 : UINT8 y : indice de la colonne (0 à 15) */
dylancachan 0:6ce9c65992e5 54 /****************************************************************************************/
dylancachan 0:6ce9c65992e5 55 void IHM_gotoxy (UINT8 x, UINT8 y)
dylancachan 0:6ce9c65992e5 56 {
dylancachan 0:6ce9c65992e5 57 curseur=(x*16+y)%32;
dylancachan 0:6ce9c65992e5 58 }
dylancachan 0:6ce9c65992e5 59
dylancachan 0:6ce9c65992e5 60
dylancachan 0:6ce9c65992e5 61 /****************************************************************************************/
dylancachan 0:6ce9c65992e5 62 /* FUNCTION NAME: IHM_sendchar */
dylancachan 0:6ce9c65992e5 63 /* DESCRIPTION : Envoie un caractere à afficher au controleur de l'afficheur LCD */
dylancachan 0:6ce9c65992e5 64 /* RETURN : VOID */
dylancachan 0:6ce9c65992e5 65 /* PARAMETER 1 : char data : caractère à afficher */
dylancachan 0:6ce9c65992e5 66 /****************************************************************************************/
dylancachan 0:6ce9c65992e5 67 void IHM_sendchar (char data)
dylancachan 0:6ce9c65992e5 68 {
dylancachan 0:6ce9c65992e5 69 tableau_ecran[curseur]=data;
dylancachan 0:6ce9c65992e5 70 curseur=(curseur+1)%32;
dylancachan 0:6ce9c65992e5 71 }
dylancachan 0:6ce9c65992e5 72
dylancachan 0:6ce9c65992e5 73
dylancachan 0:6ce9c65992e5 74 /****************************************************************************************/
dylancachan 0:6ce9c65992e5 75 /* FUNCTION NAME: IHM_printf */
dylancachan 0:6ce9c65992e5 76 /* DESCRIPTION : Affichage formaté de type "printf" sur un afficheur LCD */
dylancachan 0:6ce9c65992e5 77 /* RETURN : VOID */
dylancachan 0:6ce9c65992e5 78 /* PARAMETER 1 : char* format : format d'affichage de printf */
dylancachan 0:6ce9c65992e5 79 /* PARAMETER 2 : ... : parametres à afficher */
dylancachan 0:6ce9c65992e5 80 /* Attention : le nouvel affichage doit recouvrir le précédent. */
dylancachan 0:6ce9c65992e5 81 /*********************** NOTE concernant la commande IHM_printf *************************/
dylancachan 0:6ce9c65992e5 82 /* Les appels melangés à printf, LCD_printf et IHM_printf peuvent donner des resutlats */
dylancachan 0:6ce9c65992e5 83 /* imprevisibles */
dylancachan 0:6ce9c65992e5 84 /* */
dylancachan 0:6ce9c65992e5 85 /* L'IHM doit etre initialise par la fonction IHM_init */
dylancachan 0:6ce9c65992e5 86 /****************************************************************************************/
dylancachan 0:6ce9c65992e5 87 void IHM_printf(const char* format, ...)
dylancachan 0:6ce9c65992e5 88 {
dylancachan 0:6ce9c65992e5 89 //oldcurseur=curseur;
dylancachan 0:6ce9c65992e5 90 unsigned char i,j;
dylancachan 0:6ce9c65992e5 91 va_list args;
dylancachan 0:6ce9c65992e5 92 //sprintf(
dylancachan 0:6ce9c65992e5 93 //set_printf(IHM_sendchar); /* Placement des datas dans le tableau */
dylancachan 0:6ce9c65992e5 94 //vputc(IHM_sendchar);
dylancachan 0:6ce9c65992e5 95 va_start(args, format);
dylancachan 0:6ce9c65992e5 96 vsprintf(tableau_ecran+curseur,format, args);
dylancachan 0:6ce9c65992e5 97 va_end(args);
dylancachan 0:6ce9c65992e5 98 // envoi sur le bus can du tableau complet de l'ecran
dylancachan 0:6ce9c65992e5 99 for(j=0;j<4;j++)
dylancachan 0:6ce9c65992e5 100 {
dylancachan 0:6ce9c65992e5 101 trame_Tx.id=LCD_CHAR0+j;
dylancachan 0:6ce9c65992e5 102 trame_Tx.type=CANData;
dylancachan 0:6ce9c65992e5 103 trame_Tx.len=8;
dylancachan 0:6ce9c65992e5 104 for(i=0;i<8;i++)
dylancachan 0:6ce9c65992e5 105 trame_Tx.data[i]=tableau_ecran[i+j*8];
dylancachan 0:6ce9c65992e5 106 while(!can.write(trame_Tx));
dylancachan 0:6ce9c65992e5 107 }
dylancachan 0:6ce9c65992e5 108 }
dylancachan 0:6ce9c65992e5 109 /****************************************************************************************/
dylancachan 0:6ce9c65992e5 110 /* FUNCTION NAME: IHM_sendstring */
dylancachan 0:6ce9c65992e5 111 /* DESCRIPTION : Affiche une chaine sur l'IHM */
dylancachan 0:6ce9c65992e5 112 /* RETURN : VOID */
dylancachan 0:6ce9c65992e5 113 /* PARAMETER 1 : char* message : chaine de caractere a afficher */
dylancachan 0:6ce9c65992e5 114 /****************************************************************************************/
dylancachan 0:6ce9c65992e5 115 void IHM_sendstring (char* message)
dylancachan 0:6ce9c65992e5 116 {
dylancachan 0:6ce9c65992e5 117 unsigned char i,j;
dylancachan 0:6ce9c65992e5 118 sprintf(tableau_ecran+curseur,message);
dylancachan 0:6ce9c65992e5 119
dylancachan 0:6ce9c65992e5 120 for(j=0;j<4;j++)
dylancachan 0:6ce9c65992e5 121 {
dylancachan 0:6ce9c65992e5 122 trame_Tx.id=LCD_CHAR0+j;
dylancachan 0:6ce9c65992e5 123 trame_Tx.type=CANData;
dylancachan 0:6ce9c65992e5 124 trame_Tx.len=8;
dylancachan 0:6ce9c65992e5 125 for(i=0;i<8;i++)
dylancachan 0:6ce9c65992e5 126 trame_Tx.data[i]=tableau_ecran[i+j*8];
dylancachan 0:6ce9c65992e5 127 while(!can.write(trame_Tx));
dylancachan 0:6ce9c65992e5 128 }
dylancachan 0:6ce9c65992e5 129 }
dylancachan 0:6ce9c65992e5 130 /****************************************************************************************/
dylancachan 0:6ce9c65992e5 131 /* FUNCTION NAME: IHM_clear */
dylancachan 0:6ce9c65992e5 132 /* DESCRIPTION : Efface le LCD */
dylancachan 0:6ce9c65992e5 133 /* RETURN : VOID */
dylancachan 0:6ce9c65992e5 134 /****************************************************************************************/
dylancachan 0:6ce9c65992e5 135 void IHM_clear(void)
dylancachan 0:6ce9c65992e5 136 {
dylancachan 0:6ce9c65992e5 137 UINT8 i;
dylancachan 0:6ce9c65992e5 138 curseur=0;
dylancachan 0:6ce9c65992e5 139 for(i=0;i<32;i++)
dylancachan 0:6ce9c65992e5 140 tableau_ecran[i]=32;
dylancachan 0:6ce9c65992e5 141 while(!can.write(CANMessage(LCD_CLEAR,CANStandard)));
dylancachan 0:6ce9c65992e5 142
dylancachan 0:6ce9c65992e5 143 }
dylancachan 0:6ce9c65992e5 144 /****************************************************************************************/
dylancachan 0:6ce9c65992e5 145 /* FUNCTION NAME: BAR_set */
dylancachan 0:6ce9c65992e5 146 /* DESCRIPTION : commande les 10 LED du bargraph */
dylancachan 0:6ce9c65992e5 147 /* PARAMETER 1 : UINT16 valeur : ordre d'allumage, exprimé sur les 10 bits de droite.
dylancachan 0:6ce9c65992e5 148 Le bit k doit valoir 0 pour allumer la LED k, 1 pour l'éteindre.
dylancachan 0:6ce9c65992e5 149 Exemple : ~(1<<9) allume la LED 9, ~0x00F allume les 4 LED 0 à 3 */
dylancachan 0:6ce9c65992e5 150 /****************************************************************************************/
dylancachan 0:6ce9c65992e5 151 void BAR_set(UINT16 valeur)
dylancachan 0:6ce9c65992e5 152 {
dylancachan 0:6ce9c65992e5 153 trame_Tx.id=BAR_SET;
dylancachan 0:6ce9c65992e5 154 trame_Tx.type=CANData;
dylancachan 0:6ce9c65992e5 155 trame_Tx.len=2;
dylancachan 0:6ce9c65992e5 156 trame_Tx.data[0]=valeur>>8;
dylancachan 0:6ce9c65992e5 157 trame_Tx.data[1]=(UINT8)valeur;
dylancachan 0:6ce9c65992e5 158 while(!can.write(trame_Tx));
dylancachan 0:6ce9c65992e5 159 }
dylancachan 0:6ce9c65992e5 160
dylancachan 0:6ce9c65992e5 161
dylancachan 0:6ce9c65992e5 162 /****************************************************************************************/
dylancachan 0:6ce9c65992e5 163 /* FUNCTION NAME: JOG_read */
dylancachan 0:6ce9c65992e5 164 /* DESCRIPTION : indique la position (parmi les 8 possibles) et l'enfoncement du Jog. */
dylancachan 0:6ce9c65992e5 165 /* RETURN : un octet UINT8 qui indique la position (RIGHT, LEFT, UP, DOWN + 4 combinaisons)
dylancachan 0:6ce9c65992e5 166 et l'enfoncement (PUSH) du Jog, exprimés sur 5 bits utiles.*/
dylancachan 0:6ce9c65992e5 167
dylancachan 0:6ce9c65992e5 168 /* - Si le Jog est au repos : la fonction renvoie 0 (0x00).
dylancachan 0:6ce9c65992e5 169 - si le Jog n'est pas au repos : 1 à 3 bits peuvent être mis à 1 dans l'octet renvoyé.
dylancachan 0:6ce9c65992e5 170 Il est intéressant d'utiliser les masques définis en constantes.
dylancachan 0:6ce9c65992e5 171 La signification des 8 bits de la valeur renvoyée est:
dylancachan 0:6ce9c65992e5 172 0 0 0 RIGHT UP PUSH LEFT DOWN
dylancachan 0:6ce9c65992e5 173 Plusieurs bits peuvent être à 1 en même temps. Par exemple : RIGHT + UP + PUSH
dylancachan 0:6ce9c65992e5 174 à 1 indiquent que le Jog est en position "Nord Est " (UP+RIGHT) et qu'il est enfoncé.
dylancachan 0:6ce9c65992e5 175 Si le Jog est simultanément enfoncé et positionné à droite, la fonction renvoie
dylancachan 0:6ce9c65992e5 176 (0001 0100) en binaire, soit 0x14. Exprimée avec les masques, la valeur renvoyée vaut
dylancachan 0:6ce9c65992e5 177 JOG_MSK_RIGHT | JOG_MSK_PUSH (0x14). */
dylancachan 0:6ce9c65992e5 178 /**************************************************************************************************/
dylancachan 0:6ce9c65992e5 179 /**************************************************************************************************/
dylancachan 0:6ce9c65992e5 180 /* utiliser les Constantes symboliques de IHM.h pour interpréter la valeur renvoyée par le jog... */
dylancachan 0:6ce9c65992e5 181 /**************************************************************************************************/
dylancachan 0:6ce9c65992e5 182
dylancachan 0:6ce9c65992e5 183 UINT8 JOG_read(void)
dylancachan 0:6ce9c65992e5 184 {
dylancachan 0:6ce9c65992e5 185 while(!can.write(CANMessage(JOG_REQ,CANStandard)));
dylancachan 0:6ce9c65992e5 186 while(mise_a_jour_JOG==0)
dylancachan 0:6ce9c65992e5 187 CAN_automate_reception();
dylancachan 0:6ce9c65992e5 188 mise_a_jour_JOG=0;
dylancachan 0:6ce9c65992e5 189 return JOG_valeur;
dylancachan 0:6ce9c65992e5 190
dylancachan 0:6ce9c65992e5 191 }
dylancachan 0:6ce9c65992e5 192
dylancachan 0:6ce9c65992e5 193
dylancachan 0:6ce9c65992e5 194 /***************************************************************************************************/
dylancachan 0:6ce9c65992e5 195 /* FUNCTION NAME: COD_read */
dylancachan 0:6ce9c65992e5 196 /* DESCRIPTION : indique la rotation effectuée par le codeur incrémental. */
dylancachan 0:6ce9c65992e5 197 /* RETURN : un octet UINT8 dont la valeur entre 0 et 255 indique la rotation du
dylancachan 0:6ce9c65992e5 198 codeur incrémental depuis l'initialisation du codeur (cad de la carte IHM),
dylancachan 0:6ce9c65992e5 199 exprimée en douzièmes de tours. Le codeur dispose en effet de 12 positions
dylancachan 0:6ce9c65992e5 200 et la valeur retournée s'incrémente/se décrémente à chaque 12e de tour.
dylancachan 0:6ce9c65992e5 201 Par exemple, si le codeur a été tourné de 2 tours et demi, la valeur
dylancachan 0:6ce9c65992e5 202 retournée vaut 12+12+6 = 30 = 0x1E (le codeur a effectué 30 douzièmes de tour) */
dylancachan 0:6ce9c65992e5 203 /***************************************************************************************************/
dylancachan 0:6ce9c65992e5 204
dylancachan 0:6ce9c65992e5 205 SINT8 COD_read(void)
dylancachan 0:6ce9c65992e5 206 {
dylancachan 0:6ce9c65992e5 207 while(!can.write(CANMessage(COD_REQ,CANStandard)));
dylancachan 0:6ce9c65992e5 208 while(mise_a_jour_COD==0)
dylancachan 0:6ce9c65992e5 209 CAN_automate_reception();
dylancachan 0:6ce9c65992e5 210 mise_a_jour_COD=0;
dylancachan 0:6ce9c65992e5 211 return COD_valeur;
dylancachan 0:6ce9c65992e5 212
dylancachan 0:6ce9c65992e5 213 }
dylancachan 0:6ce9c65992e5 214
dylancachan 0:6ce9c65992e5 215
dylancachan 0:6ce9c65992e5 216
dylancachan 0:6ce9c65992e5 217
dylancachan 0:6ce9c65992e5 218
dylancachan 0:6ce9c65992e5 219
dylancachan 0:6ce9c65992e5 220
dylancachan 0:6ce9c65992e5 221
dylancachan 0:6ce9c65992e5 222
dylancachan 0:6ce9c65992e5 223
dylancachan 0:6ce9c65992e5 224