Root/Examples/ADC/Scope-QT-src/mainwindow.cpp

1#include "mainwindow.h"
2#include "ui_mainwindow.h"
3#include <QDebug>
4
5#include <QTime>
6#include <math.h>
7
8MainWindow::MainWindow(QWidget *parent)
9    : QMainWindow(parent), ui(new Ui::MainWindow)
10{
11    ui->setupUi(this);
12    connect(this,SIGNAL(refresh()),ui->Graph, SLOT(repaint()));
13    ui->Graph->setPointsPerPlot(200);
14    ui->Graph->setVoltsPerDiv(205);
15
16    timer1 = new QTimer(this);
17    timer1->start(50);
18    connect(timer1, SIGNAL(timeout()), this, SLOT(updateGraph()));
19
20    ADC1 = new ADCw;
21    ADC1->testADC();
22    ADC1->setBufferLen(240);
23    ADC1->setClockDiv(ADC_SPI_CLKDIV_MIN); //Max. speed
24    ADC1->setMuxChannels(1);
25    printf("\nTaking 120 samples by channel at Fs=99KHz (trigger=50ms)\n");
26}
27
28MainWindow::~MainWindow()
29{
30    delete ui;
31}
32
33void MainWindow::updateGraph()
34{
35    JZ_REG * dataADC;
36
37    int tempD;
38    deltaCountCH1=0; deltaCountCH2=0;
39    idxCH1=0; idxCH2=0;
40
41        dataADC=ADC1->takeSamplesADC(0);
42        for(int i=0; i< 240/2; i++)
43        {
44            tempD = dataADC[i]&0x0FFF;
45            //tempD = sin(10*PI*i/200)*0x200+0x200;
46            ui->Graph->addPoint1(tempD+0x3ff);
47
48            sign2_CH1 = getSign(tempD-0x200);
49            if((sign1_CH1!=sign2_CH1) & (i>1))
50                deltaCountCH1++;
51
52            if((deltaCountCH1>0) & (deltaCountCH1<3))
53            {
54                valCH1[idxCH1]= tempD-0x200;
55                idxCH1 ++;
56            }
57
58            sign1_CH1=sign2_CH1;
59
60            tempD = (dataADC[i]>>16)&0x0FFF;
61            //tempD = cos(10*PI*i/200)*0x200+0x200;
62            ui->Graph->addPoint2(tempD);
63
64            sign2_CH2 = getSign(tempD-0x200);
65            if((sign1_CH2!=sign2_CH2) & (i>1))
66                deltaCountCH2++;
67
68            if((deltaCountCH2>0) & (deltaCountCH2<3))
69            {
70                valCH2[idxCH2]= tempD-0x200;
71                idxCH2 ++;
72            }
73
74            sign1_CH2=sign2_CH2;
75        }
76
77        double Vrms=0, Vm=0;
78
79        for(int i=0; i<idxCH1; i++)
80        {
81            Vrms += pow(valCH1[i],2)/idxCH1;
82            Vm += valCH1[i]/idxCH1;
83        }
84
85        if(deltaCountCH1>2)
86        {
87            Vrms=sqrt(Vrms)+VrmsC;
88            Vm=Vm+VmC;
89            ui->txtVrmsCH1->setText(QString::number(Vrms));
90            ui->txtVmCH1->setText(QString::number(Vm));
91        }
92        else
93        {
94            ui->txtVrmsCH1->setText("???");
95            ui->txtVmCH1->setText("???");
96        }
97
98        Vrms=0; Vm=0;
99        for(int i=0; i<idxCH2; i++)
100        {
101            Vrms += pow(valCH2[i],2)/idxCH2;
102            Vm += valCH2[i]/idxCH2;
103        }
104
105        if(deltaCountCH2>2)
106        {
107            Vrms=sqrt(Vrms)+VrmsC;
108            Vm=Vm+VmC;
109            ui->txtVrmsCH2->setText(QString::number(Vrms));
110            ui->txtVmCH2->setText(QString::number(Vm));
111        }
112        else
113        {
114            ui->txtVrmsCH2->setText("???");
115            ui->txtVmCH2->setText("???");
116        }
117
118    emit refresh();
119}
120

Archive Download this file

Branches:
master



interactive