IniSat Modèle 1 Version 2 TP 1 : Mise en oeuvre de la carte Nucléo 32 Exo 1 : Hello Word Exo 2 : Lecture vitesse de l'horloge Exo 3 : Clignotement asynchrone de 2 Dels

Files at this revision

API Documentation at this revision

Comitter:
Giamarchi
Date:
Wed Jun 23 09:46:55 2021 +0000
Parent:
0:f812f3896eb5
Commit message:
Trame

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
system.h Show annotated file Show diff for this revision Revisions of this file
user.h Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Sun Jun 20 23:21:43 2021 +0000
+++ b/main.cpp	Wed Jun 23 09:46:55 2021 +0000
@@ -1,69 +1,86 @@
-/* mbed Microcontroller Library
- * Copyright (c) 2019 ARM Limited
- * SPDX-License-Identifier: Apache-2.0
- */
+/*******************************************************************************
+    Université de Montpellier
+    NemoSpace   IUT de Nîmes
+    IniSat Modèle 1 Version 2
+*******************************************************************************/
+//      TP n°3 : Trame pour débuter
+
+//  Exo 1 : Lecture tension batterie
+//  Exo 2 : Lecture courants faces solaires
+//  Exo 3 : Modes de fonctionnement
 
 #include "mbed.h"
 #include "platform/mbed_thread.h"
-
-Serial pc(USBTX, USBRX);        // Dialogue UART par USB à 9600 Baud
-// Initialise the digital pin LED1 as an output
-DigitalOut led(LED1);           // Ligne PB_3 sur carte Nucléo
-DigitalOut led_r(PB_0);         // Del rouge carte CPU
-DigitalOut led_v(PB_1);         // Del verte carte CPU
-//PwmOut servo(PB_0);
-
-Ticker Synchro_Led_Ro;
-Ticker Synchro_Led_Ve;
-
-uint8_t compteur;
+#include "system.h"
+#include "user.h"
 
-// Blinking rate in milliseconds
-#define BLINKING_RATE_MS    500
-
-void Tache_Led_Ro(void) {
-    led_r = !led_r;
-}
+uint8_t etat, etat_mem;
+float mes_accu;
 
