Lizzy project

Dependencies:   aconno_I2C Lis2dh12 adc52832_common aconno_SEGGER_RTT

Files at this revision

API Documentation at this revision

Comitter:
dbartolovic
Date:
Thu Sep 20 07:34:35 2018 +0000
Branch:
testing-ignore
Parent:
23:bf9c1dd2b5cb
Child:
25:d021d86568e5
Commit message:
Not a branch to be ignored, added proj_config, changed logic.

Changed in this revision

bsp/bsp.h Show annotated file Show diff for this revision Revisions of this file
bsp/bspAcc.cpp Show annotated file Show diff for this revision Revisions of this file
bsp/bspAcc.h Show annotated file Show diff for this revision Revisions of this file
config/proj_config.h Show annotated file Show diff for this revision Revisions of this file
source/main.cpp Show annotated file Show diff for this revision Revisions of this file
source/main.h Show annotated file Show diff for this revision Revisions of this file
tasks/tasks.cpp Show annotated file Show diff for this revision Revisions of this file
tasks/tasks.h Show annotated file Show diff for this revision Revisions of this file
--- a/bsp/bsp.h	Mon Sep 17 12:46:41 2018 +0000
+++ b/bsp/bsp.h	Thu Sep 20 07:34:35 2018 +0000
@@ -2,6 +2,7 @@
 #define __BSP_H__
 
 #include "main.h"
+#include "bspAcc.h"
 
 #if NANO_MODULE
     #define I2C_DATA            (p2)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bsp/bspAcc.cpp	Thu Sep 20 07:34:35 2018 +0000
