yoneda пре 1 година
родитељ
комит
cf6ee37643
3 измењених фајлова са 43 додато и 14 уклоњено
  1. 3 3
      ADRS2040U_i2c.h
  2. 38 11
      adctest.py
  3. 2 0
      main.cpp

+ 3 - 3
ADRS2040U_i2c.h

@@ -17,11 +17,11 @@
 #define GPIO_SDA0 0
 #define GPIO_SCK0 1
 
-// I2Cコマンド
+// I2Cレジスタ
 enum ADRS2040_CMD {
     ADRS2040_CMD_INVALID,       // 無効
-    ADRS2040_CMD_ADC_START,     // ADC割り込み開始
-    ADRS2040_CMD_ADC_STOP,      // ADC割り込み停止
+    ADRS2040_CMD_ADC_START,     // ADCフリーラン開始
+    ADRS2040_CMD_ADC_STOP,      // ADCフリーラン停止
     ADRS2040_CMD_SET_RATE,      // サンプリングレート設定
     ADRS2040_CMD_GET_COUNT,     // バッファデータ数
     ADRS2040_CMD_GET_VALUE,      // ADCデータ読み取り

+ 38 - 11
adctest.py

@@ -1,4 +1,8 @@
 from smbus2 import SMBus
+import pyqtgraph as pg
+from pyqtgraph.Qt import QtCore, QtGui
+import numpy as np
+import sys
 import time
 
 # 定数
@@ -10,16 +14,39 @@ ADRS2040_CMD_SET_RATE     = 3
 ADRS2040_CMD_GET_COUNT    = 4
 ADRS2040_CMD_GET_VALUE    = 5
 
-with SMBus(1) as i2c:
-    # 1000Hzにセット
-    i2c.write_word_data(ADRS2040_ADDR, ADRS2040_CMD_SET_RATE, 100)
-    i2c.write_byte(ADRS2040_ADDR, ADRS2040_CMD_ADC_START)
-    while True:
-        counter = 0
-        counter = i2c.read_word_data(ADRS2040_ADDR,ADRS2040_CMD_GET_COUNT )
-        print(counter)
-        for i in range(counter):
-            value = i2c.read_word_data(ADRS2040_ADDR,ADRS2040_CMD_GET_VALUE)
-            print( value )
+class ADCGraph:
+    def __init__(self):
+        self.win = pg.GraphicsWindow()
+        self.win.setWindowTitle('ADC Input')
+        self.plt = self.win.addPlot()
+        self.plt.setYRange(0,1024)
+        self.curve = self.plt.plot(pen=(0, 0, 255))
+    
+        
+        self.data = np.zeros(100)
+        #
+        # 開始
+        self.i2c = SMBus(1)
+        self.i2c.write_word_data(ADRS2040_ADDR, ADRS2040_CMD_SET_RATE, 50)
+        self.i2c.write_byte(ADRS2040_ADDR, ADRS2040_CMD_ADC_START)
 
+        self.timer = QtCore.QTimer()
+        self.timer.timeout.connect(self.update)
+        self.timer.start(10)
 
+
+    def update(self):
+        nod = 0
+        nod = self.i2c.read_word_data(ADRS2040_ADDR,ADRS2040_CMD_GET_COUNT )
+        for i in range(nod):
+            value = self.i2c.read_word_data(ADRS2040_ADDR,ADRS2040_CMD_GET_VALUE)
+            # print(value)
+            self.data = np.delete(self.data, 0)
+            self.data = np.append(self.data, value)
+        self.curve.setData(self.data)
+
+if __name__ == "__main__":
+    graphWin = ADCGraph()
+
+    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
+        QtGui.QApplication.instance().exec_()

+ 2 - 0
main.cpp

@@ -34,10 +34,12 @@ static void i2c_slave_handler(i2c_inst_t *i2c, i2c_slave_event_t event)
                 ADRS2040U_cmd = i2c_read_byte_raw(i2c);
             }
             if(ADRS2040U_cmd == ADRS2040_CMD_ADC_START) {
+                DEBUG_PRINT("ADC START\n");
                 adcd.run(true);
                 ADRS2040U_cmd = ADRS2040_CMD_INVALID;
             }
             else if(ADRS2040U_cmd == ADRS2040_CMD_ADC_STOP) {
+                DEBUG_PRINT("ADC START\n");
                 adcd.run(false);
                 ADRS2040U_cmd = ADRS2040_CMD_INVALID;