AMETEK Powervar / Mbed OS PwrCond_mbed5

Dependencies:   NetworkServices W5500Interface

Committer:
amccartney
Date:
Mon Feb 13 19:50:38 2017 +0000
Revision:
0:9d0945119ba4
Child:
1:f857c10c3cd2
Everything working including auto-tune for attenna

Who changed what in which revision?

UserRevisionLine numberNew contents of line
amccartney 0:9d0945119ba4 1 #include "mbed.h"
amccartney 0:9d0945119ba4 2 #include "Oled_C.h"
amccartney 0:9d0945119ba4 3 #include "AS3935.h"
amccartney 0:9d0945119ba4 4
amccartney 0:9d0945119ba4 5 Serial pc(USBTX, USBRX);
amccartney 0:9d0945119ba4 6 InterruptIn AS3935(PTB16); // AS3935 INT pin
amccartney 0:9d0945119ba4 7 DigitalIn sw2(SW2);
amccartney 0:9d0945119ba4 8 DigitalIn sw3(SW3);
amccartney 0:9d0945119ba4 9 //InterruptIn AS3935(PTC1); //SW2
amccartney 0:9d0945119ba4 10
amccartney 0:9d0945119ba4 11 char inOutSetting = 0;
amccartney 0:9d0945119ba4 12 char detectFlag = 0;
amccartney 0:9d0945119ba4 13
amccartney 0:9d0945119ba4 14 void check_sw3(void)
amccartney 0:9d0945119ba4 15 {
amccartney 0:9d0945119ba4 16 if (sw3 == 0) {
amccartney 0:9d0945119ba4 17 wait(1);
amccartney 0:9d0945119ba4 18 if (inOutSetting == 0) {
amccartney 0:9d0945119ba4 19 AS3935setOutdoors();
amccartney 0:9d0945119ba4 20 AS3935checkInOut();
amccartney 0:9d0945119ba4 21 inOutSetting = 1;
amccartney 0:9d0945119ba4 22 } else if (inOutSetting == 1) {
amccartney 0:9d0945119ba4 23 AS3935setIndoors();
amccartney 0:9d0945119ba4 24 AS3935checkInOut();
amccartney 0:9d0945119ba4 25 inOutSetting = 0;
amccartney 0:9d0945119ba4 26 }
amccartney 0:9d0945119ba4 27 }
amccartney 0:9d0945119ba4 28 }
amccartney 0:9d0945119ba4 29
amccartney 0:9d0945119ba4 30 void AS3935IntSrv(void) //Interrupt handler for the AS3935
amccartney 0:9d0945119ba4 31 {
amccartney 0:9d0945119ba4 32 AS3935.disable_irq();
amccartney 0:9d0945119ba4 33 detectFlag = 1;
amccartney 0:9d0945119ba4 34 }
amccartney 0:9d0945119ba4 35
amccartney 0:9d0945119ba4 36 int main()
amccartney 0:9d0945119ba4 37 {
amccartney 0:9d0945119ba4 38 char returnVal;
amccartney 0:9d0945119ba4 39 char outStringTemp[256];
amccartney 0:9d0945119ba4 40 char intVal = 0;
amccartney 0:9d0945119ba4 41 char display = 0;
amccartney 0:9d0945119ba4 42 char distance;
amccartney 0:9d0945119ba4 43 long int energy;
amccartney 0:9d0945119ba4 44 float LCOfreq;
amccartney 0:9d0945119ba4 45 int i = 1;
amccartney 0:9d0945119ba4 46
amccartney 0:9d0945119ba4 47 InitMCU();
amccartney 0:9d0945119ba4 48 pc.baud(115200);
amccartney 0:9d0945119ba4 49 pc.printf("\n\nFRDM-K22F board AS3935 Test.\n");
amccartney 0:9d0945119ba4 50
amccartney 0:9d0945119ba4 51 OLED_C_Init();
amccartney 0:9d0945119ba4 52 Black_Background();
amccartney 0:9d0945119ba4 53 OLED_C_Image(lightning,0,0,94,94);
amccartney 0:9d0945119ba4 54 wait(1);
amccartney 0:9d0945119ba4 55 White_Background();
amccartney 0:9d0945119ba4 56 OLED_C_Image(logo,0,80,95,14);
amccartney 0:9d0945119ba4 57 strConstRamCpy(CRam1,"Powervar");
amccartney 0:9d0945119ba4 58 Draw_Text(CRam1,1,77,0x0418,1);
amccartney 0:9d0945119ba4 59 Draw_line(0, 65, 95, 65, 0x8410);
amccartney 0:9d0945119ba4 60
amccartney 0:9d0945119ba4 61 AS3935spiInit();
amccartney 0:9d0945119ba4 62 LCOfreq = AS3935MeasureLCOFreq();
amccartney 0:9d0945119ba4 63 pc.printf("LCO freq: %.0f Hz\n",LCOfreq);
amccartney 0:9d0945119ba4 64 if (LCOfreq > 500000) {
amccartney 0:9d0945119ba4 65 while (LCOfreq > 500000) {
amccartney 0:9d0945119ba4 66 returnVal = AS3935setTuneCap(i);
amccartney 0:9d0945119ba4 67 LCOfreq = AS3935MeasureLCOFreq();
amccartney 0:9d0945119ba4 68 pc.printf("Capacitor Value: %dpF\n",i*8);
amccartney 0:9d0945119ba4 69 pc.printf("LCO freq: %.0f Hz\n\n",LCOfreq);
amccartney 0:9d0945119ba4 70 i++;
amccartney 0:9d0945119ba4 71 }
amccartney 0:9d0945119ba4 72 } else {
amccartney 0:9d0945119ba4 73 while (LCOfreq < 500000) {
amccartney 0:9d0945119ba4 74 returnVal = AS3935setTuneCap(i);
amccartney 0:9d0945119ba4 75 LCOfreq = AS3935MeasureLCOFreq();
amccartney 0:9d0945119ba4 76 pc.printf("Capacitor Value: %dpF\n",i*8);
amccartney 0:9d0945119ba4 77 pc.printf("LCO freq: %.0f Hz\n\n",LCOfreq);
amccartney 0:9d0945119ba4 78 i++;
amccartney 0:9d0945119ba4 79 }
amccartney 0:9d0945119ba4 80 }
amccartney 0:9d0945119ba4 81 wait(1);
amccartney 0:9d0945119ba4 82 AS3935powerUp();
amccartney 0:9d0945119ba4 83 AS3935enableDisturbers();
amccartney 0:9d0945119ba4 84 AS3935setIndoors();
amccartney 0:9d0945119ba4 85 //AS3935setOutdoors();
amccartney 0:9d0945119ba4 86 returnVal = AS3935setNoiseFloor(2);
amccartney 0:9d0945119ba4 87 returnVal = AS3935setSpikeRejection(2);
amccartney 0:9d0945119ba4 88 returnVal = AS3935setWatchdogThreshold(4);
amccartney 0:9d0945119ba4 89 returnVal = AS3935getMinimumLightnings();
amccartney 0:9d0945119ba4 90 AS3935checkInOut();
amccartney 0:9d0945119ba4 91 pc.printf("Minimum Lightnings: %x\n",returnVal);
amccartney 0:9d0945119ba4 92 returnVal = AS3935getNoiseFloor();
amccartney 0:9d0945119ba4 93 pc.printf("Noise Floor: %x\n",returnVal);
amccartney 0:9d0945119ba4 94 returnVal = AS3935getSpikeRejection();
amccartney 0:9d0945119ba4 95 pc.printf("Spike Rejection: %x\n",returnVal);
amccartney 0:9d0945119ba4 96 returnVal = AS3935getWatchdogThreshold();
amccartney 0:9d0945119ba4 97 pc.printf("Watchdog Threshold: %x\n",returnVal);
amccartney 0:9d0945119ba4 98 AS3935IntSrv(); //make sure the the int bit is cleared
amccartney 0:9d0945119ba4 99 returnVal = AS3935getTuneCap();
amccartney 0:9d0945119ba4 100 pc.printf("Capacitor Value: %dpF\n",returnVal*8);
amccartney 0:9d0945119ba4 101
amccartney 0:9d0945119ba4 102 wait(1);
amccartney 0:9d0945119ba4 103 // DDRAM_access();
amccartney 0:9d0945119ba4 104
amccartney 0:9d0945119ba4 105
amccartney 0:9d0945119ba4 106 //wait(1);
amccartney 0:9d0945119ba4 107 //AS3935registerWrite(AS3935_LCO_FDIV,0);
amccartney 0:9d0945119ba4 108 //AS3935registerWrite(AS3935_DISP_LCO,1);
amccartney 0:9d0945119ba4 109 //pc.printf("\nLCO on INT pin\n");
amccartney 0:9d0945119ba4 110 //wait(5);
amccartney 0:9d0945119ba4 111 //while (sw3 == 1) {
amccartney 0:9d0945119ba4 112 //
amccartney 0:9d0945119ba4 113 // }
amccartney 0:9d0945119ba4 114 //AS3935registerWrite(AS3935_DISP_LCO,0);
amccartney 0:9d0945119ba4 115 AS3935.rise(&AS3935IntSrv);
amccartney 0:9d0945119ba4 116 AS3935.enable_irq();
amccartney 0:9d0945119ba4 117 pc.printf("\nNormal Operation Started\n");
amccartney 0:9d0945119ba4 118 while (true) {
amccartney 0:9d0945119ba4 119 intVal = AS3935.read();
amccartney 0:9d0945119ba4 120 if (detectFlag == 1) {
amccartney 0:9d0945119ba4 121 detectFlag = 0;
amccartney 0:9d0945119ba4 122 wait(0.005);
amccartney 0:9d0945119ba4 123 source = AS3935interruptSource();
amccartney 0:9d0945119ba4 124 source = source & 0x0F;
amccartney 0:9d0945119ba4 125 pc.printf("Source: 0x%02X\n",source);
amccartney 0:9d0945119ba4 126 if (source == 0x08) {
amccartney 0:9d0945119ba4 127 display = 3;
amccartney 0:9d0945119ba4 128 distance = AS3935lightningDistanceKm();
amccartney 0:9d0945119ba4 129 energy = Thunder_Read_Energy();
amccartney 0:9d0945119ba4 130 pc.printf("Lightning Detected!!!\n");
amccartney 0:9d0945119ba4 131 pc.printf("Distance: %d\n",distance);
amccartney 0:9d0945119ba4 132 pc.printf("Energy: %lu\n",energy);
amccartney 0:9d0945119ba4 133 OLED_C_Image(strike,0,25,19,19);
amccartney 0:9d0945119ba4 134 strConstRamCpy(CRam1,"Lightning");
amccartney 0:9d0945119ba4 135 Draw_Text(CRam1,20,45,0x0000,1);
amccartney 0:9d0945119ba4 136 snprintf( outStringTemp, 256, "@ %d km ", distance);
amccartney 0:9d0945119ba4 137 strConstRamCpy(CRam1,outStringTemp);
amccartney 0:9d0945119ba4 138 Draw_Text(CRam1,20,35,0x0000,1);
amccartney 0:9d0945119ba4 139 snprintf( outStringTemp, 256, "Energy %lu", energy);
amccartney 0:9d0945119ba4 140 strConstRamCpy(CRam1,outStringTemp);
amccartney 0:9d0945119ba4 141 Draw_Text(CRam1,10,25,0x0000,1);
amccartney 0:9d0945119ba4 142 } else if (source == 0x01) {
amccartney 0:9d0945119ba4 143 pc.printf("Noise Detected\n");
amccartney 0:9d0945119ba4 144 strConstRamCpy(CRam1,"Noise Det.");
amccartney 0:9d0945119ba4 145 Draw_Text(CRam1,21,10,0x0000,1);
amccartney 0:9d0945119ba4 146 } else if (source == 0x00) {
amccartney 0:9d0945119ba4 147 distance = AS3935lightningDistanceKm();
amccartney 0:9d0945119ba4 148 pc.printf("Distance updated: %d\n",distance);
amccartney 0:9d0945119ba4 149 } else if (source == 0x04) {
amccartney 0:9d0945119ba4 150 pc.printf("Disturber Detected\n");
amccartney 0:9d0945119ba4 151 }
amccartney 0:9d0945119ba4 152 AS3935.enable_irq();
amccartney 0:9d0945119ba4 153 }
amccartney 0:9d0945119ba4 154 check_sw3();
amccartney 0:9d0945119ba4 155 strConstRamCpy(CRam1,"*");
amccartney 0:9d0945119ba4 156 Draw_Text(CRam1,1,10,0x0000,1);
amccartney 0:9d0945119ba4 157 wait(0.5);
amccartney 0:9d0945119ba4 158 // intVal = AS3935.read();
amccartney 0:9d0945119ba4 159 // if (intVal == 1) {
amccartney 0:9d0945119ba4 160 // source = AS3935interruptSource(); //Likely we missed an interrupt
amccartney 0:9d0945119ba4 161 // pc.printf("Missed Interrupt\n");
amccartney 0:9d0945119ba4 162 // AS3935.enable_irq();
amccartney 0:9d0945119ba4 163 // }
amccartney 0:9d0945119ba4 164 check_sw3();
amccartney 0:9d0945119ba4 165 strConstRamCpy(CRam1," ");
amccartney 0:9d0945119ba4 166 Draw_Text(CRam1,1,10,0x0000,1);
amccartney 0:9d0945119ba4 167 wait(0.5);
amccartney 0:9d0945119ba4 168 if (display == 0){
amccartney 0:9d0945119ba4 169 OLED_C_Image(listening,0,25,19,19);
amccartney 0:9d0945119ba4 170 strConstRamCpy(CRam1," ");
amccartney 0:9d0945119ba4 171 Draw_Text(CRam1,20,45,0x0000,1);
amccartney 0:9d0945119ba4 172 snprintf( outStringTemp, 256, "Listening...");
amccartney 0:9d0945119ba4 173 strConstRamCpy(CRam1,outStringTemp);
amccartney 0:9d0945119ba4 174 Draw_Text(CRam1,20,35,0x0000,1);
amccartney 0:9d0945119ba4 175 snprintf( outStringTemp, 256, " ");
amccartney 0:9d0945119ba4 176 strConstRamCpy(CRam1,outStringTemp);
amccartney 0:9d0945119ba4 177 Draw_Text(CRam1,10,25,0x0000,1);
amccartney 0:9d0945119ba4 178 } else { --display;}
amccartney 0:9d0945119ba4 179 strConstRamCpy(CRam1," ");
amccartney 0:9d0945119ba4 180 Draw_Text(CRam1,21,10,0x0000,1);
amccartney 0:9d0945119ba4 181 //AS3935registerWrite(AS3935_DISP_LCO,1);
amccartney 0:9d0945119ba4 182 }
amccartney 0:9d0945119ba4 183
amccartney 0:9d0945119ba4 184 }