Lightning sensor library It is inherited from https://developer.mbed.org/users/casper/code/AS3935/
Dependents: BLE_Lightning_sensor
AS3935_ext.cpp@2:9e89ca13848d, 2015-09-05 (annotated)
- Committer:
- takafuminaka
- Date:
- Sat Sep 05 05:43:50 2015 +0000
- Revision:
- 2:9e89ca13848d
- Parent:
- 1:7eb1731e4764
- Child:
- 3:b6df973f6686
Almost completed;
Who changed what in which revision?
User | Revision | Line number | New 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 | 1:7eb1731e4764 | 42 | |
takafuminaka | 0:a1be9313a67a | 43 | } |
takafuminaka | 0:a1be9313a67a | 44 | |
takafuminaka | 0:a1be9313a67a | 45 | int AS3935_ext::MeasureLCOFreq() |
takafuminaka | 0:a1be9313a67a | 46 | { |
takafuminaka | 0:a1be9313a67a | 47 | DigitalIn display(irq); |
takafuminaka | 0:a1be9313a67a | 48 | int t0; |
takafuminaka | 0:a1be9313a67a | 49 | int t1; |
takafuminaka | 0:a1be9313a67a | 50 | float hz; |
takafuminaka | 0:a1be9313a67a | 51 | unsigned int ticks_per_second; |
takafuminaka | 0:a1be9313a67a | 52 | // int d; |
takafuminaka | 0:a1be9313a67a | 53 | #define LFCLK_FREQUENCY 0x8000 |
takafuminaka | 0:a1be9313a67a | 54 | #define RTC_COUNTER_SIZE 0x1000000 |
takafuminaka | 0:a1be9313a67a | 55 | ticks_per_second = LFCLK_FREQUENCY / (NRF_RTC1->PRESCALER + 1); |
takafuminaka | 0:a1be9313a67a | 56 | |
takafuminaka | 0:a1be9313a67a | 57 | // Set LCO_FDIV as 32 (0x3) (multiply 128) |
takafuminaka | 0:a1be9313a67a | 58 | wait_ms(20); |
takafuminaka | 0:a1be9313a67a | 59 | registerWrite(AS3935_LCO_FDIV,0x3); |
takafuminaka | 0:a1be9313a67a | 60 | |
takafuminaka | 0:a1be9313a67a | 61 | // Enable display LCO on IRQ |
takafuminaka | 0:a1be9313a67a | 62 | wait_ms(20); |
takafuminaka | 0:a1be9313a67a | 63 | registerWrite(AS3935_DISP_LCO,1); |
takafuminaka | 0:a1be9313a67a | 64 | |
takafuminaka | 0:a1be9313a67a | 65 | wait_ms(100); |
takafuminaka | 0:a1be9313a67a | 66 | |
takafuminaka | 0:a1be9313a67a | 67 | // Wait until IRQ becomes low; |
takafuminaka | 0:a1be9313a67a | 68 | while(display.read() == 1) |
takafuminaka | 0:a1be9313a67a | 69 | |
takafuminaka | 0:a1be9313a67a | 70 | // Wait until IRQ becomes high |
takafuminaka | 0:a1be9313a67a | 71 | wait_ms(20); |
takafuminaka | 0:a1be9313a67a | 72 | while(display.read() == 0); |
takafuminaka | 0:a1be9313a67a | 73 | t0 = NRF_RTC1->COUNTER; |
takafuminaka | 0:a1be9313a67a | 74 | |
takafuminaka | 0:a1be9313a67a | 75 | for(int i=0;i<1000;i++) { |
takafuminaka | 0:a1be9313a67a | 76 | // Wait until IRQ becomes low |
takafuminaka | 0:a1be9313a67a | 77 | while(display.read() == 1); |
takafuminaka | 0:a1be9313a67a | 78 | |
takafuminaka | 0:a1be9313a67a | 79 | // Wait until IRQ becomes high; |
takafuminaka | 0:a1be9313a67a | 80 | while(display.read() == 0); |
takafuminaka | 0:a1be9313a67a | 81 | } |
takafuminaka | 0:a1be9313a67a | 82 | t1 = NRF_RTC1->COUNTER; |
takafuminaka | 0:a1be9313a67a | 83 | // printf("%d\r\n",t1-t0); |
takafuminaka | 0:a1be9313a67a | 84 | |
takafuminaka | 0:a1be9313a67a | 85 | // 1000*128/500k = 0.256sec |
takafuminaka | 0:a1be9313a67a | 86 | hz = 1000* 128 * ticks_per_second / (unsigned int)((t1 - t0 + RTC_COUNTER_SIZE) % RTC_COUNTER_SIZE); |
takafuminaka | 0:a1be9313a67a | 87 | |
takafuminaka | 0:a1be9313a67a | 88 | // Disable display LCO on IRQ pin; |
takafuminaka | 0:a1be9313a67a | 89 | registerWrite(AS3935_DISP_LCO,0); |
takafuminaka | 0:a1be9313a67a | 90 | |
takafuminaka | 0:a1be9313a67a | 91 | return(hz); |
takafuminaka | 0:a1be9313a67a | 92 | } |