Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page

CSplusのPython Console上でIronPythonスクリプトを実行して波形を描いてみた(RSPI signal viewer)

こんにちは。NoMaYです。

別スレッド()でRSPIの波形データに関して腑に落ちないところがあったので調べようとしているのですが、データを数字の羅列で見るよりも視覚化して見た方が分かり易そうだと思い、CS+のPythonコンソール上でIronPythonスクリプトを実行して波形を描いてみました。なお、RSPI波形データ(以下の画面コピーの赤枠の箇所)はRX65N TBボードで収集してTeraTermに表示させてスクリプトへコピペしたものです。(RSPI波形データに関しては後で別スレッドにして投稿するつもりです。)

CS+のPythonコンソール上でIronPythonスクリプトを実行して波形を表示


RSPI波形データはRX65N TBボードで収集してTeraTermに表示


RSPI信号をRX65N内部で端子割り込み入力に接続するようにMPCを無理矢理設定したのでRSPI関係の配線は無い


RSPI波形データを表示するIronPythonスクリプト

2548.RSPI_signal_viewer_1.txt
import clr
clr.AddReference("System.Windows.Forms")
clr.AddReference("System.Drawing")

from System.Windows.Forms import Application, Form
from System.Drawing import Size, Pen, Color, Font, FontStyle, Brushes
from System.Drawing.Drawing2D import DashStyle

class IForm(Form):
    def __init__(self):
        self.Text = 'RSPI signal viewer : ' + str(RSPCK_Kbps) + 'Kbps, ' + str(ns_per_dot) + 'ns/dot, ' + str(ns_per_grid) + 'ns/grid'
        self.Size = Size(750, 210)
        self.Yoffset = 10
        self.Yscale = 20
        self.Xoffset = 75
        self.Xscale = 1000.0 / TICK_MHz / ns_per_dot
    def OnPaint(self, event):
        self.g = event.Graphics
        self.DrawGrid()
        for i in range(len(ch)):
            self.DrawLabel(i, ch[i][0])
            self.DrawSignal(i, ch[i][1])
        self.g.Dispose()
    def DrawGrid(self):
        pen = Pen(Color.Black, 1)
        pen.DashStyle = DashStyle.Dot
        for i in range(int((self.Size.Height - self.Yoffset) / (self.Yscale * 2))):
            x1 = self.Xoffset
            x2 = self.Size.Width
            y = self.Yoffset + i * 2 * self.Yscale
            self.g.DrawLine(pen, x1, y, x2, y)
        for i in range(int((self.Size.Width - self.Xoffset) * ns_per_dot / ns_per_grid + 1)):
            x = self.Xoffset + i * ns_per_grid / ns_per_dot
            y1 = 0
            y2 = self.Size.Height
            self.g.DrawLine(pen, x, y1, x, y2)
        pen.Dispose()
    def DrawLabel(self, no, label):
        font = Font('MS UI Gothic', 12, FontStyle.Bold)
        x = 0
        y = self.Yoffset + ((no + 1) * 2 - 1) * self.Yscale
        self.g.DrawString(label, font, Brushes.Green, x, y)
        font.Dispose()
    def DrawSignal(self, no, signal):
        pen = Pen(Color.Blue, 2)
        for i in range(len(signal) - 1):
            x1 = self.Xoffset + signal[i + 0][0] * self.Xscale
            x2 = self.Xoffset + signal[i + 1][0] * self.Xscale
            y1 = self.Yoffset + ((no + 1) * 2 - signal[i + 0][1]) * self.Yscale
            y2 = self.Yoffset + ((no + 1) * 2 - signal[i + 1][1]) * self.Yscale
            self.g.DrawLine(pen, x1, y1, x2, y1)
            self.g.DrawLine(pen, x2, y1, x2, y2)
        pen.Dispose()

RSPCK_Kbps = 1000
TICK_MHz = 120
ch = {}
ch[0] = [ 'SSL0', [ [0, 1], [415, 0], [1779, 1], [1925, 1] ] ]
ch[1] = [ 'RSPCK', [ [0, 0], [51, 0], [483, 1], [543, 0], [603, 1], [667, 0], [725, 1], [789, 0], [843, 1], [903, 0], [963, 1], [1023, 0], [1083, 1], [1143, 0], [1203, 1], [1263, 0], [1323, 1], [1387, 0], [1925, 0] ] ]
ch[2] = [ 'MOSI', [ [0, 0], [103, 0], [640, 1], [762, 0], [1360, 1], [1816, 0], [1925, 0] ] ]
ch[3] = [ 'MISO', [ [0, 1], [167, 1], [1925, 1] ] ]

ns_per_dot = 25
ns_per_grid = 1000
Application.Run(IForm())



 

Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page