This is a working demo of the AS3935 Lightning detector using the NUCLEO-L013K6.

Dependencies:   mbed

Committer:
madelectroneng
Date:
Tue Jun 20 08:36:25 2017 +0000
Revision:
0:75defe5eed80
Working demo on nucleo-l031k6

Who changed what in which revision?

UserRevisionLine numberNew contents of line
madelectroneng 0:75defe5eed80 1 /*
madelectroneng 0:75defe5eed80 2 AS3935.h - AS3935 Franklin Lightning Sensor™ IC by AMS library
madelectroneng 0:75defe5eed80 3 Copyright (c) 2012 Raivis Rengelis (raivis [at] rrkb.lv). All rights reserved.
madelectroneng 0:75defe5eed80 4 Portée sur MBED par Valentin
madelectroneng 0:75defe5eed80 5
madelectroneng 0:75defe5eed80 6 This library is free software; you can redistribute it and/or
madelectroneng 0:75defe5eed80 7 modify it under the terms of the GNU Lesser General Public
madelectroneng 0:75defe5eed80 8 License as published by the Free Software Foundation; either
madelectroneng 0:75defe5eed80 9 version 3 of the License, or (at your option) any later version.
madelectroneng 0:75defe5eed80 10
madelectroneng 0:75defe5eed80 11 This library is distributed in the hope that it will be useful,
madelectroneng 0:75defe5eed80 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
madelectroneng 0:75defe5eed80 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
madelectroneng 0:75defe5eed80 14 Lesser General Public License for more details.
madelectroneng 0:75defe5eed80 15
madelectroneng 0:75defe5eed80 16 You should have received a copy of the GNU Lesser General Public
madelectroneng 0:75defe5eed80 17 License along with this library; if not, write to the Free Software
madelectroneng 0:75defe5eed80 18 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
madelectroneng 0:75defe5eed80 19 */
madelectroneng 0:75defe5eed80 20
madelectroneng 0:75defe5eed80 21 #ifndef _AS3935_H
madelectroneng 0:75defe5eed80 22 #define _AS3935_H
madelectroneng 0:75defe5eed80 23
madelectroneng 0:75defe5eed80 24 #include "mbed.h"
madelectroneng 0:75defe5eed80 25 #include <stdint.h>
madelectroneng 0:75defe5eed80 26
madelectroneng 0:75defe5eed80 27 //#include "i2c.hpp"
madelectroneng 0:75defe5eed80 28
madelectroneng 0:75defe5eed80 29 // register access macros - register address, bitmask
madelectroneng 0:75defe5eed80 30 #define AS3935_AFE_GB 0x00, 0x3E
madelectroneng 0:75defe5eed80 31 #define AS3935_PWD 0x00, 0x01
madelectroneng 0:75defe5eed80 32 #define AS3935_NF_LEV 0x01, 0x70
madelectroneng 0:75defe5eed80 33 #define AS3935_WDTH 0x01, 0x0F
madelectroneng 0:75defe5eed80 34 #define AS3935_CL_STAT 0x02, 0x40
madelectroneng 0:75defe5eed80 35 #define AS3935_MIN_NUM_LIGH 0x02, 0x30
madelectroneng 0:75defe5eed80 36 #define AS3935_SREJ 0x02, 0x0F
madelectroneng 0:75defe5eed80 37 #define AS3935_LCO_FDIV 0x03, 0xC0
madelectroneng 0:75defe5eed80 38 #define AS3935_MASK_DIST 0x03, 0x20
madelectroneng 0:75defe5eed80 39 #define AS3935_INT 0x03, 0x0F
madelectroneng 0:75defe5eed80 40 #define AS3935_S_LIG_L 0x04, 0xff
madelectroneng 0:75defe5eed80 41 #define AS3935_S_LIG_M 0x05, 0xff
madelectroneng 0:75defe5eed80 42 #define AS3935_S_LIG_MM 0x06, 0x1f
madelectroneng 0:75defe5eed80 43 #define AS3935_DISTANCE 0x07, 0x3F
madelectroneng 0:75defe5eed80 44 #define AS3935_DISP_LCO 0x08, 0x80
madelectroneng 0:75defe5eed80 45 #define AS3935_DISP_SRCO 0x08, 0x40
madelectroneng 0:75defe5eed80 46 #define AS3935_DISP_TRCO 0x08, 0x20
madelectroneng 0:75defe5eed80 47 #define AS3935_TUN_CAP 0x08, 0x0F
madelectroneng 0:75defe5eed80 48 #define MAX_CONFIG_REGS 9
madelectroneng 0:75defe5eed80 49
madelectroneng 0:75defe5eed80 50 // other constants
madelectroneng 0:75defe5eed80 51 #define AS3935_AFE_INDOOR 0x12
madelectroneng 0:75defe5eed80 52 #define AS3935_AFE_OUTDOOR 0x0E
madelectroneng 0:75defe5eed80 53
madelectroneng 0:75defe5eed80 54 #define AS3935_EVENT_NOISE 1
madelectroneng 0:75defe5eed80 55 #define AS3935_EVENT_DISTURBER 4
madelectroneng 0:75defe5eed80 56 #define AS3935_EVENT_LIGHTNING 8
madelectroneng 0:75defe5eed80 57
madelectroneng 0:75defe5eed80 58
madelectroneng 0:75defe5eed80 59
madelectroneng 0:75defe5eed80 60
madelectroneng 0:75defe5eed80 61 class AS3935 {
madelectroneng 0:75defe5eed80 62
madelectroneng 0:75defe5eed80 63 public:
madelectroneng 0:75defe5eed80 64
madelectroneng 0:75defe5eed80 65 /** Create a virtual file system for accessing SD/MMC cards via SPI
madelectroneng 0:75defe5eed80 66 *
madelectroneng 0:75defe5eed80 67 * @param mosi The SPI data out pin.
madelectroneng 0:75defe5eed80 68 * @param miso The SPI data in pin.
madelectroneng 0:75defe5eed80 69 * @param sclk The SPI clock pin.
madelectroneng 0:75defe5eed80 70 * @param cs The SPI chip select pin.
madelectroneng 0:75defe5eed80 71 * @param name The name used to access the spi bus.
madelectroneng 0:75defe5eed80 72 * @param hz The SPI bus frequency (defaults to 1MHz).
madelectroneng 0:75defe5eed80 73 */
madelectroneng 0:75defe5eed80 74
madelectroneng 0:75defe5eed80 75 AS3935(PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name, int hz = 2000000);
madelectroneng 0:75defe5eed80 76
madelectroneng 0:75defe5eed80 77 //destruction
madelectroneng 0:75defe5eed80 78 //~AS3935();
madelectroneng 0:75defe5eed80 79
madelectroneng 0:75defe5eed80 80 //write to specified register specified data using specified bitmask,
madelectroneng 0:75defe5eed80 81 //the rest of the register remains intact
madelectroneng 0:75defe5eed80 82 void registerWrite(char reg, char mask, char data);
madelectroneng 0:75defe5eed80 83
madelectroneng 0:75defe5eed80 84 //read specified register using specified bitmask and return value aligned
madelectroneng 0:75defe5eed80 85 //to lsb, i.e. if value to be read is in a middle of register, function
madelectroneng 0:75defe5eed80 86 //reads register and then aligns lsb of value to lsb of byte
madelectroneng 0:75defe5eed80 87 char registerRead(char reg, char mask);
madelectroneng 0:75defe5eed80 88
madelectroneng 0:75defe5eed80 89 //reset all the registers on chip to default values
madelectroneng 0:75defe5eed80 90 void reset();
madelectroneng 0:75defe5eed80 91
madelectroneng 0:75defe5eed80 92 //set preset defaults
madelectroneng 0:75defe5eed80 93 void presetDefault();
madelectroneng 0:75defe5eed80 94
madelectroneng 0:75defe5eed80 95 //initialization
madelectroneng 0:75defe5eed80 96 void init();
madelectroneng 0:75defe5eed80 97
madelectroneng 0:75defe5eed80 98 // replicate the acurite sequece
madelectroneng 0:75defe5eed80 99 void acurite();
madelectroneng 0:75defe5eed80 100
madelectroneng 0:75defe5eed80 101 //put chip into power down mode
madelectroneng 0:75defe5eed80 102 void powerDown();
madelectroneng 0:75defe5eed80 103
madelectroneng 0:75defe5eed80 104 //bring chip out of power down mode and perform RCO calibration
madelectroneng 0:75defe5eed80 105 void powerUp();
madelectroneng 0:75defe5eed80 106
madelectroneng 0:75defe5eed80 107 //return interrupt source, bitmask, 0b0001 - noise, 0b0100 - disturber,
madelectroneng 0:75defe5eed80 108 //0b1000 - lightning
madelectroneng 0:75defe5eed80 109 int interruptSource();
madelectroneng 0:75defe5eed80 110
madelectroneng 0:75defe5eed80 111 //disable indication of disturbers
madelectroneng 0:75defe5eed80 112 void disableDisturbers();
madelectroneng 0:75defe5eed80 113
madelectroneng 0:75defe5eed80 114 //enable indication of distrubers
madelectroneng 0:75defe5eed80 115 void enableDisturbers();
madelectroneng 0:75defe5eed80 116
madelectroneng 0:75defe5eed80 117 //return number of lightnings that need to be detected in 17 minute period
madelectroneng 0:75defe5eed80 118 //before interrupt is issued
madelectroneng 0:75defe5eed80 119 int getMinimumLightnings();
madelectroneng 0:75defe5eed80 120
madelectroneng 0:75defe5eed80 121 //set number of lightnings that need to be detected in 17 minute period
madelectroneng 0:75defe5eed80 122 //before interrupt is issued
madelectroneng 0:75defe5eed80 123 int setMinimumLightnings(int minlightning);
madelectroneng 0:75defe5eed80 124
madelectroneng 0:75defe5eed80 125 //return distance to lightning in kilometers, 1 means storm is overhead,
madelectroneng 0:75defe5eed80 126 //63 means it is too far to reliably calculate distance
madelectroneng 0:75defe5eed80 127 int lightningDistanceKm();
madelectroneng 0:75defe5eed80 128
madelectroneng 0:75defe5eed80 129 // load gain preset to operate indoors
madelectroneng 0:75defe5eed80 130 void setIndoors();
madelectroneng 0:75defe5eed80 131
madelectroneng 0:75defe5eed80 132 //load gain preset to operate outdoors
madelectroneng 0:75defe5eed80 133 void setOutdoors();
madelectroneng 0:75defe5eed80 134
madelectroneng 0:75defe5eed80 135 //get gain preset
madelectroneng 0:75defe5eed80 136 int getGain();
madelectroneng 0:75defe5eed80 137
madelectroneng 0:75defe5eed80 138 //return noise floor setting - refer to datasheet for meaning and range
madelectroneng 0:75defe5eed80 139 int getNoiseFloor();
madelectroneng 0:75defe5eed80 140
madelectroneng 0:75defe5eed80 141 //set noise floor setting
madelectroneng 0:75defe5eed80 142 int setNoiseFloor(int noisefloor);
madelectroneng 0:75defe5eed80 143
madelectroneng 0:75defe5eed80 144 //return spike rejection value - refer to datasheet for meaning and range
madelectroneng 0:75defe5eed80 145 int getSpikeRejection();
madelectroneng 0:75defe5eed80 146
madelectroneng 0:75defe5eed80 147 //set spike rejection value
madelectroneng 0:75defe5eed80 148 int setSpikeRejection(int srej);
madelectroneng 0:75defe5eed80 149
madelectroneng 0:75defe5eed80 150 //return watchdog threshold value - refer to datasheet for meaning and range
madelectroneng 0:75defe5eed80 151 int getWatchdogThreshold();
madelectroneng 0:75defe5eed80 152
madelectroneng 0:75defe5eed80 153 //set watchdog threshold value
madelectroneng 0:75defe5eed80 154 int setWatchdogThreshold(int wdth);
madelectroneng 0:75defe5eed80 155
madelectroneng 0:75defe5eed80 156 //return tune Capacity value
madelectroneng 0:75defe5eed80 157 int getTuneCap();
madelectroneng 0:75defe5eed80 158
madelectroneng 0:75defe5eed80 159 //set tune Capacity value
madelectroneng 0:75defe5eed80 160 int setTuneCap(int cap);
madelectroneng 0:75defe5eed80 161
madelectroneng 0:75defe5eed80 162 //clear internal accumulated lightning statistics
madelectroneng 0:75defe5eed80 163 void clearStats();
madelectroneng 0:75defe5eed80 164
madelectroneng 0:75defe5eed80 165 int calibrateRCOs (InterruptIn &intrIn);
madelectroneng 0:75defe5eed80 166
madelectroneng 0:75defe5eed80 167 unsigned long tuneAntenna(InterruptIn &intrIn);
madelectroneng 0:75defe5eed80 168 unsigned long getEnergy(void);
madelectroneng 0:75defe5eed80 169 bool getConfigRegisters(unsigned char *pBuff, unsigned char buffLen);
madelectroneng 0:75defe5eed80 170
madelectroneng 0:75defe5eed80 171
madelectroneng 0:75defe5eed80 172 /** Attach a function, lightning interrupt
madelectroneng 0:75defe5eed80 173 * @param fptr pointer to a void function, or 0 to set as none
madelectroneng 0:75defe5eed80 174 */
madelectroneng 0:75defe5eed80 175 void attach(void (*fptr)(void)) {
madelectroneng 0:75defe5eed80 176 // _func.attach(fptr);
madelectroneng 0:75defe5eed80 177 }
madelectroneng 0:75defe5eed80 178 /** Attach a member function, lightning interrupt
madelectroneng 0:75defe5eed80 179 * @param tptr pointer to the object to call the member function on
madelectroneng 0:75defe5eed80 180 * @param mptr pointer to the member function to be called
madelectroneng 0:75defe5eed80 181 */
madelectroneng 0:75defe5eed80 182 template<typename T>
madelectroneng 0:75defe5eed80 183 void attach(T *tptr, void (T::*mptr)(void)) {
madelectroneng 0:75defe5eed80 184 _func.attach(tptr, mptr);
madelectroneng 0:75defe5eed80 185 }
madelectroneng 0:75defe5eed80 186
madelectroneng 0:75defe5eed80 187
madelectroneng 0:75defe5eed80 188 private:
madelectroneng 0:75defe5eed80 189 //I2C i2c;
madelectroneng 0:75defe5eed80 190 //DigitalOut _irq;
madelectroneng 0:75defe5eed80 191 SPI m_Spi;
madelectroneng 0:75defe5eed80 192 DigitalOut m_Cs;
madelectroneng 0:75defe5eed80 193 //InterruptIn m_Cd;
madelectroneng 0:75defe5eed80 194
madelectroneng 0:75defe5eed80 195 int m_CdAssert;
madelectroneng 0:75defe5eed80 196 const int m_FREQ;
madelectroneng 0:75defe5eed80 197 int _adress;
madelectroneng 0:75defe5eed80 198 FunctionPointer _func;
madelectroneng 0:75defe5eed80 199 char _rawRegisterRead(char reg);
madelectroneng 0:75defe5eed80 200 void _rawRegisterRead(unsigned char reg, unsigned char mask, unsigned char *rxBuff, unsigned char numBytes);
madelectroneng 0:75defe5eed80 201 char _SPITransfer2(char high, char low);
madelectroneng 0:75defe5eed80 202 char _ffsz(char mask);
madelectroneng 0:75defe5eed80 203
madelectroneng 0:75defe5eed80 204
madelectroneng 0:75defe5eed80 205
madelectroneng 0:75defe5eed80 206
madelectroneng 0:75defe5eed80 207 };
madelectroneng 0:75defe5eed80 208
madelectroneng 0:75defe5eed80 209 /* !_AS3935_H_ */
madelectroneng 0:75defe5eed80 210 #endif