發表文章

目前顯示的是 2月, 2020的文章

Python-PyQt版面配置與嵌入即時動態圖

圖片
控制板讀到的訊號需要即時顯示,因此我用PyQT寫了個GUI範例,並且能即時更新圖表,畫圖的部分採用matplotlib。 上面圖表就是程式碼會顯示的即時圖,右邊是即時產生sin與cos值,左邊是cos、sin分別在x,y軸產生出來的圖形。 import sys import PyQt5 import time import numpy as np from matplotlib.backends.qt_compat import QtCore, QtWidgets, is_pyqt5 if is_pyqt5(): from matplotlib.backends.backend_qt5agg import ( FigureCanvas, NavigationToolbar2QT as NavigationToolbar) else: from matplotlib.backends.backend_qt4agg import ( FigureCanvas, NavigationToolbar2QT as NavigationToolbar) from matplotlib.figure import Figure class ApplicationWindow(QtWidgets.QMainWindow): def __init__(self): super().__init__() self._main = QtWidgets.QWidget() self.setCentralWidget(self._main) layout = QtWidgets.QGridLayout(self._main) #新增圖表 dynamic_canvas_total = FigureCanvas(Figure(figsize=(5, 3))) dynamic_canvas_x = FigureCanvas(Figure(figsize=(5, 3))) dynamic_canvas_y = FigureCanvas(Figure(figsize=(5, 3)))

Python-使用pyserial與控制板溝通

最近在研究個專案,從sensor即時讀取資料透過USB傳到電腦進訓練好的分類模型進行損壞類別判斷並用GUI呈現,而板子與電腦傳輸使用到python的pyserial實作。 一開始先到裝置管理員確認COM PORT若讀不到記得刪除然後更新驅動,並確認板子的傳輸速率。 這邊我採用一發一收,我發個訊號給板子,板子才會把讀到的電壓值給我。 這範例他一次發送就是18筆bytes,扣除頭尾作為一次發送的判斷,其餘每兩筆可轉換成一組電壓值。 因此我兩組資料要一起做個計算還原電壓值,公式可參考註解(高位元加上低位元*3.3伏特/4095 2的16次方位元) 每個人板子寫的邏輯跟資料都不一樣,所以可單純參考對板子發送資料與接收資料。 import serial import time COM_PORT = 'COM15' # 指定通訊埠名稱 BAUD_RATES = 19200 # 設定傳輸速率 ser = serial.Serial(COM_PORT, BAUD_RATES) # 初始化序列通訊埠 try: while True: values = bytearray([3]) #板子收到3會對電腦傳一組資料 ser.write(values) #發送資料跟FPGA要值 i = 0 high = 0.0 total = 0.0 while ser.in_waiting: # 若收到序列資料… data_raw = ser.read(1) # 讀取一筆 共18筆扣掉1跟18 每兩筆可轉換成一組電壓值 data = int.from_bytes(data_raw, "big") # byte to int print('接收到的資料:', data) i = i + 1 print(str(i)) if(i == 1): #去頭 continue if(i == 1

Altera DE0 - Nano開發 ADC應用

圖片
前言:      最近因為做實驗的關係,作者接觸了Altera DE0-nano開發版,發現這個板子雖然小小一塊但功能卻很齊全的,包含了加速計、8個led燈示、四段指撥開關、兩個復歸按鈕、8通道12bitADC以及多達80個GPIO(裡面涵蓋Vcc及Gnd)可以去使用,而本文章是使用其ADC讀取感測器數值的應用本文章是使用其ADC讀取感測器數值的應用     下圖為板子的正反面照片,ADC位置在背面(圖b)                                        圖a. 正面照                                   圖b. 背面照 圖c. Pin腳圖     DE0-Nano使用的ADC晶片為 ADC128S022 ,其通訊使用的是SPI進行資料交換如下圖所示 圖d. ADC128S022 Serial Timing Diagram     依據圖d的通訊圖可以看出當CS Low時,其SCLK以16個為一組DATA的資料,為了配合撰寫程式,本文章以0至15來取代1至16,其中資料的第0個與第1個不列入參考,而第2~4為選擇ADC Channel的Address(由Din腳為提供),最後第4~15為晶片所量測到的電壓數位訊號(由Dout送出),其訊號範圍為0~3.3伏特(數位訊號為0~4095)。 實作:     SCLK: library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity Divider100 is generic ( CLK_DIV : integer := 100 ); port( reset: in std_logic; CLK : in std_logic; enable : in std_logic; SCLK_RISING : out std_logic; SCLK_FALLING : out std_logic ); end Divider100; architecture arch of Divider100 is