-void Tache_Led_Ve(void) {
-    led_v = !led_v;
-}
-
-int main()
-{
-    pc.printf("\r\nIniSat V2 : TP1\r\n\n");     // Hello World
-    Synchro_Led_Ro.attach(&Tache_Led_Ro,1);
-    thread_sleep_for(150);
-    Synchro_Led_Ve.attach(&Tache_Led_Ve,0.33);    
+int main() {
     
-    //  Test de l'horloge Systeme
-    pc.printf("CPU SystemCoreClock is %d Hz\r\n", SystemCoreClock);
-    compteur = 0;
+    Init_System();
+    etat = 0;
+
+    while (1) {
+        thread_sleep_for(1);        // Boucle toutes les 1 milliseconde environ
+        
+//      Gestion des modes avec une machine d'états      
+        switch (etat)
+        {
+/******************************************************************************/
+// Mode Init :      Mise sous tension
+//                  Initialisation du µC
+
+            case 0:
+
+                break;
+/******************************************************************************/            
+//  Mode Gestion :  Gestion des actions
+//                  Contrôle du système
+
+            case 1:
+  
+                break;
+/******************************************************************************/            
+//  Mode Mission :  Acquisition de données (Mesure Courant faces solaires)
+//                  Stockage
+
+            case 2:
+
+                break;
+/******************************************************************************/             
+//  Mode Radio :    Transmission de données
 
-    while (true) {
-        led = !led;
-        compteur++;
-        pc.printf("%d\r\n",compteur);
-        thread_sleep_for(BLINKING_RATE_MS);
-    }
-    
-//   servo.period_ms(20);            //Period = 20 ms (f=50 Hz)
-    
-/*    while(true) {    
-        for(int pw=1000; pw <= 2000; pw=pw+20) {
-            servo.pulsewidth_us(pw);    //Set new servo position
-//            wait_ms(200);
-            thread_sleep_for(200);
+            case 3:
+
+                break;  
+/******************************************************************************/             
+//  Mode Survie :   Attente recharge de l'accu
+                    
+            case 4:
+
+                break;
+/******************************************************************************/
+//  Mode Zombie :   Coupure des consommateurs
+//                  Passage en mode faible consommation
+//                  Diminution de la fréquence du CPU
+//                  passage en mode Sleep
+
+            case 5:
+
+                break;
+/******************************************************************************/
+            default:
+                etat = 0;
+                break;
+/******************************************************************************/          
+        }   // end switch
+        if(etat != etat_mem)            //  Debug des états
+        {
+            pc.printf("Etat_%d\r\n",etat);
+            etat_mem = etat;
         }
-//        wait_ms(1000);                  //Wait before reverse direction
-        thread_sleep_for(1000);
-        for(int pw=2000; pw >= 1000; pw=pw-20) {
-            servo.pulsewidth_us(pw);    //Set new servo position
-//            wait_ms(200);
-            thread_sleep_for(200);
-        }
-//        wait_ms(1000);
-        thread_sleep_for(1000);
-    }
-    */
-}
+    }   // end while
+}   // end main
+/******************************************************************************/  
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/system.h	Wed Jun 23 09:46:55 2021 +0000
@@ -0,0 +1,26 @@
+/*******************************************************************************
+    system.h -> fichier de configuration
+
+    Lignes en Entrées/Sorties
+    Lignes en Entrées analogiques
+    Lignes associées aux bus (série, I2C, SPI)
+*******************************************************************************/
+
+Serial pc(USBTX, USBRX);            // Dialogue UART par USB à 9600 Baud sur carte Nucléo
+
+DigitalOut DEL(LED1);               // Ligne PB_3 sur la carte Nucléo
+DigitalOut DEL_R(PB_0);             // DEL rouge sur carte CPU
+DigitalOut DEL_V(PB_1);             // DEL verte sur carte CPU
+
+DigitalOut ctrl_reg(PA_12);         // Controle du régulateur 3.3V sur carte EPS
+
+AnalogIn   batin(PA_0);             // Mesure tension batterie sur carte EPS
+AnalogIn   sp_1in(PA_6);            // Mesure courant Solar Panel 1 sur carte EPS
+AnalogIn   sp_2in(PA_5);            // Mesure courant Solar Panel 2 sur carte EPS
+
+//  Divers seuils pour la batterie
+#define BAT_SEUIL_HAUT_2 4.2f
+#define BAT_SEUIL_HAUT_1 3.9f
+#define BAT_SEUIL_BAS_1 3.7f
+#define BAT_SEUIL_BAS_2 3.5f
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/user.h	Wed Jun 23 09:46:55 2021 +0000
@@ -0,0 +1,49 @@
+/*******************************************************************************
+    user.h -> fichier de fonctions
+
+    Gestion des 2 DELs de la carte CPU
+    Mesure tension batterie
+    Mesure courant panneaux solaires 
+*******************************************************************************/
+//  Initialistion du µC, Tests divers
+/**
+*   @param null
+*/
+void Init_System(void) {   
+//  Hello World
+    pc.printf("\r\nIniSat V2 : TP3\r\n\n");
+    
+//  Test de l'horloge Systeme
+//   pc.printf("Horloge CPU a %d Hz\r\n", SystemCoreClock);  
+}
+/******************************************************************************/
+//  Gestion des 2 Dels de la carte CPU
+Ticker Compteur_Led;
+uint16_t cmpt_led;
+uint8_t etat_led;
+enum {Off, Ro, Ve, Ro_Ve} couleur;
+
+/******************************************************************************/
+//  Gestion des mesures de la tension de la batterie
+Ticker Synchro_Mes_Bat;
+uint8_t mes_bat_etat;
+
+/******************************************************************************/
+//  Gestion des mesures des courants sur les 2 faces solaires
+Ticker Synchro_Mes_SP;
+uint8_t mes_sp_etat;
+
+/******************************************************************************/
+//  Fonction pour initialiser les fonctions précédentes
+
+void Init_User_Fonctions(void) {
+    ctrl_reg = 1;       // Pour mettre sous tension le moniteur de courant des Solar Panels
+
+}
+//  Fonction pour stopper les fonctions précédentes
+
+void Stop_User_Fonctions(void) {
+    ctrl_reg = 0;
+
+}
+/******************************************************************************/
\ No newline at end of file