AS3935 Lightning sensor library

Dependents:   zeus

Fork of AS3935 by valentin spanu

include the mbed library with this snippet

#include "mbed.h"
#include "AS3935.h"

 // frdm-kl25z sd card connections for spi1 
 // ------------------------------------------------
 // Header -- kl25z -- SD/MMC          
 // J2-20  -- PTE1  -- MOSI
 // J9-13  -- PTE4  -- CS
 // J2-14  -- GND   -- Vss (GND) 
 // J9-9   -- PTE2  -- SCK
 // J9-11  -- PTE3  -- MISO
 
AS3935 ld(PTE1, PTE3, PTE2, PTE4, "ld", 100000); // MOSI, MISO, SCK, CS, SPI bus freq (hz) 
InterruptIn IntLightning(PTA12); //IRQ AS3935
DigitalOut led1(LED_RED);
Serial pc(USBTX, USBRX);

void DetectLightning()
{
    char OriginInt;
     wait_ms(2); 
    OriginInt = ld.interruptSource();
    if (OriginInt == 1) { //
        pc.printf(" Noise level too high\r\n");
        }
    if (OriginInt == 4) { //
        pc.printf(" Disturber\r\n");
        }
    if (OriginInt == 8) { // detection
        // pc.printf(" Lightning detection\r\n");
        pc.printf(" Lightning detection, distance=%dkm\r\n", ld.lightningDistanceKm());
        ld.clearStats();

        }
}

 
int main() {
    pc.baud(9600);
    pc.printf("\r\nstart lightning detector\r\n");
    
    //initialisations
    ld.reset();
    ld.setTuneCap(5); // 500kHz
    ld.powerUp();
    ld.setIndoors();  
    ld.setMinimumLightnings(1);
    //ld.setSpikeRejection(2);
    ld.setNoiseFloor(2);
    ld.disableDisturbers();
    //ld.enableDisturbers();
    ld.setWatchdogThreshold(2);
    wait_ms(10);
    IntLightning.rise(&DetectLightning);
    int MinBlysk = ld.getMinimumLightnings();
    int Noise = ld.getNoiseFloor();
    int TuneCap = ld.getTuneCap();
    int SpikeRej = ld.getSpikeRejection();
    int WatchDog = ld.getWatchdogThreshold();
     
    pc.printf(" Min wylad: %i", MinBlysk);
    pc.printf("\r\n");
    pc.printf(" Noise: %i", Noise);
    pc.printf("\r\n");
    pc.printf(" Tune CAP: %i", TuneCap);
    pc.printf("\r\n");
    pc.printf(" Spike rej: %i", SpikeRej);
    pc.printf("\r\n");
    pc.printf(" Watchdog: %i", WatchDog);
    pc.printf("\r\n");
    while(1) {
        led1 = ! led1;
        wait(0.2);
     }
    
 
 }
Committer:
ftagius
Date:
Tue Jun 16 14:21:19 2015 +0000
Revision:
6:c9b9e7d3bced
Parent:
5:28311803e23d
Child:
8:60e1b6b39e1c
add routine to get gain setting;  change value for indoor setting

Who changed what in which revision?