@@ -0,0 +1,42 @@
+
+#include "mbed.h"
+#include "Lis2dh12.h"
+#include "Lis2dh12_regs.h"
+#include "bspAcc.h"
+#include "main.h"
+
+
+extern DigitalOut AccVcc;
+
+extern Lis2dh12 mems;
+
+extern InterruptIn INT1;
+
+void init_acc()
+{
+    INT1.disable_irq();
+    //__disable_irq();
+    
+    AccVcc = 1;
+    
+    wait_ms(POWER_UP_DELAY_MS);
+    
+    //__enable_irq();
+    
+    mems.setMode(LOW_POWER);
+    //mems.setMode(HIGH_RES);
+    mems.enableAxes(X_axis);
+    mems.enableAxes(Y_axis);
+    mems.enableAxes(Z_axis);    
+    mems.setODR(ACC_ODR_MODE);
+    //mems.setScale(_16g);
+    mems.setScale(_8g);
+    mems.int1Setup(0x40);       // IntActivity 1 driven to INT1 pad
+    mems.int1Latch(0x01);       // Enable int1 latch
+    mems.int1Threshold(INT1_THRESHOLD); 
+    mems.int1Duration(INT1_DUR);            
+    mems.int1Config(0x2A);      // Enable XHigh, YHigh and ZHigh
+    
+    //__enable_irq();
+    INT1.enable_irq();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bsp/bspAcc.h	Thu Sep 20 07:34:35 2018 +0000
@@ -0,0 +1,6 @@
+#ifndef __BSP_ACC_H__
+#define __BSP_ACC_H__
+
+void init_acc();
+
+#endif//__BSP_ACC_H__
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/config/proj_config.h	Thu Sep 20 07:34:35 2018 +0000
@@ -0,0 +1,23 @@
+#ifndef __PROJ_CONFIG_H__
+#define __PROJ_CONFIG_H__
+
+
+#define DEBUG                           (0)
+#define PRINT_ON_RTT                    (0)
+#define DEBUG_LED                       (0)
+#define NANO_MODULE                     (0)
+#define NORMAL_AXIS                     (1)
+#define TEST_LEDS_BUZZ                  (0)
+
+#define POWER_UP_DELAY_MS               (200)
+#define MEASURE_INTERVAL_MS             (500)
+#define ACTIVE_PERIOD_MS                (5000)
+
+#define LONG_SLEEP_S                    (300)
+
+#define INT1_THRESHOLD                  (15)
+#define INT1_DUR                        (5)
+#define ACC_ODR_MODE                    (ODR_25Hz)
+
+
+#endif//__PROJ_CONFIG_H__
\ No newline at end of file
--- a/source/main.cpp	Mon Sep 17 12:46:41 2018 +0000
+++ b/source/main.cpp	Thu Sep 20 07:34:35 2018 +0000
@@ -17,6 +17,8 @@
 Thread updateBuzzLedsT;
 Thread servLoopT;
 
+
+extern DigitalOut redLed;
 DigitalOut AccVcc(ACC_POWER_PIN);
 InterruptIn INT1(INT_PIN1);
 //InterruptIn INT2(INT_PIN2);
@@ -24,31 +26,13 @@
 
 Lis2dh12 mems(&i2c, memsI2CAddress);
 
-void disableI2C(){
-    NRF_TWI0->ENABLE = 0;
-    NRF_TWI0->PSELSCL = 0xFFFFFFFF;
-    NRF_TWI1->ENABLE = 0;
-    NRF_TWI1->PSELSCL = 0xFFFFFFFF;
-    NRF_TWIM0->ENABLE = 0;
-    NRF_TWIM0->PSEL.SCL = 0x80000000;
-    NRF_TWIM0->PSEL.SDA = 0x80000000;
-    NRF_TWIM1->ENABLE = 0;
-    NRF_TWIM0->PSEL.SCL = 0x80000000;
-    NRF_TWIM0->PSEL.SDA = 0x80000000;
-    DigitalOut foo(I2C_DATA);
-    DigitalOut bar(I2C_CLK);
-    foo = 1;
-    bar = 1;
-}
 
-extern int untilSleep;
 void int1Handler(void)
 {
     __disable_irq();
     
     mems.clearIntFlag();
-    
-    untilSleep = ACTIVE_PERIOD / MEASURE_INTERVAL_MS;
+    //redLed = !redLed;
     
     measureT.signal_set(START_MEAS);
     
@@ -66,16 +50,14 @@
     NRF_NVMC->CONFIG = 0x00000001;      // Write enable UICR
     NRF_UICR->NFCPINS = 0xFFFFFFFE;     // Change NFC to GPIO function
     
+
     AccVcc = 1;
-    //wait_ms(POWER_UP_DELAY_MS);
-    Thread::wait(POWER_UP_DELAY_MS);
+    wait_ms(POWER_UP_DELAY_MS);
 
-    
     //measureT.signal_set(START_MEAS);
     INT1.rise(int1Handler);
     NRF_GPIO->PIN_CNF[INT_PIN1] &= 0xFFFFFFF3;  // NO PullUps
     
-    
     BLE &ble = BLE::Instance();
     ble.init(bleInitComplete);
 
@@ -84,7 +66,7 @@
     mems.enableAxes(X_axis);
     mems.enableAxes(Y_axis);
     mems.enableAxes(Z_axis);    
-    mems.setODR(ACC_ODR_SLEEP_MODE);
+    mems.setODR(ACC_ODR_MODE);
     //mems.setScale(_16g);
     mems.setScale(_8g);
     mems.int1Setup(0x40);       // IntActivity 1 driven to INT1 pad
@@ -99,7 +81,6 @@
     updateBuzzLedsT.start(updateBuzzLedsF);
     servLoopT.start(servLoopC);
     
-    
     while(1){
         //disableI2C();
         //ble.waitForEvent();
--- a/source/main.h	Mon Sep 17 12:46:41 2018 +0000
+++ b/source/main.h	Thu Sep 20 07:34:35 2018 +0000
@@ -14,16 +14,10 @@
 #include "ble/BLE.h"
 #include "GapAdvertisingData.h"
 #include "acd52832_bsp.h"
+#include "proj_config.h"
 
-#define DEBUG               (0)
-#define PRINT_ON_RTT        (0)
-#define DEBUG_LED           (0)
-#define NANO_MODULE         (0)
-#define NORMAL_AXIS         (1)
 //#define LSB_VALUE           (192)
 
-#define BLE_ACTIVE_TIME_S   (0.4)
-#define POWER_UP_DELAY_MS   (200)
 
 #define STOP_FPU()                                                             \
   __set_FPSCR(__get_FPSCR()  & ~(0x0000009F));                                 \
@@ -37,13 +31,9 @@
     #define printf(...)
 #endif
 
-#define INT1_THRESHOLD      (30)
-#define INT1_DUR            (12)
-#define ACC_ODR_ACTIVE_MODE (ODR_50Hz)
-#define ACC_ODR_SLEEP_MODE  (ODR_25Hz)
     
 #define ACC_INT_SIG         (0x00001020)    // Acc interrupt signal
-#define DISABLE_BLE_SIG     (0x00001030)
+#define DISABLE_BLE_SIG     (0x00001040)
 
 
 extern Thread bleT;
--- a/tasks/tasks.cpp	Mon Sep 17 12:46:41 2018 +0000
+++ b/tasks/tasks.cpp	Thu Sep 20 07:34:35 2018 +0000
@@ -1,4 +1,5 @@
 #include "main.h"
+#include "bsp.h"
 #include "bsp_buzz.h"
 #include "bsp_led.h"
 #include "aconno_ble.h"
@@ -12,6 +13,9 @@
 DigitalOut blueLed(BLUE_LED_PIN);
 #endif
 
+extern Lis2dh12 mems;
+extern InterruptIn INT1;
+
 Buzz buzzer(NRF_PWM2, BUZZER_PIN);
 
 static advertising_packet advertisementPacket;
@@ -22,6 +26,19 @@
 Ticker test_ticker;
 #endif
 
+LowPowerTicker longDelaysT;
+
+
+inline void startLongDelay(uint32_t delay)
+{
+    longDelaysT.attach(longDelaysC, delay);
+}
+
+inline void stopLongDelay()
+{
+    longDelaysT.detach();
+}
+
 
 void tasks_init()
 {
@@ -86,14 +103,19 @@
 }
 #endif
 
-int untilSleep = ACTIVE_PERIOD / MEASURE_INTERVAL_MS;
 void measureF(Lis2dh12 *mems)
 {
+    int untilSleep;
+    
     while(1)
     {
         Thread::signal_wait(START_MEAS);
         Thread::signal_clr(START_MEAS);
         
+        INT1.disable_irq();
+        
+        untilSleep = ACTIVE_PERIOD_MS / MEASURE_INTERVAL_MS;
+        
         BLE::Instance().startAdvertising();
         
         while (1)
@@ -123,12 +145,12 @@
             bleT.signal_set(MEAS_DONE);
             
             wait_ms(MEASURE_INTERVAL_MS);
-            //Thread::wait(MEASURE_INTERVAL_MS);
             untilSleep--;
             
             if( (untilSleep <= 0) && !bleIsClientConnected() )
             {
                 BLE::Instance().stopAdvertising();
+                startLongDelay(LONG_SLEEP_S);
                 break;
             }
         }
@@ -236,4 +258,13 @@
         getBLEEventQueue()->dispatch_forever();
         Thread::wait(0xFFFFFFFF);
     }
+}
+
+void longDelaysC(void)
+{
+    mems.clearIntFlag();
+    
+    INT1.enable_irq();
+    
+    stopLongDelay();
 }
\ No newline at end of file
--- a/tasks/tasks.h	Mon Sep 17 12:46:41 2018 +0000
+++ b/tasks/tasks.h	Thu Sep 20 07:34:35 2018 +0000
@@ -1,15 +1,11 @@
 #ifndef __TASKS_H__
 #define __TASKS_H__
 
+#include "proj_config.h"
 #include "Lis2dh12.h"
 
-#define TEST_LEDS_BUZZ          (0)
-
-#define MEASURE_INTERVAL_MS     (100)
-#define ACTIVE_PERIOD           (10000)
-
 #define MEAS_DONE               (0x00001000)
-#define UPDATE_BUZZ_LEDS        (0x00001001)
+#define UPDATE_BUZZ_LEDS        (0x00002000)
 #define START_MEAS              (0x00010000)
 
 void tasks_init();
@@ -24,5 +20,6 @@
 void updateBuzzLedsF();
 void bleF(BLE *ble);
 void servLoopC(void);
+void longDelaysC(void);
 
 #endif//__TASKS_H__
\ No newline at end of file