Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: NBoard_IHM_V2 ex20_fonction ex21_PWM1 ex26 ... more
Fork of IHM_V2 by
Revision 0:cd0f9e8c609b, committed 2016-10-01
- Comitter:
- gr66
- Date:
- Sat Oct 01 12:23:41 2016 +0000
- Child:
- 1:663cbe5baac4
- Commit message:
- v1.0
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/IHM.cpp Sat Oct 01 12:23:41 2016 +0000
@@ -0,0 +1,283 @@
+#include "IHM.h"
+#include "all_includes.h"
+#include <stdarg.h> // Pour va_list ... dans IHM_printf
+#include <stdio.h> // Pour vprintf et setprintf
+#define CAN_REMOTE CANType(2)
+//
+
+
+IHM::IHM(PinName CANRx, PinName CANTx): can(CANRx,CANTx)
+{
+ can.frequency(1000000); /*Baud rate : kbits/s */
+ can.attach(this,&IHM::can_ISR_Reader); /* Fonction d'interruption CAN*/
+}
+void IHM::LCD_printf(const char* format, ...)
+{
+ va_list arg;
+ va_start(arg,format);
+ IHM_vprintf(format,arg);
+ va_end(arg);
+}
+unsigned char JOG_valeur,mise_a_jour_JOG=0,mise_a_jour_COD=0;
+void IHM::can_ISR_Reader(void)
+{
+ if (can.read(can_MsgRx[FIFO_ecriture])) {
+ // FIFO gestion
+ FIFO_ecriture=(FIFO_ecriture+1)%SIZE_FIFO;
+ // myled[0] = !myled[0];
+ // ledC= !ledC;
+ }
+}
+void IHM::CAN_automate_reception(void)
+{
+ static signed char FIFO_lecture=0,FIFO_occupation=0,FIFO_max_occupation=0;
+ FIFO_occupation=FIFO_ecriture-FIFO_lecture;
+ if(FIFO_occupation<0)
+ FIFO_occupation=FIFO_occupation+SIZE_FIFO;
+ if(FIFO_max_occupation<FIFO_occupation)
+ FIFO_max_occupation=FIFO_occupation;
+ if(FIFO_occupation>SIZE_FIFO)
+ while(!can.write(CANMessage(LCD_OVERFLOW,CANStandard)));
+ if(FIFO_occupation!=0) {
+ switch(can_MsgRx[FIFO_lecture].id) {
+ case JOG_DATA:
+ JOG_valeur=can_MsgRx[FIFO_lecture].data[0];
+ mise_a_jour_JOG=1;
+ break;
+ case COD_DATA:
+ COD_valeur=can_MsgRx[FIFO_lecture].data[0];
+ mise_a_jour_COD=1;
+ break;
+ default:
+ break;
+ }
+ FIFO_lecture=(FIFO_lecture+1)%SIZE_FIFO;
+ }
+}
+/* FILE: IHM.c */
+/****************************************************************************************/
+/* MODULE NAME: IHM 16x2 */
+/* */
+/* AUTHOR : Jacques-Olivier KLEIN */
+/* Bruno LARNAUDIE */
+/* */
+/* EMAIL : jacques-olivier.klein@u-psud.fr */
+/* bruno.larnaudie@u-psud.fr */
+/* */
+/* INSTITUTION: IUT de CACHAN - 9 av. de la div. Leclerc - 94230 CACHAN */
+/* */
+/* DATE : 12/07/2012 */
+/* CPU : FREESCALE MC9S12XS128MAA */
+/* BOARD : CACHAN Xboard + IHM16x2 */
+/* OS : None */
+/* */
+/* DESCRIPTION: Fonctions d'accès au Lcd émulé passant par le bus CAN */
+/****************************************************************************************/
+
+
+/****************************************************************************************/
+/* FUNCTION NAME: IHM_init */
+/* DESCRIPTION : Initialise l'afficheur IHM */
+/* RETURN : VOID */
+/****************************************************************************************/
+
+
+
+/****************************************************************************************/
+/* FUNCTION NAME: IHM_gotoxy */
+/* DESCRIPTION : Modifie la position du curseur sur l'afficheur LCD de la carte IHM */
+/* RETURN : VOID */
+/* PARAMETER 1 : UINT8 x : indice de la ligne (0 à 1) */
+/* PARAMETER 2 : UINT8 y : indice de la colonne (0 à 15) */
+/****************************************************************************************/
+void IHM::LCD_gotoxy (UINT8 x, UINT8 y)
+{
+ curseur=(x*16+y)%32;
+}
+
+
+/****************************************************************************************/
+/* FUNCTION NAME: IHM_sendchar */
+/* DESCRIPTION : Envoie un caractere à afficher au controleur de l'afficheur LCD */
+/* RETURN : VOID */
+/* PARAMETER 1 : char data : caractère à afficher */
+/****************************************************************************************/
+void IHM::IHM_sendchar (char data)
+{
+ tableau_ecran[curseur]=data;
+ curseur=(curseur+1)%32;
+}
+
+
+/****************************************************************************************/
+/* FUNCTION NAME: IHM_printf */
+/* DESCRIPTION : Affichage formaté de type "printf" sur un afficheur LCD */
+/* RETURN : VOID */
+/* PARAMETER 1 : char* format : format d'affichage de printf */
+/* PARAMETER 2 : ... : parametres à afficher */
+/* Attention : le nouvel affichage doit recouvrir le précédent. */
+/*********************** NOTE concernant la commande IHM_printf *************************/
+/* Les appels melangés à printf, LCD_printf et IHM_printf peuvent donner des resutlats */
+/* imprevisibles */
+/* */
+/* L'IHM doit etre initialise par la fonction IHM_init */
+/****************************************************************************************/
+void IHM::IHM_printf(const char* format, ...)
+{
+ //oldcurseur=curseur;
+ unsigned char i,j;
+ va_list args;
+ //sprintf(
+ //set_printf(IHM_sendchar); /* Placement des datas dans le tableau */
+ //vputc(IHM_sendchar);
+ va_start(args, format);
+ vsprintf(tableau_ecran+curseur,format, args);
+ va_end(args);
+ // envoi sur le bus can du tableau complet de l'ecran
+ for(j=0; j<4; j++) {
+ trame_Tx.id=LCD_CHAR0+j;
+ trame_Tx.type=CANData;
+ trame_Tx.len=8;
+ for(i=0; i<8; i++)
+ trame_Tx.data[i]=tableau_ecran[i+j*8];
+ while(!can.write(trame_Tx));
+ wait_us(150);
+ }
+}
+
+//********
+void IHM::IHM_vprintf(const char* format, va_list args)
+{
+ //oldcurseur=curseur;
+ unsigned char i,j;
+ ////va_list args;
+ //sprintf(
+ //set_printf(IHM_sendchar); /* Placement des datas dans le tableau */
+ //vputc(IHM_sendchar);
+ ////va_start(args, format);
+ vsprintf(tableau_ecran+curseur,format, args);
+ ////va_end(args);
+ // envoi sur le bus can du tableau complet de l'ecran
+ for(j=0; j<4; j++) {
+ trame_Tx.id=LCD_CHAR0+j;
+ trame_Tx.type=CANData;
+ trame_Tx.len=8;
+ for(i=0; i<8; i++)
+ trame_Tx.data[i]=tableau_ecran[i+j*8];
+ while(!can.write(trame_Tx));
+ wait_us(150);
+ }
+}
+/****************************************************************************************/
+/* FUNCTION NAME: IHM_sendstring */
+/* DESCRIPTION : Affiche une chaine sur l'IHM */
+/* RETURN : VOID */
+/* PARAMETER 1 : char* message : chaine de caractere a afficher */
+/****************************************************************************************/
+void IHM::IHM_sendstring (char* message)
+{
+ unsigned char i,j;
+ sprintf(tableau_ecran+curseur,message);
+
+ for(j=0; j<4; j++) {
+ trame_Tx.id=LCD_CHAR0+j;
+ trame_Tx.type=CANData;
+ trame_Tx.len=8;
+ for(i=0; i<8; i++)
+ trame_Tx.data[i]=tableau_ecran[i+j*8];
+ while(!can.write(trame_Tx));
+ wait_us(150);
+ }
+}
+/****************************************************************************************/
+/* FUNCTION NAME: IHM_clear */
+/* DESCRIPTION : Efface le LCD */
+/* RETURN : VOID */
+/****************************************************************************************/
+void IHM::LCD_clear(void)
+{
+ UINT8 i;
+ curseur=0;
+ for(i=0; i<32; i++)
+ tableau_ecran[i]=32;
+ while(!can.write(CANMessage(LCD_CLEAR,CANStandard)));
+ wait_us(150);
+}
+/****************************************************************************************/
+/* FUNCTION NAME: BAR_set */
+/* DESCRIPTION : commande les 10 LED du bargraph */
+/* PARAMETER 1 : UINT16 valeur : ordre d'allumage, exprimé sur les 10 bits de droite.
+ Le bit k doit valoir 0 pour allumer la LED k, 1 pour l'éteindre.
+ Exemple : ~(1<<9) allume la LED 9, ~0x00F allume les 4 LED 0 à 3 */
+/****************************************************************************************/
+void IHM::BAR_set(UINT16 valeur)
+{
+ trame_Tx.id=BAR_SET;
+ trame_Tx.type=CANData;
+ trame_Tx.len=2;
+ trame_Tx.data[0]=valeur>>8;
+ trame_Tx.data[1]=(UINT8)valeur;
+ while(!can.write(trame_Tx));
+}
+
+
+/****************************************************************************************/
+/* FUNCTION NAME: JOG_read */
+/* DESCRIPTION : indique la position (parmi les 8 possibles) et l'enfoncement du Jog. */
+/* RETURN : un octet UINT8 qui indique la position (RIGHT, LEFT, UP, DOWN + 4 combinaisons)
+ et l'enfoncement (PUSH) du Jog, exprimés sur 5 bits utiles.*/
+
+/* - Si le Jog est au repos : la fonction renvoie 0 (0x00).
+ - si le Jog n'est pas au repos : 1 à 3 bits peuvent être mis à 1 dans l'octet renvoyé.
+ Il est intéressant d'utiliser les masques définis en constantes.
+ La signification des 8 bits de la valeur renvoyée est:
+ 0 0 0 RIGHT UP PUSH LEFT DOWN
+ Plusieurs bits peuvent être à 1 en même temps. Par exemple : RIGHT + UP + PUSH
+ à 1 indiquent que le Jog est en position "Nord Est " (UP+RIGHT) et qu'il est enfoncé.
+ Si le Jog est simultanément enfoncé et positionné à droite, la fonction renvoie
+ (0001 0100) en binaire, soit 0x14. Exprimée avec les masques, la valeur renvoyée vaut
+ JOG_MSK_RIGHT | JOG_MSK_PUSH (0x14). */
+/**************************************************************************************************/
+/**************************************************************************************************/
+/* utiliser les Constantes symboliques de IHM.h pour interpréter la valeur renvoyée par le jog... */
+/**************************************************************************************************/
+
+UINT8 IHM::JOG_read(void)
+{
+ trame_Tx.id=JOG_REQ;
+ trame_Tx.type=CAN_REMOTE;
+ while(!can.write(trame_Tx));
+
+ while(mise_a_jour_JOG==0)
+ CAN_automate_reception();
+ mise_a_jour_JOG=0;
+ return JOG_valeur;
+
+}
+
+
+/***************************************************************************************************/
+/* FUNCTION NAME: COD_read */
+/* DESCRIPTION : indique la rotation effectuée par le codeur incrémental. */
+/* RETURN : un octet UINT8 dont la valeur entre 0 et 255 indique la rotation du
+ codeur incrémental depuis l'initialisation du codeur (cad de la carte IHM),
+ exprimée en douzièmes de tours. Le codeur dispose en effet de 12 positions
+ et la valeur retournée s'incrémente/se décrémente à chaque 12e de tour.
+ Par exemple, si le codeur a été tourné de 2 tours et demi, la valeur
+ retournée vaut 12+12+6 = 30 = 0x1E (le codeur a effectué 30 douzièmes de tour) */
+/***************************************************************************************************/
+
+UINT8 IHM::COD_read(void)
+{
+ trame_Tx.id=COD_REQ;
+ trame_Tx.type=CAN_REMOTE;
+ while(!can.write(trame_Tx));
+
+// while(!can.write(CANMessage(COD_REQ,CANStandard)));
+ while(mise_a_jour_COD==0)
+ CAN_automate_reception();
+ mise_a_jour_COD=0;
+ return COD_valeur;
+
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/IHM.h Sat Oct 01 12:23:41 2016 +0000
@@ -0,0 +1,124 @@
+/// @file IHM.h Bibliothéque de classe pour la carte Zboard
+/// @mainpage
+///
+///
+///
+/// @author Gilles Raynaud, IUT Cachan
+///
+/// @note
+/// History
+/// v1.00 01/10/2016
+#include "all_includes.h"
+#define SIZE_FIFO 32
+#define MESSAGE_BUFFER_SIZE 20
+#define JOG_MSK_PUSH (1<<2) // valeur renvoyée si le Jog est enfoncé (en position de repos)
+#define JOG_MSK_RIGHT (1<<4) // valeur renvoyée si le Jog est poussé vers la droite (non enfoncé).
+#define JOG_MSK_UP (1<<3) // valeur renvoyée si le Jog est poussé vers le haut (non enfoncé).
+#define JOG_MSK_LEFT (1<<1) // valeur renvoyée si le Jog est poussé vers la gauche (non enfoncé).
+#define JOG_MSK_DOWN 1 // valeur renvoyée si le Jog est poussé vers le bas (non enfoncé).
+
+//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};
+
+//
+///
+/// Example:
+/// @code
+///#include "IHM.h"
+///IHM ihm;
+///Serial pc(SERIAL_TX, SERIAL_RX);
+///int main()
+///{
+/// unsigned char i=0,j;
+/// float pi=4*atan(1.0);
+/// pc.printf("debut");
+/// ihm.LCD_printf("Hello World ");
+/// ihm.LCD_gotoxy(1,0);
+ /// ihm.LCD_printf("PI= %f",pi); // test affichage float
+/// ihm.BAR_set(0x3FF);
+/// wait(2);
+/// ihm.BAR_set(0x2AA);
+/// wait(2);
+/// ihm.BAR_set(0x155);
+/// wait(2);
+/// ihm.LCD_clear();
+/// while(1) {
+/// wait(0.1);
+/// printf("cod");
+/// i=ihm.COD_read();
+/// j=ihm.JOG_read();
+/// ihm.BAR_set((UINT16)(i));
+/// ihm.LCD_gotoxy(0,0);
+/// ihm.LCD_printf("Jog=%02d",j);
+/// ihm.LCD_gotoxy(1,0);
+/// ihm.LCD_printf("Cod=%03d",i);
+/// }
+///}
+/// @endcode
+///
+class IHM
+{
+public:
+ /// Constructeur pour l'interface Zboard, normalement placé à l'extérieur de main
+ /// Les paramètres peuvent être omis (ils ont tous une valeur par défaut)
+ ///
+ IHM(PinName CANRx=PA_11, PinName CANTx=PA_12);
+ /// commande des 10 leds du bargraph
+ ///
+ /// Affiche la valeur passée en argument sur le bargraph
+ /// @param valeur à afficher sur le bargraph
+ /// @returns void
+ ///
+ void BAR_set(UINT16 valeur);
+ /// lecteur du codeur
+ ///
+ /// Retourne la valeur du codeur (0-255)
+ /// @param void
+ /// @returns valeur du codeur
+ ///
+ UINT8 COD_read(void);
+ /// positionne le curseur de l'afficheur LCD
+ ///
+ /// @param x colonne
+ /// @param y ligne
+ /// @returns void
+ ///
+ void LCD_gotoxy(UINT8,UINT8);
+
+ /// écriture formatée sur l'afficheur LCD
+ ///
+ /// @param format...
+ /// @returns void
+ ///
+ void LCD_printf(const char* format, ...);
+ /// effacement de l'afficheur LCD
+ ///
+ /// @param void
+ /// @returns void
+ ///
+ void LCD_clear(void);
+ /// lecture du JOG
+ /// retourne la position (8 possibilités) et l'enfoncement du Jog
+ /// @param void
+ /// @returns void
+ ///
+ UINT8 JOG_read(void);
+private:
+ int COD_valeur;
+ unsigned char JOG_valeur,mise_a_jour_JOG,mise_a_jour_COD;
+ unsigned char FIFO_ecriture;
+// CANMessage can_MsgRx[SIZE_FIFO];
+ UINT8 curseur;
+ UINT8 IHM_is_running;
+ CANMessage can_MsgRx[SIZE_FIFO], can_MsgTx;
+//extern unsigned char Reception_CAN;
+CANMessage trame_Tx;
+//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};
+char tableau_ecran[32];
+ CAN can;
+ void can_ISR_Reader(void);
+ void CAN_automate_reception(void);
+ void IHM_sendchar (char data);
+ void IHM_printf(const char* format, ...);
+ void IHM_vprintf(const char* format, va_list args);
+ void IHM_sendstring (char* message);
+};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/all_includes.h Sat Oct 01 12:23:41 2016 +0000 @@ -0,0 +1,5 @@ +#include "mbed.h" +#include "ktypes.h" +#include "ident.h" + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ident.h Sat Oct 01 12:23:41 2016 +0000 @@ -0,0 +1,58 @@ +#ifndef _IDENT_H +#define _IDENT_H + +/* FILE: ident.h */ +/****************************************************************************************/ +/* MODULE NAME: MC9S12XS128 - MSCAN => Motorola Scalable Controller Area Network */ +/* (BUS CAN) */ +/* */ +/* AUTHOR : BRUNO LARNAUDIE */ +/* */ +/* EMAIL : bruno.larnaudie@u-psud.fr */ +/* */ +/* INSTITUTION: IUT de CACHAN - 9 av. de la div. Leclerc - 94230 CACHAN */ +/* */ +/* DATE : 03/07/2012 */ +/* CPU : FREESCALE MC9S12XS128MAA */ +/* BOARD : CACHAN Xboard+MicroB12 */ +/* OS : None */ +/* */ +/* DESCRIPTION: Identifiants utilises sur le bus CAN */ +/****************************************************************************************/ + +// NOM ID |Flag |Sens |Data | Fonction | Data | +// |Mess |(I/O)|Req | | nb | Type | contenu (dans l'ordre) | +//------------------------------------------------------------------------------------------------------------------------| +// Carte IHM 0x700-0x7FF | | | | | | | | +//------------------------------------------------------------------------------------------------------------------------| +// //| | | | | | | | +// Module LCD 16x2 //| | | | | | | | +#define LCD_CHAR0 0x700 //| M | O | D |char 0 a 7 sur LCD | 8 | U8 | C00|C01|C02|C03|C04|C05|C06|C07 | +#define LCD_CHAR1 0x701 //| M | O | D |char 8 a 15 sur LCD | 8 | U8 | C08|C09|C10|C11|C12|C13|C14|C15 | +#define LCD_CHAR2 0x702 //| M | O | D |char 16 a 23 sur LCD| 8 | U8 | C16|C17|C18|C19|C20|C21|C22|C23 | +#define LCD_CHAR3 0x703 //| M | O | D |char 24 a 31 sur LCD| 8 | U8 | C24|C25|C26|C27|C28|C29|C30|C31 | +// //| | | | | | | | +// 0x704 //| | | | | | | Reserve pour un éventuel LCD | +// Réservé ... //| | | | | | | plus grand ou tactile | +// 0x77D //| | | | | | | | +// //| | | | | | | | +#define LCD_OVERFLOW 0x77E //| M | O | R |Flag d'Overflow LCD | 0 | | | +#define LCD_CLEAR 0x77F //| M | O | D | | 0 | | Efface l'ecran LCD | + //| | | | | | | | +// JOG //| | | | | | | | +#define JOG_REQ 0x790 //| M | I | R | Demande valeur JOG | 0 | | | +#define JOG_DATA 0x791 //| M | O | D | Valeur JOG | 1 | U8 | STATUS_JOG=PTP | +// CODEUR | | | | | | | | +#define COD_REQ 0x7A0 //| M | I | R | Demande valeur COD | 0 | | | +#define COD_DATA 0x7A1 //| M | O | D | Valeur COD | 1 | S8 | OFFSET du CODEUR entre -128 et 127| +// BARGRAPH | | | | | | | | +#define BAR_SET 0x7B0 //| M | I | D | valeur bargraph | 2 | U16 | Les bits à allumer | +//------------------------------------------------------------------------------------------------------------------------| +/* Légende : I = Consigne pour la carte + O = Etat donné par la carte + + D = Trame de données + R = Trame de requete */ + +#endif +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ktypes.h Sat Oct 01 12:23:41 2016 +0000 @@ -0,0 +1,56 @@ +#ifndef __KTYPES_H__ +#define __KTYPES_H__ + +/* FILE: ktypes.h */ +/****************************************************************************************/ +/* MODULE NAME: None */ +/* */ +/* AUTHOR : Jacques-Olivier KLEIN */ +/* */ +/* EMAIL : jacques-olivier.klein@u-psud.fr */ +/* */ +/* INSTITUTION: IUT de CACHAN - 9 av. de la div. Leclerc - 94230 CACHAN */ +/* */ +/* DATE : 03/07/2012 */ +/* CPU : FREESCALE MC9S12XS128MAA */ +/* BOARD : CACHAN Xboard+MicroB12 */ +/* OS : None */ +/* */ +/* DESCRIPTION: Definition des types de longueurs fixes */ +/****************************************************************************************/ + +#ifndef TRUE +#define TRUE 1 +#endif +#ifndef FALSE +#define FALSE 0 +#endif + +typedef unsigned char BOOL ; + +typedef unsigned char UINT8; +typedef unsigned short UINT16; +typedef unsigned long UINT32; +typedef signed char SINT8; +typedef signed short SINT16; +typedef signed long SINT32; + +typedef unsigned char INT8U; +typedef unsigned short INT16U; +typedef unsigned long INT32U; +typedef signed char INT8S; +typedef signed short INT16S; +typedef signed long INT32S; + +typedef unsigned char U8; +typedef unsigned short U16; +typedef unsigned long U32; +typedef signed char S8; +typedef signed short S16; +typedef signed long S32; + +typedef volatile unsigned char VUINT8; + + +#endif +