UserRevisionLine numberNew contents of line
casper 0:346c723cac97 1 /*
casper 0:346c723cac97 2 AS3935.cpp - AS3935 Franklin Lightning Sensor™ IC by AMS library
casper 0:346c723cac97 3 Copyright (c) 2012 Raivis Rengelis (raivis [at] rrkb.lv). All rights reserved.
casper 0:346c723cac97 4 Porté sur MBED par Valentin, version I2C
casper 0:346c723cac97 5
casper 0:346c723cac97 6 This library is free software; you can redistribute it and/or
casper 0:346c723cac97 7 modify it under the terms of the GNU Lesser General Public
casper 0:346c723cac97 8 License as published by the Free Software Foundation; either
casper 0:346c723cac97 9 version 3 of the License, or (at your option) any later version.
casper 0:346c723cac97 10
casper 0:346c723cac97 11 This library is distributed in the hope that it will be useful,
casper 0:346c723cac97 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
casper 0:346c723cac97 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
casper 0:346c723cac97 14 Lesser General Public License for more details.
casper 0:346c723cac97 15
casper 0:346c723cac97 16 You should have received a copy of the GNU Lesser General Public
casper 0:346c723cac97 17 License along with this library; if not, write to the Free Software
casper 0:346c723cac97 18 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
casper 0:346c723cac97 19 */
casper 0:346c723cac97 20
ftagius 1:f2d9ed33c276 21 #include "AS3935.h"
ftagius 1:f2d9ed33c276 22 #include "pinmap.h"
casper 0:346c723cac97 23
ftagius 3:c536a9aa2a1c 24 AS3935::AS3935(PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name, int hz) : m_Spi(mosi, miso, sclk), m_Cs(cs, 1), m_FREQ(hz)
ftagius 1:f2d9ed33c276 25 {
ftagius 1:f2d9ed33c276 26
ftagius 1:f2d9ed33c276 27 //Enable the internal pull-up resistor on MISO
ftagius 1:f2d9ed33c276 28 pin_mode(miso, PullUp);
ftagius 1:f2d9ed33c276 29
ftagius 1:f2d9ed33c276 30 //Configure the SPI bus
ftagius 1:f2d9ed33c276 31 m_Spi.format(8, 1);
ftagius 3:c536a9aa2a1c 32 printf("spi bus frequency set to %d hz\r\n",hz);
ftagius 3:c536a9aa2a1c 33 m_Spi.frequency(hz);
ftagius 3:c536a9aa2a1c 34
ftagius 1:f2d9ed33c276 35 }
ftagius 1:f2d9ed33c276 36
ftagius 1:f2d9ed33c276 37 char AS3935::_SPITransfer2(char high, char low)
ftagius 1:f2d9ed33c276 38 {
ftagius 1:f2d9ed33c276 39 m_Cs = 0;
ftagius 1:f2d9ed33c276 40 m_Spi.write(high);
ftagius 1:f2d9ed33c276 41 char regval = m_Spi.write(low);
ftagius 1:f2d9ed33c276 42 m_Cs = 1;
ftagius 1:f2d9ed33c276 43 return regval;
ftagius 1:f2d9ed33c276 44 }
ftagius 1:f2d9ed33c276 45
casper 0:346c723cac97 46 char AS3935::_rawRegisterRead(char reg)
casper 0:346c723cac97 47 {
ftagius 1:f2d9ed33c276 48 return _SPITransfer2((reg & 0x3F) | 0x40, 0);
casper 0:346c723cac97 49 }
casper 0:346c723cac97 50
ftagius 1:f2d9ed33c276 51
casper 0:346c723cac97 52 char AS3935::_ffsz(char mask)
casper 0:346c723cac97 53 {
casper 0:346c723cac97 54 char i = 0;
ftagius 2:3b3b435ca8d9 55
casper 0:346c723cac97 56 while(!(mask & 1)) {
ftagius 2:3b3b435ca8d9 57 mask >>= 1;
casper 0:346c723cac97 58 i++;
casper 0:346c723cac97 59 }
ftagius 2:3b3b435ca8d9 60
casper 0:346c723cac97 61 return i;
casper 0:346c723cac97 62 }
casper 0:346c723cac97 63
casper 0:346c723cac97 64 void AS3935::registerWrite(char reg, char mask, char data)
casper 0:346c723cac97 65 {
ftagius 1:f2d9ed33c276 66
casper 0:346c723cac97 67 char regval;
casper 0:346c723cac97 68 regval = _rawRegisterRead(reg);
casper 0:346c723cac97 69 regval &= ~(mask);
ftagius 2:3b3b435ca8d9 70 regval |= (data << (_ffsz(mask)));
ftagius 1:f2d9ed33c276 71 m_Cs = 0;
ftagius 1:f2d9ed33c276 72 m_Spi.write(reg);
ftagius 1:f2d9ed33c276 73 m_Spi.write(regval);
ftagius 5:28311803e23d 74 //printf("raw transfer for reg %x is 0x%02x\r\n", reg, regval);
ftagius 1:f2d9ed33c276 75 m_Cs = 1;
ftagius 1:f2d9ed33c276 76 wait_ms(2);
casper 0:346c723cac97 77 }
casper 0:346c723cac97 78
casper 0:346c723cac97 79 char AS3935::registerRead(char reg, char mask)
ftagius 1:f2d9ed33c276 80 {
casper 0:346c723cac97 81 char regval;
casper 0:346c723cac97 82 regval = _rawRegisterRead(reg);
ftagius 1:f2d9ed33c276 83 // printf("raw regval is 0x%02x\r\n", regval);
casper 0:346c723cac97 84 regval = regval & mask;
ftagius 1:f2d9ed33c276 85 regval >>= (_ffsz(mask));
casper 0:346c723cac97 86 return regval;
casper 0:346c723cac97 87 }
casper 0:346c723cac97 88
casper 0:346c723cac97 89 void AS3935::reset()
ftagius 1:f2d9ed33c276 90 {
ftagius 1:f2d9ed33c276 91 m_Cs = 0;
ftagius 1:f2d9ed33c276 92 m_Spi.write(0x3D);
ftagius 1:f2d9ed33c276 93 m_Spi.write(0x96);
ftagius 1:f2d9ed33c276 94 m_Cs = 1;
casper 0:346c723cac97 95 wait_ms(2);
ftagius 1:f2d9ed33c276 96 }
casper 0:346c723cac97 97
ftagius 4:ab1f1b65468b 98 void AS3935::presetDefault()
ftagius 4:ab1f1b65468b 99 {
ftagius 4:ab1f1b65468b 100 m_Cs = 0;
ftagius 4:ab1f1b65468b 101 m_Spi.write(0x3C);
ftagius 4:ab1f1b65468b 102 m_Spi.write(0x96);
ftagius 4:ab1f1b65468b 103 m_Cs = 1;
ftagius 4:ab1f1b65468b 104 wait_ms(2);
ftagius 4:ab1f1b65468b 105 }
ftagius 4:ab1f1b65468b 106
ftagius 4:ab1f1b65468b 107 void AS3935::init()
ftagius 4:ab1f1b65468b 108 {
ftagius 4:ab1f1b65468b 109 presetDefault();
ftagius 4:ab1f1b65468b 110 registerWrite(AS3935_WDTH, 0x04); // set WDTH level to 4
ftagius 4:ab1f1b65468b 111 }
ftagius 4:ab1f1b65468b 112
casper 0:346c723cac97 113 void AS3935::powerDown()
ftagius 1:f2d9ed33c276 114 {
casper 0:346c723cac97 115 registerWrite(AS3935_PWD,1);
ftagius 1:f2d9ed33c276 116 }
casper 0:346c723cac97 117
casper 0:346c723cac97 118 void AS3935::powerUp()
ftagius 1:f2d9ed33c276 119 {
ftagius 5:28311803e23d 120 #if 0
casper 0:346c723cac97 121 registerWrite(AS3935_PWD,0);
ftagius 5:28311803e23d 122 //printf("wrote power up \r\n");
ftagius 1:f2d9ed33c276 123 m_Cs = 0;
ftagius 1:f2d9ed33c276 124 m_Spi.write(0x3D);
ftagius 1:f2d9ed33c276 125 m_Spi.write(0x96);
ftagius 1:f2d9ed33c276 126 m_Cs = 1;
casper 0:346c723cac97 127 wait_ms(3);
casper 0:346c723cac97 128 registerWrite(AS3935_DISP_TRCO,1);
casper 0:346c723cac97 129 wait_ms(2);
casper 0:346c723cac97 130 registerWrite(AS3935_DISP_TRCO,0);
ftagius 5:28311803e23d 131 #else
ftagius 5:28311803e23d 132 m_Cs = 0;
ftagius 5:28311803e23d 133 m_Spi.write(0x00);
ftagius 5:28311803e23d 134 m_Spi.write(0x1c);
ftagius 5:28311803e23d 135 m_Cs = 1;
ftagius 5:28311803e23d 136 wait_ms(2);
ftagius 6:c9b9e7d3bced 137 #endif
ftagius 5:28311803e23d 138 }
ftagius 5:28311803e23d 139
ftagius 5:28311803e23d 140 // replication of the acurite init sequence
ftagius 5:28311803e23d 141 void AS3935::acurite()
ftagius 5:28311803e23d 142 {
ftagius 5:28311803e23d 143 m_Cs = 0;
ftagius 5:28311803e23d 144 m_Spi.write(0x00);
ftagius 5:28311803e23d 145 m_Spi.write(0x1d);
ftagius 5:28311803e23d 146 m_Cs = 1;
ftagius 5:28311803e23d 147 wait_ms(2);
ftagius 5:28311803e23d 148
ftagius 5:28311803e23d 149 m_Cs = 0;
ftagius 5:28311803e23d 150 m_Spi.write(0x3c);
ftagius 5:28311803e23d 151 m_Spi.write(0x96);
ftagius 5:28311803e23d 152 m_Cs = 1;
ftagius 5:28311803e23d 153 wait_ms(2);
ftagius 5:28311803e23d 154
ftagius 5:28311803e23d 155 m_Cs = 0;
ftagius 5:28311803e23d 156 m_Spi.write(0x01);
ftagius 5:28311803e23d 157 m_Spi.write(0x24);
ftagius 5:28311803e23d 158 m_Cs = 1;
ftagius 5:28311803e23d 159 wait_ms(2);
ftagius 5:28311803e23d 160
ftagius 5:28311803e23d 161 m_Cs = 0;
ftagius 5:28311803e23d 162 m_Spi.write(0x03);
ftagius 5:28311803e23d 163 m_Spi.write(0x41);
ftagius 5:28311803e23d 164 m_Cs = 1;
ftagius 5:28311803e23d 165 wait_ms(2);
ftagius 5:28311803e23d 166
ftagius 5:28311803e23d 167 int i;
ftagius 5:28311803e23d 168 for (i=0;i<8; i++)
ftagius 5:28311803e23d 169 {
ftagius 5:28311803e23d 170 m_Cs = 0;
ftagius 5:28311803e23d 171 m_Spi.write(0x08);
ftagius 5:28311803e23d 172 m_Spi.write(0x80+i);
ftagius 5:28311803e23d 173 m_Cs = 1;
ftagius 5:28311803e23d 174 wait_ms(2);
ftagius 5:28311803e23d 175 }
ftagius 5:28311803e23d 176
ftagius 5:28311803e23d 177 m_Cs = 0;
ftagius 5:28311803e23d 178 m_Spi.write(0x08);
ftagius 5:28311803e23d 179 m_Spi.write(0x08);
ftagius 5:28311803e23d 180 m_Cs = 1;
ftagius 5:28311803e23d 181 wait_ms(2);
ftagius 5:28311803e23d 182 m_Cs = 0;
ftagius 5:28311803e23d 183 m_Spi.write(0x00);
ftagius 5:28311803e23d 184 m_Spi.write(0x1c);
ftagius 5:28311803e23d 185 m_Cs = 1;
ftagius 5:28311803e23d 186 wait_ms(2);
ftagius 5:28311803e23d 187
ftagius 5:28311803e23d 188 m_Cs = 0;
ftagius 5:28311803e23d 189 m_Spi.write(0x3d);
ftagius 5:28311803e23d 190 m_Spi.write(0x96);
ftagius 5:28311803e23d 191 m_Cs = 1;
ftagius 5:28311803e23d 192 wait_ms(2);
ftagius 5:28311803e23d 193 m_Cs = 0;
ftagius 5:28311803e23d 194 m_Spi.write(0x08);
ftagius 5:28311803e23d 195 m_Spi.write(0x48);
ftagius 5:28311803e23d 196 m_Cs = 1;
ftagius 5:28311803e23d 197 wait_ms(2);
ftagius 5:28311803e23d 198
ftagius 5:28311803e23d 199 m_Cs = 0;
ftagius 5:28311803e23d 200 m_Spi.write(0x08);
ftagius 5:28311803e23d 201 m_Spi.write(0x8);
ftagius 5:28311803e23d 202 m_Cs = 1;
ftagius 5:28311803e23d 203 wait_ms(2);
ftagius 5:28311803e23d 204
ftagius 5:28311803e23d 205 m_Cs = 0;
ftagius 5:28311803e23d 206 m_Spi.write(0x08);
ftagius 5:28311803e23d 207 m_Spi.write(0x28);
ftagius 5:28311803e23d 208 m_Cs = 1;
ftagius 5:28311803e23d 209 wait_ms(2);
ftagius 5:28311803e23d 210
ftagius 5:28311803e23d 211 m_Cs = 0;
ftagius 5:28311803e23d 212 m_Spi.write(0x08);
ftagius 5:28311803e23d 213 m_Spi.write(0x48);
ftagius 5:28311803e23d 214 m_Cs = 1;
ftagius 5:28311803e23d 215 wait_ms(2);
ftagius 5:28311803e23d 216
ftagius 5:28311803e23d 217 m_Cs = 0;
ftagius 5:28311803e23d 218 m_Spi.write(0x08);
ftagius 5:28311803e23d 219 m_Spi.write(0x8);
ftagius 5:28311803e23d 220 m_Cs = 1;
ftagius 5:28311803e23d 221 wait_ms(2);
ftagius 5:28311803e23d 222
ftagius 5:28311803e23d 223 m_Cs = 0;
ftagius 5:28311803e23d 224 m_Spi.write(0x02);
ftagius 5:28311803e23d 225 m_Spi.write(0x82);
ftagius 5:28311803e23d 226 m_Cs = 1;
ftagius 5:28311803e23d 227 wait_ms(2);
ftagius 5:28311803e23d 228
ftagius 5:28311803e23d 229 m_Cs = 0;
ftagius 5:28311803e23d 230 m_Spi.write(0x01);
ftagius 5:28311803e23d 231 m_Spi.write(0x24);
ftagius 5:28311803e23d 232 m_Cs = 1;
ftagius 5:28311803e23d 233 wait_ms(2);
ftagius 5:28311803e23d 234
ftagius 5:28311803e23d 235 m_Cs = 0;
ftagius 5:28311803e23d 236 m_Spi.write(0x02);
ftagius 5:28311803e23d 237 m_Spi.write(0xc2);
ftagius 5:28311803e23d 238 m_Cs = 1;
ftagius 5:28311803e23d 239 wait_ms(2);
ftagius 5:28311803e23d 240
ftagius 5:28311803e23d 241
ftagius 1:f2d9ed33c276 242 }
casper 0:346c723cac97 243
casper 0:346c723cac97 244 int AS3935::interruptSource()
ftagius 2:3b3b435ca8d9 245 {
casper 0:346c723cac97 246 return registerRead(AS3935_INT);
ftagius 2:3b3b435ca8d9 247 }
casper 0:346c723cac97 248
casper 0:346c723cac97 249 void AS3935::disableDisturbers()
ftagius 2:3b3b435ca8d9 250 {
casper 0:346c723cac97 251 registerWrite(AS3935_MASK_DIST,1);
ftagius 2:3b3b435ca8d9 252 }
casper 0:346c723cac97 253
casper 0:346c723cac97 254 void AS3935::enableDisturbers()
ftagius 2:3b3b435ca8d9 255 {
casper 0:346c723cac97 256 registerWrite(AS3935_MASK_DIST,0);
ftagius 2:3b3b435ca8d9 257 }
casper 0:346c723cac97 258
casper 0:346c723cac97 259 int AS3935::getMinimumLightnings()
ftagius 2:3b3b435ca8d9 260 {
casper 0:346c723cac97 261 return registerRead(AS3935_MIN_NUM_LIGH);
ftagius 2:3b3b435ca8d9 262 }
casper 0:346c723cac97 263
casper 0:346c723cac97 264 int AS3935::setMinimumLightnings(int minlightning)
ftagius 2:3b3b435ca8d9 265 {
casper 0:346c723cac97 266 registerWrite(AS3935_MIN_NUM_LIGH,minlightning);
casper 0:346c723cac97 267 return getMinimumLightnings();
ftagius 2:3b3b435ca8d9 268 }
casper 0:346c723cac97 269
casper 0:346c723cac97 270 int AS3935::lightningDistanceKm()
ftagius 2:3b3b435ca8d9 271 {
casper 0:346c723cac97 272 return registerRead(AS3935_DISTANCE);
ftagius 2:3b3b435ca8d9 273 }
casper 0:346c723cac97 274
casper 0:346c723cac97 275 void AS3935::setIndoors()
ftagius 2:3b3b435ca8d9 276 {
casper 0:346c723cac97 277 registerWrite(AS3935_AFE_GB,AS3935_AFE_INDOOR);
ftagius 2:3b3b435ca8d9 278 }
casper 0:346c723cac97 279
ftagius 6:c9b9e7d3bced 280 int AS3935::getGain()
ftagius 6:c9b9e7d3bced 281 {
ftagius 6:c9b9e7d3bced 282 return registerRead(AS3935_AFE_GB);
ftagius 6:c9b9e7d3bced 283 }
ftagius 6:c9b9e7d3bced 284
casper 0:346c723cac97 285 void AS3935::setOutdoors()
ftagius 2:3b3b435ca8d9 286 {
casper 0:346c723cac97 287 registerWrite(AS3935_AFE_GB,AS3935_AFE_OUTDOOR);
ftagius 2:3b3b435ca8d9 288 }
casper 0:346c723cac97 289
casper 0:346c723cac97 290 int AS3935::getNoiseFloor()
ftagius 2:3b3b435ca8d9 291 {
casper 0:346c723cac97 292 return registerRead(AS3935_NF_LEV);
ftagius 2:3b3b435ca8d9 293 }
casper 0:346c723cac97 294
casper 0:346c723cac97 295 int AS3935::setNoiseFloor(int noisefloor)
ftagius 2:3b3b435ca8d9 296 {
casper 0:346c723cac97 297 registerWrite(AS3935_NF_LEV,noisefloor);
casper 0:346c723cac97 298 return getNoiseFloor();
ftagius 2:3b3b435ca8d9 299 }
casper 0:346c723cac97 300
casper 0:346c723cac97 301 int AS3935::getSpikeRejection()
ftagius 2:3b3b435ca8d9 302 {
casper 0:346c723cac97 303 return registerRead(AS3935_SREJ);
ftagius 2:3b3b435ca8d9 304 }
casper 0:346c723cac97 305
casper 0:346c723cac97 306 int AS3935::setSpikeRejection(int srej)
ftagius 2:3b3b435ca8d9 307 {
casper 0:346c723cac97 308 registerWrite(AS3935_SREJ, srej);
casper 0:346c723cac97 309 return getSpikeRejection();
ftagius 2:3b3b435ca8d9 310 }
casper 0:346c723cac97 311
casper 0:346c723cac97 312 int AS3935::getWatchdogThreshold()
ftagius 2:3b3b435ca8d9 313 {
casper 0:346c723cac97 314 return registerRead(AS3935_WDTH);
ftagius 2:3b3b435ca8d9 315 }
casper 0:346c723cac97 316
casper 0:346c723cac97 317 int AS3935::setWatchdogThreshold(int wdth)
ftagius 2:3b3b435ca8d9 318 {
casper 0:346c723cac97 319 registerWrite(AS3935_WDTH,wdth);
casper 0:346c723cac97 320 return getWatchdogThreshold();
ftagius 2:3b3b435ca8d9 321 }
casper 0:346c723cac97 322
casper 0:346c723cac97 323 int AS3935::getTuneCap()
ftagius 2:3b3b435ca8d9 324 {
casper 0:346c723cac97 325 return registerRead(AS3935_TUN_CAP);
ftagius 2:3b3b435ca8d9 326 }
casper 0:346c723cac97 327
casper 0:346c723cac97 328 int AS3935::setTuneCap(int cap)
ftagius 2:3b3b435ca8d9 329 {
casper 0:346c723cac97 330 registerWrite(AS3935_TUN_CAP,cap);
ftagius 2:3b3b435ca8d9 331 return getTuneCap();
ftagius 2:3b3b435ca8d9 332 }
casper 0:346c723cac97 333
casper 0:346c723cac97 334 void AS3935::clearStats()
ftagius 2:3b3b435ca8d9 335 {
casper 0:346c723cac97 336 registerWrite(AS3935_CL_STAT,1);
casper 0:346c723cac97 337 registerWrite(AS3935_CL_STAT,0);
casper 0:346c723cac97 338 registerWrite(AS3935_CL_STAT,1);
ftagius 3:c536a9aa2a1c 339 }
ftagius 3:c536a9aa2a1c 340
ftagius 3:c536a9aa2a1c 341 int AS3935::calibrateRCOs (void)
ftagius 3:c536a9aa2a1c 342 {
ftagius 3:c536a9aa2a1c 343 int rc;
ftagius 3:c536a9aa2a1c 344 uint8_t trco;
ftagius 3:c536a9aa2a1c 345 uint8_t srco;
ftagius 3:c536a9aa2a1c 346 m_Cs = 0;
ftagius 3:c536a9aa2a1c 347 m_Spi.write(0x3D); // Direct Command Calibrate RCO
ftagius 3:c536a9aa2a1c 348 m_Spi.write(0x96);
ftagius 3:c536a9aa2a1c 349 m_Cs = 1;
ftagius 3:c536a9aa2a1c 350 wait_ms(1); // wait 1ms
ftagius 4:ab1f1b65468b 351 registerWrite(AS3935_DISP_SRCO, 0x40); // ERRATA: after power down mode
ftagius 3:c536a9aa2a1c 352 wait_ms(2); // wait 1ms
ftagius 4:ab1f1b65468b 353 registerWrite(AS3935_DISP_SRCO, 0x00); // ERRATA: after power down mode
ftagius 5:28311803e23d 354 wait_ms(1);
ftagius 5:28311803e23d 355 // cal sequence from acurite follows
ftagius 5:28311803e23d 356 registerWrite(AS3935_DISP_SRCO, 0x48);
ftagius 5:28311803e23d 357 wait_ms(1);
ftagius 5:28311803e23d 358 registerWrite(AS3935_DISP_LCO, 0x8);
ftagius 5:28311803e23d 359 wait_ms(1);
ftagius 5:28311803e23d 360 registerWrite(AS3935_DISP_TRCO, 0x28);
ftagius 5:28311803e23d 361 wait_ms(1);
ftagius 5:28311803e23d 362 registerWrite(AS3935_DISP_SRCO, 0x48);
ftagius 5:28311803e23d 363 wait_ms(1);
ftagius 5:28311803e23d 364 registerWrite(AS3935_DISP_LCO, 0x8);
ftagius 5:28311803e23d 365 wait_ms(1);
ftagius 5:28311803e23d 366
ftagius 3:c536a9aa2a1c 367 trco=registerRead(0x3A, 0x80); // Read out Calibration of TRCO done
ftagius 3:c536a9aa2a1c 368 srco=registerRead(0x3B, 0x80); // Readout Calibration of SRCO done
ftagius 3:c536a9aa2a1c 369 if(trco != 0x00 && srco != 0x00)
ftagius 3:c536a9aa2a1c 370 {
ftagius 3:c536a9aa2a1c 371 rc = 1;
ftagius 3:c536a9aa2a1c 372 printf("cal is done\r\n");
ftagius 3:c536a9aa2a1c 373 }
ftagius 3:c536a9aa2a1c 374 else
ftagius 3:c536a9aa2a1c 375 {
ftagius 3:c536a9aa2a1c 376 printf("cal is not done\r\n");
ftagius 3:c536a9aa2a1c 377 rc = 0;
ftagius 3:c536a9aa2a1c 378 }
ftagius 3:c536a9aa2a1c 379
ftagius 3:c536a9aa2a1c 380 return rc;
ftagius 3:c536a9aa2a1c 381 }