Gestion des Interruptions externes et du TIMER matériel

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 
00002 //----------------------   08_TP4_Ex1_1    ----------------------------
00003 // Affichage d'un chiffre hexadécimal (de 0 à F) toutes  les secondes 
00004 //---------------------------------------------------------------------
00005 #include "mbed.h"
00006 BusOut   Aff_7Seg(PB_3, PA_15, PA_12, PA_11, PA_10, PA_9, PA_8);
00007 BusOut   D(PB_12,PB_13,PB_14,PB_15);
00008 int Caract_7Seg[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 
00009                      0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71 };
00010 char Compteur;
00011 int main() {
00012     D=1;  // 1er Aff ->D=1,  2eme Aff ->D=2, 3eme Aff->D=4, 4eme Aff->D=8
00013     while(1) {
00014         Aff_7Seg = Caract_7Seg[(Compteur++)%16 ];
00015         wait(1);
00016     }
00017 }
00018 
00019 /*
00020 
00021 //-----------------------   08_TP4_Ex1_2    ------------------------------
00022 // Affichage d'un chiffre hexadécimal (de 0 à F) toutes  les secondes avec 
00023 // interruption du timer matériel (Ticker)
00024 //-------------------------------------------------------------------------
00025 #include "mbed.h"
00026 BusOut   Aff_7Seg(PB_3, PA_15, PA_12, PA_11, PA_10, PA_9, PA_8);
00027 BusOut   D(PB_12,PB_13,PB_14,PB_15);
00028 int Caract_7Seg[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 
00029                      0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71 };
00030 Ticker Tempo;
00031 char Compteur ;
00032 void SPI_Tempo(){
00033       Aff_7Seg=Caract_7Seg[(Compteur++)%16];
00034 }
00035 int main() {
00036     Tempo.attach(..................................................);
00037     D=1;  // 1er Aff ->D=1,  2eme Aff ->D=2, 3eme Aff->D=4, 4eme Aff->D=8
00038     while(1) {        
00039     }
00040 }
00041 //----------------------   08_TP4_Ex2_1    ---------------------------------
00042 // Affichage de la valeur de la tension appliquée à l’entrée PA_1 en mV sans 
00043 // interruption du timer matériel (Ticker)
00044 //--------------------------------------------------------------------------
00045 #include "mbed.h"
00046 BusOut   Aff_7Seg(PB_3, PA_15, PA_12, PA_11, PA_10, PA_9, PA_8);
00047 BusOut   D(PB_12,PB_13,PB_14,PB_15);
00048 int Chiff_7Seg[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 
00049                      0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71 };
00050 AnalogIn RV(PA_1);
00051 char Compteur;
00052 float tension_f;
00053 int16_t tension,i;
00054 char tab[4]; //pour 2345mV->tab[0]=2,tab[1]=3,tab[2]=4,tab[3]=5,
00055 int main() {
00056     while(1) {
00057        tension = RV.read_u16()*3300/65536;  //tension en mV
00058        tab[0]=tension/1000;
00059        tension=tension%1000;
00060        tab[1]=tension/100;
00061        tension=tension%100;
00062        tab[2]=tension/10;
00063        tab[3]=.........................................................
00064        for(i=0; i<25; i++) {    
00065           D=0;
00066           Aff_7Seg = Chiff_7Seg[tab[0]];
00067           D=8;
00068           wait_ms(5);
00069       
00070           D=0;
00071           Aff_7Seg = Chiff_7Seg[tab[1]];
00072           D=4;
00073           wait_ms(5);
00074       
00075           D=0;
00076           Aff_7Seg = Chiff_7Seg[.....................];
00077           D=...............................
00078           wait_ms(5);
00079       
00080           D=0;
00081           Aff_7Seg = Chiff_7Seg[.................];
00082           D=............................
00083           wait_ms(5);
00084       }
00085    }
00086 }
00087 //------------------------   08_TP4_Ex2_2    -------------------------------
00088 // Affichage de la valeur de la tension appliquée à l’entrée PA_1 en mV avec 
00089 // interruption du timer matériel (Ticker)
00090 //--------------------------------------------------------------------------
00091 #include "mbed.h"
00092 BusOut   Aff_7Seg(PB_3, PA_15, PA_12, PA_11, PA_10, PA_9, PA_8);
00093 BusOut   D(PB_12,PB_13,PB_14,PB_15);
00094 int Chiff_7Seg[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 
00095                      0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71 };
00096 Ticker Tempo_Multiplex;
00097 Ticker Tempo_Acquis;
00098 AnalogIn RV(PA_1);
00099 char Compteur=0;
00100 int16_t tension;
00101 char tab[4]; //pour 2345mV->tab[0]=2,tab[1]=3,tab[2]=4,tab[3]=5,
00102 void SPI_Tempo_Multiplex(){
00103     Compteur +=1;
00104     if(Compteur == 4) Compteur=0;
00105     switch(.......................................) {
00106         case 0 :  D=0;
00107                   Aff_7Seg = Chiff_7Seg[tab[0]];
00108                   D=8;
00109                   break;
00110         case 1 :  D=0;
00111                   Aff_7Seg = Chiff_7Seg[tab[1]];
00112                   D=4;
00113                   break;
00114         case 2 :  D=0;
00115                   Aff_7Seg = Chiff_7Seg[tab[2]];
00116                   D=2;
00117                   break;
00118         case 3 :  D=0;
00119                   Aff_7Seg = Chiff_7Seg[tab[3]];
00120                   D=1;
00121                   break;
00122     }
00123 }
00124 void SPI_Tempo_Acquis(){
00125     tension = RV.read_u16()*3300/65536;  //tension en mV
00126     tab[0]=tension/1000;
00127     tension=tension%1000;
00128     tab[1]=tension/100;
00129     tension=tension%100;
00130     tab[2]=tension/10;
00131     tab[3]=tension%10;
00132 }
00133 int main() {
00134     Tempo_Multiplex.attach_us(...................................,5000);
00135     Tempo_Acquis.attach(&SPI_Tempo_Acquis,1);
00136     while(1) {        
00137    }
00138 }
00139 //-------------------------   08_TP4_Ex2_3    -------------------------------------
00140 //L’appuie sur le bouton poussoir BP1 permet d’éteindre les 4 afficheurs 7 segments
00141 // et l’appuie sur le bouton poussoir BP2 permet d’afficher la tension en mV sur les 
00142 // 4 afficheurs. Programme précédent sans interruptions externes des broches 
00143 // PB_10 et PB_11
00144 //---------------------------------------------------------------------------------
00145 #include "mbed.h"
00146 BusOut   Aff_7Seg(PB_3, PA_15, PA_12, PA_11, PA_10, PA_9, PA_8);
00147 BusOut   D(PB_12,PB_13,PB_14,PB_15);
00148 int Chiff_7Seg[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 
00149                      0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71 };
00150 DigitalIn  BP1(PB_10,PullUp);
00151 DigitalIn  BP2(PB_11,PullUp);
00152 Ticker Tempo_Multiplex;
00153 Ticker Tempo_Acquis;
00154 AnalogIn RV(PA_1);
00155 char Compteur=0;
00156 int16_t tension;
00157 char tab[4]; //pour 2345mV->tab[0]=2,tab[1]=3,tab[2]=4,tab[3]=5,
00158 void SPI_Tempo_Multiplex(){
00159     Compteur +=1;
00160     if(Compteur == 4) Compteur=0;
00161     switch(Compteur) {
00162         case 0 :  D=0;
00163                   Aff_7Seg = Chiff_7Seg[tab[0]];
00164                   D=8;
00165                   break;
00166         case 1 :  D=0;
00167                   Aff_7Seg = Chiff_7Seg[tab[1]];
00168                   D=4;
00169                   break;
00170         case 2 :  D=0;
00171                   Aff_7Seg = Chiff_7Seg[tab[2]];
00172                   D=2;
00173                   break;
00174         case 3 :  D=0;
00175                   Aff_7Seg = Chiff_7Seg[tab[3]];
00176                   D=1;
00177                   break;
00178     }
00179 }
00180 void SPI_Tempo_Acquis(){
00181     tension = RV.read_u16()*3300/65536;  //tension en mV
00182     tab[0]=tension/1000;
00183     tension=tension%1000;
00184     tab[1]=tension/100;
00185     tension=tension%100;
00186     tab[2]=tension/10;
00187     tab[3]=tension%10;
00188 }
00189 int main() {
00190     Tempo_Multiplex.attach_us(&SPI_Tempo_Multiplex,5000);
00191     Tempo_Acquis.attach(&SPI_Tempo_Acquis,1);
00192     while(1) {
00193         if(..................) {
00194             Tempo_Multiplex.detach();
00195             .......................... .detach();
00196             D=0;
00197         }
00198         if(...................) {
00199             .......................... .attach_us(&SPI_Tempo_Multiplex,5000);
00200             Tempo_Acquis.attach(&SPI_Tempo_Acquis,1);
00201         }
00202    }
00203 }
00204 //------------------------------   08_TP4_Ex2_4    --------------------------------
00205 //L’appuie sur le bouton poussoir BP1 permet d’éteindre les 4 afficheurs 7 segments
00206 // et l’appuie sur le bouton poussoir BP2 permet d’afficher la tension en mV sur les 
00207 // 4 afficheurs. Programme précédent avec interruptions externes des broches 
00208 // PB_10 et PB_11
00209 //---------------------------------------------------------------------------------
00210 #include "mbed.h"
00211 BusOut   Aff_7Seg(PB_3, PA_15, PA_12, PA_11, PA_10, PA_9, PA_8);
00212 BusOut   D(PB_12,PB_13,PB_14,PB_15);
00213 int Chiff_7Seg[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 
00214                      0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71 };
00215 InterruptIn  BP1(PB_10,PullUp);
00216 .......................  BP2(........................);
00217 Ticker Tempo_Multiplex;
00218 Ticker Tempo_Acquis;
00219 AnalogIn RV(PA_1);
00220 char Compteur=0;
00221 int16_t tension;
00222 char tab[4]; //pour 2345mV->tab[0]=2,tab[1]=3,tab[2]=4,tab[3]=5
00223 void SPI_Tempo_Multiplex(){
00224     Compteur +=1;
00225     if(Compteur == 4) Compteur=0;
00226     switch(Compteur) {
00227         case 0 :  D=0;
00228                   Aff_7Seg = Chiff_7Seg[tab[0]];
00229                   D=8;
00230                   break;
00231         case 1 :  D=0;
00232                   Aff_7Seg = Chiff_7Seg[tab[1]];
00233                   D=4;
00234                   break;
00235         case 2 :  D=0;
00236                   Aff_7Seg = Chiff_7Seg[tab[2]];
00237                   D=2;
00238                   break;
00239         case 3 :  D=0;
00240                   Aff_7Seg = Chiff_7Seg[tab[3]];
00241                   D=1;
00242                   break;
00243     }
00244 }
00245 void SPI_Tempo_Acquis(){
00246     tension = RV.read_u16()*3300/65536;  //tension en mV
00247     tab[0]=tension/1000;
00248     tension=tension%1000;
00249     tab[1]=tension/100;
00250     tension=tension%100;
00251     tab[2]=tension/10;
00252     tab[3]=tension%10;
00253 }
00254 void SPI_BP1() {
00255     Tempo_Multiplex.detach();
00256     ....................... .detach();
00257     D=......................
00258 }
00259 void SPI_BP2() {
00260     Tempo_Multiplex.attach_us(&SPI_Tempo_Multiplex,5000);
00261     Tempo_Acquis.attach(&SPI_Tempo_Acquis,1);
00262 }
00263 int main() {
00264     Tempo_Multiplex.attach_us(&SPI_Tempo_Multiplex,5000);
00265     Tempo_Acquis.attach(&SPI_Tempo_Acquis,1);
00266     BP1.fall(&SPI_BP1);
00267     BP2.fall(...........................);
00268     while(1) {       
00269      }
00270 }
00271 */