So Im developing code for a variable gain op amp which receives square wave from an IR sensing diode
Sometimes the code will have to deal with a offset in the voltage so that sometimes the trough of the square wave may not be at zero, so im developing a sketch which will detect the peak and the trough of the wave and set the low threshold so as to be able to differentiate between the high and the low and thus give a peak to peak value.
//setting the clock divider for faster ADC operation
#define FASTADC 1
// defines for setting and clearing register bits
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
int ThreshArray[200];
int Peak = 0;
int Trough = 1023;
float High = 0;
float Low = 0;
int Threshold = 0;
void setup() {
Serial.begin(250000);
#if FASTADC
// set prescale to 16
sbi(ADCSRA,ADPS2) ;
cbi(ADCSRA,ADPS1) ;
cbi(ADCSRA,ADPS0) ;
#endif
}
void loop(){
//200 reads of a 2KHz square wave
for(int i = 0; i < 200; i++){
ThreshArray [i] = analogRead(0);
Serial.println(ThreshArray [i]);
}
//check each value to find peak and trough
for (int i = 0; 1 < 200; i++){
if (ThreshArray[i] < Trough){
Trough = ThreshArray[i];
Serial.print("Trough ");
Serial.println(Trough);
}
if (ThreshArray[i] > Peak){
Peak = ThreshArray[i];
Serial.print("Peak ");
Serial.println(Peak);
}
}
}
I have the whittled down to where the error is occuring, note im not setting the threshold or giving a peak to peak value, just finding the trough and peak of the wave. This actually works fine but its what the serial print shows after the correct values are chosen which is giving me a headache
792
179
180
796
179
796
179
795
179
795
179
179
795
179
795
179
796
179
796
179
179
796
179
796
179
796
179
796
179
179
796
179
796
179
796
179
798
796
179
796
180
797
179
797
179
796
796
179
796
179
796
179
796
179
406
798
180
798
180
797
179
798
179
179
796
180
796
180
796
179
796
179
180
797
179
796
179
797
179
797
179
179
796
179
796
179
796
179
798
796
179
796
179
796
179
796
179
796
795
179
796
179
796
179
796
179
179
796
179
796
179
796
179
796
179
180
796
179
796
179
796
179
796
179
179
796
179
797
179
797
179
797
182
179
797
179
796
179
796
179
796
796
179
796
180
798
180
798
179
798
798
180
798
179
796
179
796
179
643
796
179
796
179
797
179
798
179
179
797
179
796
179
796
179
796
179
179
796
179
796
179
796
179
796
179
179
796
180
796
179
795
179
795
796
179
795
179
795
179
796
Trough 792
Peak 792
Trough 179
Peak 796
Peak 798
Trough 0
Peak 1000
Peak 14336
Peak 14647
Peak 29268
Trough -32768
Peak 30319
Peak 31027
Peak 31539
Peak 31795
Peak 31854
Peak 31946
Peak 31974
Peak 31989
Peak 31990
Peak 31992
Peak 31994
Peak 31996
Peak 31998
Peak 32001
Peak 32003
Peak 32005
Peak 32006
Peak 32008
Peak 32010
Peak 32012
Peak 32014
Peak 32016
Peak 32018
Peak 32107
Peak 32108
Peak 32110
Peak 32112
Peak 32114
Peak 32116
Peak 32118
Peak 32120
Peak 32122
Peak 32124
Peak 32126
Peak 32129
Peak 32131
Peak 32133
Peak 32135
Peak 32136
Peak 32138
Peak 32140
Peak 32142
Peak 32144
Peak 32146
Peak 32148
Peak 32150
Peak 32152
Peak 32154
Peak 32156
Peak 32158
Peak 32160
Peak 32162
Peak 32164
Peak 32165
Peak 32167
Peak 32169
Peak 32172
Peak 32174
Peak 32176
Peak 32178
Peak 32180
Peak 32182
Peak 32184
Peak 32186
Peak 32188
Peak 32190
Peak 32192
Peak 32194
Peak 32195
Peak 32197
Peak 32199
Peak 32201
Peak 32203
Peak 32205
Peak 32207
Peak 32209
Peak 32211
Peak 32214
Peak 32216
Peak 32218
Peak 32220
Peak 32222
Peak 32224
Peak 32225
Peak 32227
Peak 32229
Peak 32231
Peak 32233
Peak 32235
Peak 32237
Peak 32239
Peak 32241
Peak 32243
Peak 32245
Peak 32247
Peak 32249
Peak 32251
Peak 32253
Peak 32254
Peak 32257
Peak 32259
Peak 32261
Peak 32263
Peak 32265
Peak 32267
Peak 32269
Peak 32271
Peak 32273
Peak 32275
Peak 32277
Peak 32279
Peak 32281
Peak 32283
Peak 32284
Peak 32286
Peak 32288
Peak 32290
Peak 32292
Peak 32294
Peak 32296
Peak 32299
Peak 32301
Peak 32303
Peak 32305
Peak 32307
Peak 32309
Peak 32311
Peak 32313
Peak 32314
Peak 32316
Peak 32318
Peak 32320
Peak 32322
Peak 32324
Peak 32326
Peak 32328
Peak 32330
Peak 32332
Peak 32334
Peak 32336
Peak 32338
Peak 32340
Peak 32343
Peak 32344
Peak 32346
Peak 32348
Peak 32350
Peak 32352
Peak 32354
Peak 32356
Peak 32358
Peak 32360
Peak 32362
Peak 32364
Peak 32366
Peak 32368
Peak 32370
Peak 32372
Peak 32373
Peak 32375
Peak 32377
Peak 32379
Peak 32381
Peak 32384
Peak 32386
Peak 32388
Peak 32390
Peak 32392
Peak 32394
Peak 32396
Peak 32398
Peak 32400
Peak 32402
Peak 32403
Peak 32405
Peak 32407
Peak 32409
Peak 32411
Peak 32413
Peak 32415
Peak 32417
Peak 32419
Peak 32421
Peak 32423
Peak 32425
Peak 32428
Peak 32430
Peak 32431
Peak 32433
Peak 32435
Peak 32437
Peak 32439
Peak 32441
Peak 32443
Peak 32445
Peak 32447
Peak 32449
Peak 32451
Peak 32453
Peak 32455
Peak 32457
Peak 32459
Peak 32460
Peak 32462
Peak 32464
Peak 32466
Peak 32468
Peak 32471
Peak 32473
Peak 32475
Peak 32477
Peak 32479
Peak 32481
Peak 32483
Peak 32485
Peak 32487
Peak 32489
Peak 32490
Peak 32492
Peak 32494
Peak 32496
Peak 32498
Peak 32500
Peak 32502
Peak 32504
Peak 32506
Peak 32508
Peak 32510
Peak 32513
Peak 32515
Peak 32517
Peak 32519
Peak 32520
Peak 32522
Peak 32524
Peak 32526
Peak 32528
Peak 32530
Peak 32532
Peak 32534
Peak 32536
Peak 32538
Peak 32540
Peak 32542
Peak 32544
Peak 32546
Peak 32548
Peak 32549
Peak 32551
Peak 32553
Peak 32556
Peak 32558
Peak 32560
Peak 32562
Peak 32564
Peak 32566
Peak 32568
Peak 32570
Peak 32572
Peak 32574
Peak 32576
Peak 32578
Peak 32579
Peak 32581
Peak 32583
Peak 32585
Peak 32587
Peak 32589
Peak 32591
Peak 32593
Peak 32595
Peak 32598
Peak 32600
Peak 32602
Peak 32604
Peak 32606
Peak 32608
Peak 32609
Peak 32611
Peak 32613
Peak 32615
Peak 32617
Peak 32619
Peak 32621
Peak 32623
Peak 32625
Peak 32627
Peak 32629
Peak 32631
Peak 32633
Peak 32635
Peak 32637
Peak 32638
Peak 32641
Peak 32643
Peak 32645
Peak 32647
Peak 32649
Peak 32651
Peak 32653
Peak 32655
Peak 32657
Peak 32659
Peak 32661
Peak 32663
Peak 32665
Peak 32667
Peak 32668
Peak 32670
Peak 32672
Peak 32674
Peak 32676
Peak 32678
Peak 32680
Peak 32683
Peak 32685
Peak 32687
Peak 32689
Peak 32691
Peak 32693
Peak 32695
Peak 32697
Peak 32698
Peak 32700
Peak 32702
Peak 32704
Peak 32706
Peak 32708
Peak 32710
Peak 32712
Peak 32714
Peak 32716
Peak 32718
Peak 32720
Peak 32722
Peak 32724
Peak 32727
Peak 32728
Peak 32730
Peak 32732
Peak 32734
Peak 32736
Peak 32738
Peak 32740
Peak 32742
Peak 32744
Peak 32746
Peak 32748
Peak 32750
Peak 32752
Peak 32754
Peak 32756
Peak 32757
Peak 32759
Peak 32761
Peak 32763
Peak 32765
Peak 32767
these are the results I got on the com, you'll see it takes the readings finds the correct peak and trough and goes away off on a mad one, also the code stops there it dosnt repeat which has me baffled. Any insight into what I may be doing wrong or how to fix the issue would be very much appreciated