IHM carte NBOARD Mai 2018

Dependents:   NBoard_IHM_V2 ex20_fonction ex21_PWM1 ex26 ... more

Fork of IHM_V2 by NBoard

Committer:
slowness
Date:
Tue May 22 15:06:28 2018 +0000
Revision:
6:ad91067e3f6d
Parent:
5:255e1428f05f
retire le mode debug de l'interruption

Who changed what in which revision?

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