Lightning sensor library It is inherited from https://developer.mbed.org/users/casper/code/AS3935/

Dependents:   BLE_Lightning_sensor

Committer:
takafuminaka
Date:
Thu Aug 27 16:15:47 2015 +0000
Revision:
0:a1be9313a67a
Child:
1:7eb1731e4764
Lightning Sensor library.; It is inherited from ; https://developer.mbed.org/users/casper/code/AS3935/;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
takafuminaka 0:a1be9313a67a 1 /*
takafuminaka 0:a1be9313a67a 2 AS3935_ext.cpp - AS3935 Franklin Lightning Sensor™ IC by AMS library
takafuminaka 0:a1be9313a67a 3 Copyright (c) 2015 T.Naka. All rights reserved.
takafuminaka 0:a1be9313a67a 4
takafuminaka 0:a1be9313a67a 5 This library is free software; you can redistribute it and/or
takafuminaka 0:a1be9313a67a 6 modify it under the terms of the GNU Lesser General Public
takafuminaka 0:a1be9313a67a 7 License as published by the Free Software Foundation; either
takafuminaka 0:a1be9313a67a 8 version 3 of the License, or (at your option) any later version.
takafuminaka 0:a1be9313a67a 9
takafuminaka 0:a1be9313a67a 10 This library is distributed in the hope that it will be useful,
takafuminaka 0:a1be9313a67a 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
takafuminaka 0:a1be9313a67a 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
takafuminaka 0:a1be9313a67a 13 Lesser General Public License for more details.
takafuminaka 0:a1be9313a67a 14
takafuminaka 0:a1be9313a67a 15 You should have received a copy of the GNU Lesser General Public
takafuminaka 0:a1be9313a67a 16 License along with this library; if not, write to the Free Software
takafuminaka 0:a1be9313a67a 17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
takafuminaka 0:a1be9313a67a 18 */
takafuminaka 0:a1be9313a67a 19
takafuminaka 0:a1be9313a67a 20 #include "AS3935_ext.h"
takafuminaka 0:a1be9313a67a 21
takafuminaka 0:a1be9313a67a 22 AS3935_ext::AS3935_ext(PinName sda, PinName scl, int adresse, PinName irqin): AS3935(sda, scl ,adresse)
takafuminaka 0:a1be9313a67a 23 {
takafuminaka 0:a1be9313a67a 24 irq = irqin;
takafuminaka 0:a1be9313a67a 25 wait_ms(11);
takafuminaka 0:a1be9313a67a 26 }
takafuminaka 0:a1be9313a67a 27
takafuminaka 0:a1be9313a67a 28 void AS3935_ext::reset()
takafuminaka 0:a1be9313a67a 29 {
takafuminaka 0:a1be9313a67a 30
takafuminaka 0:a1be9313a67a 31 AS3935::reset();
takafuminaka 0:a1be9313a67a 32
takafuminaka 0:a1be9313a67a 33 // Callibrate automatically the internal RCO Oscillators
takafuminaka 0:a1be9313a67a 34 registerWrite(0x3D,0xff,0x96);
takafuminaka 0:a1be9313a67a 35 wait_ms(2);
takafuminaka 0:a1be9313a67a 36
takafuminaka 0:a1be9313a67a 37 // Minimum number of lightning
takafuminaka 0:a1be9313a67a 38 registerWrite(AS3935_MIN_NUM_LIGH ,1);
takafuminaka 0:a1be9313a67a 39
takafuminaka 0:a1be9313a67a 40 // Set SREJ
takafuminaka 0:a1be9313a67a 41 registerWrite(AS3935_SREJ,0x02);
takafuminaka 0:a1be9313a67a 42 }
takafuminaka 0:a1be9313a67a 43
takafuminaka 0:a1be9313a67a 44 int AS3935_ext::MeasureLCOFreq()
takafuminaka 0:a1be9313a67a 45 {
takafuminaka 0:a1be9313a67a 46 DigitalIn display(irq);
takafuminaka 0:a1be9313a67a 47 int t0;
takafuminaka 0:a1be9313a67a 48 int t1;
takafuminaka 0:a1be9313a67a 49 float hz;
takafuminaka 0:a1be9313a67a 50 unsigned int ticks_per_second;
takafuminaka 0:a1be9313a67a 51 // int d;
takafuminaka 0:a1be9313a67a 52 #define LFCLK_FREQUENCY 0x8000
takafuminaka 0:a1be9313a67a 53 #define RTC_COUNTER_SIZE 0x1000000
takafuminaka 0:a1be9313a67a 54 ticks_per_second = LFCLK_FREQUENCY / (NRF_RTC1->PRESCALER + 1);
takafuminaka 0:a1be9313a67a 55
takafuminaka 0:a1be9313a67a 56 // Set LCO_FDIV as 32 (0x3) (multiply 128)
takafuminaka 0:a1be9313a67a 57 wait_ms(20);
takafuminaka 0:a1be9313a67a 58 registerWrite(AS3935_LCO_FDIV,0x3);
takafuminaka 0:a1be9313a67a 59
takafuminaka 0:a1be9313a67a 60 // Enable display LCO on IRQ
takafuminaka 0:a1be9313a67a 61 wait_ms(20);
takafuminaka 0:a1be9313a67a 62 registerWrite(AS3935_DISP_LCO,1);
takafuminaka 0:a1be9313a67a 63
takafuminaka 0:a1be9313a67a 64 wait_ms(100);
takafuminaka 0:a1be9313a67a 65
takafuminaka 0:a1be9313a67a 66 // Wait until IRQ becomes low;
takafuminaka 0:a1be9313a67a 67 while(display.read() == 1)
takafuminaka 0:a1be9313a67a 68
takafuminaka 0:a1be9313a67a 69 // Wait until IRQ becomes high
takafuminaka 0:a1be9313a67a 70 wait_ms(20);
takafuminaka 0:a1be9313a67a 71 while(display.read() == 0);
takafuminaka 0:a1be9313a67a 72 t0 = NRF_RTC1->COUNTER;
takafuminaka 0:a1be9313a67a 73
takafuminaka 0:a1be9313a67a 74 for(int i=0;i<1000;i++) {
takafuminaka 0:a1be9313a67a 75 // Wait until IRQ becomes low
takafuminaka 0:a1be9313a67a 76 while(display.read() == 1);
takafuminaka 0:a1be9313a67a 77
takafuminaka 0:a1be9313a67a 78 // Wait until IRQ becomes high;
takafuminaka 0:a1be9313a67a 79 while(display.read() == 0);
takafuminaka 0:a1be9313a67a 80 }
takafuminaka 0:a1be9313a67a 81 t1 = NRF_RTC1->COUNTER;
takafuminaka 0:a1be9313a67a 82 // printf("%d\r\n",t1-t0);
takafuminaka 0:a1be9313a67a 83
takafuminaka 0:a1be9313a67a 84 // 1000*128/500k = 0.256sec
takafuminaka 0:a1be9313a67a 85 hz = 1000* 128 * ticks_per_second / (unsigned int)((t1 - t0 + RTC_COUNTER_SIZE) % RTC_COUNTER_SIZE);
takafuminaka 0:a1be9313a67a 86
takafuminaka 0:a1be9313a67a 87 // Disable display LCO on IRQ pin;
takafuminaka 0:a1be9313a67a 88 registerWrite(AS3935_DISP_LCO,0);
takafuminaka 0:a1be9313a67a 89
takafuminaka 0:a1be9313a67a 90 return(hz);
takafuminaka 0:a1be9313a67a 91 }