2018.07.14

MPLAB X IDE V4.20でのコンパイルテスト。

今回のPICはpic16F18326 です。

先ずはLチカ

#include <xc.h>
#include <plib\delays.h>
#define _XTAL_FREQ 8000000

void DelayMs(int dlyms){
while(dlyms--) __delay_ms(1);
} } void main(void) {
int LEDflag=0;

ANSELA = 0b00000000;
ANSELC = 0b00000000;
TRISA = 0b00000000;
TRISC = 0b00000000;
PORTA =0;
PORTC =0;
DelayMs(1000);
while(1) {
if(0==LEDflag){
LEDflag=1;
LATCbits.LATC3=1;//LED ON
}else
if(1 == LEDflag){
LEDflag=0;
LATCbits.LATC3=0;//LED OFF
}
DelayMs(500);
}
}

【初期状態、なにも設定なし】

クロックは8MHz

リブートの繰り返しになります。

PORTAの4と5はクロック入力なのでLEDのON/OFFはしません。

code configratorで設定する。

X IDEのTools/Embedded/MPLAB Code Configrator Open/Close

 

Code Configrator画面

とりあえず、clockとwdtの設定のみ。何か設定を変更したら必ずGenerateをする。

DeviceResourcesは完動するのか知らんが何かいじるとFilesにプログラムが追加される。

そのまま使うならmain.cにヘッダを#include "使いたいヘッダ"すれば良い。

[Interrupt Module] タブでは、割り込み設定したいピンアサインの指定ができるが

無条件で割り込みプログラムが追加されるので注意。使いたくなければコメントアウト。

MPLAB的にパーペキなコードが書かれるので、それを参考にカスタマイズするには便利だ。

問題は、使い方の説明が不十分。コードの説明が無いに等しい事。

人の書いたプログラムを理解するにも時間がかかる。

細かい事が分からないと使えないし、動かない場合の対応にも時間がかかる。

そんなんだったら今まで動いたプログラム使う。

MPLABは使う人の立場になって、コードをブロツク毎に分けて正確なことを分かりやすく書いたコメントを記述するのは無理。

わかんなかったら聞け。ってことだろう。

そんなんだったら今まで動いたプログラム。。。

今回はpic16F18326でAQM0802aに文字を表示する。

本当のことを書くと結局、先人たちの苦労の賜物なのだけど、そこはサラッと流して。。。(ぉぃ

#include <xc.h>
#include <stdio.h>
#include <plib\delays.h>
#include <plib\i2c.h>
#include <pic16f18326.h>
#define _XTAL_FREQ 8000000 /* コンフィグレーション設定 */ // CONFIG1 #pragma config FEXTOSC = OFF // FEXTOSC External Oscillator mode Selection bits (Oscillator not enabled) #pragma config RSTOSC = HFINT32 // Power-up default value for COSC bits (HFINTOSC with 2x PLL (32MHz)) #pragma config CLKOUTEN = OFF // Clock Out Enable bit (CLKOUT function is disabled; I/O or oscillator function on OSC2) #pragma config CSWEN = ON // Clock Switch Enable bit (Writing to NOSC and NDIV is allowed) //#pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is disabled) // CONFIG2 //#pragma config MCLRE = OFF // Master Clear Enable bit (MCLR/VPP pin function is digital input; MCLR internally disabled; Weak pull-up under control of port pin's WPU control bit.) //#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled) #pragma config WDTE = OFF // Watchdog Timer Enable bits (WDT disabled; SWDTEN is ignored) #pragma config LPBOREN = OFF // Low-power BOR enable bit (ULPBOR disabled) //#pragma config BOREN = OFF // Brown-out Reset Enable bits (Brown-out Reset disabled) //#pragma config BORV = HIGH // Brown-out Reset Voltage selection bit (Brown-out voltage (Vbor) set to 2.7V) //#pragma config PPS1WAY = OFF // PPSLOCK bit One-Way Set Enable bit (The PPSLOCK bit can be set and cleared repeatedly (subject to the unlock sequence)) //#pragma config STVREN = OFF // Stack Overflow/Underflow Reset Enable bit (Stack Overflow or Underflow will not cause a Reset) #pragma config DEBUG = OFF // Debugger enable bit (Background debugger disabled) // CONFIG3 #pragma config WRT = OFF // User NVM self-write protection bits (Write protection off) //#pragma config LVP = OFF // Low Voltage Programming Enable bit (High Voltage on MCLR/VPP must be used for programming.) // CONFIG4 #pragma config CP = OFF // User NVM Program Memory Code Protection bit (User NVM code protection disabled) #pragma config CPD = OFF // Data NVM Memory Code Protection bit (Data NVM code protection disabled) #define LCD_ADDR 0x7C void DelayMs(int dlyms){ while(dlyms--) __delay_ms(1); } // 約27us程待つ void Wait27us(void) { __delay_us(26) ; } int AckCheck; //MCC Generated Filesの //interrupt_manager.cから //割込み時、呼ばれるようにしてあります。 void InterI2C( void )
{
if (SSP1IF == 1) { // SSP(I2C)割り込み発生か?
AckCheck =0;
SSP1IF = 0 ; // フラグクリア
}
if (BCL1IF == 1) { // MSSP(I2C)バス衝突割り込み発生か?
BCL1IF = 0 ; // 今回はフラグのみクリアする(無処理)
}
}
void I2C_Master_Wait() { while(SSP1CON2bits.SEN || SSP1CON2bits.PEN || SSP1CON2bits.RSEN || SSP1CON2bits.ACKEN || SSP1STATbits.R_nW); } void InitI2C_Master() { SSP1CON1 = 0x38; //マスターモード イネーブル SSP1ADD = 0x4f; //ボーレート100KHZ I2C_Master_Wait(); } void I2C_Master_Start() { PIR1bits.SSP1IF = 0; I2C_Master_Wait(); SSP1CON1bits.WCOL = 0; //衝突フラグクリア SSP1CON2bits.SEN = 1; //START出力 while(SSP1CON2bits.SEN); //START送信処理待ち SEN=0 PIR1bits.SSP1IF = 0; } void I2C_Master_RepeatedStart() { PIR1bits.SSP1IF = 0; SSP1CON2bits.RSEN = 1; while(SSP1CON2bits.RSEN); // RSEN=0待ち } void I2C_Master_Stop() { PIR1bits.SSP1IF = 0; SSP1CON2bits.PEN = 1; while(SSP1CON2bits.PEN); PIR1bits.SSP1IF = 0; I2C_Master_Wait(); } void I2C_Master_Write(unsigned d) { PIR1bits.SSP1IF = 0; SSP1BUF = d; while(SSP1STATbits.BF); while(SSP1CON2bits.ACKSTAT); I2C_Master_Wait(); } /* マスターモード 1バイト受信 * 引数Ans 0 = ACKを返す(連続受信) * 1 = NACK,ACKを返さない(最終受信) */ unsigned short I2C_Master_Read(unsigned char Ans) { unsigned char Rdata; PIR1bits.SSP1IF = 0; SSP1CON2bits.ACKDT = Ans; //返信ACK値セット SSP1CON2bits.RCEN = 1; //マスターモード受信許可 while(!SSP1STATbits.BF); //BF=1で受信完了 PIR1bits.SSP1IF = 0; Rdata = SSP1BUF; SSP1CON2bits.ACKEN = 1; //スレーブにACK返送 while(!SSP1CON2bits.ACKEN); //ACKシーケンス終了待ち SSP1CON1bits.SSPOV = 0; //受信OFフラグクリア PIR1bits.SSP1IF = 0; I2C_Master_Wait(); return(Rdata); } void Lcd_cmd(unsigned char cmd){ I2C_Master_Start(); I2C_Master_Write(LCD_ADDR); I2C_Master_Write(0x80); I2C_Master_Write(cmd); I2C_Master_Stop(); Wait27us() ; } void Lcd_init(){ Lcd_cmd(0x38); // function set 8ビットモード2行 Lcd_cmd(0x39); // function set 拡張コマンドを有効にする Lcd_cmd(0x14); // バイアスの 選択と内部発振周波数の調整 Lcd_cmd(0x70); // Contrast set コントラスト調整データ(下位4ビット) Lcd_cmd(0x56); // Contrast set 昇圧回路有効、コントラスト調整データ(上位2ビット) Lcd_cmd(0x6C); // Follower control フォロア回路をONし増幅率の調整を行う DelayMs(200); // 電力が安定するまで待つ Lcd_cmd(0x38); // function set 拡張コマンドを無効にする Lcd_cmd(0x0c); // display control 画面表示はON・カーソル表示はOFF Lcd_cmd(0x01); // Clear Display 画面消去 DelayMs(1); } void LCD_Putc(const char s) { I2C_Master_Start(); I2C_Master_Write(LCD_ADDR); I2C_Master_Write(0b01000000); I2C_Master_Write(s); I2C_Master_Stop(); Wait27us() ; } void LCD_Puts(const char *s) { I2C_Master_Start(); I2C_Master_Write(LCD_ADDR); I2C_Master_Write(0b01000000); while(*s){ I2C_Master_Write(*s++); Wait27us() ; } I2C_Master_Stop(); Wait27us() ; } void LCD_SetCursor(int col, int row) { int row_offsets[] = { 0x00, 0x40 } ; Lcd_cmd(0x80 | (col + row_offsets[row])) ; // Set DDRAM Adddress : 00H-27H,40H-67H } void main(void) { int lpcnt=0;
int i=0;
int p=0; int LEDflag=0; ANSELA = 0b00000000; ANSELC = 0b00000000; TRISA = 0b00000000; TRISC = 0b00000011; PORTA =0; PORTC =0; DelayMs(1000); SSP1CLKPPS = 0x10; // RC0の入力先はSCL SSP1DATPPS = 0x11; // RC1の入力先はSDA RC0PPS = 0x18; // RC0の出力源はSCL RC1PPS = 0x19; // RC1の出力源はSDA InitI2C_Master(); DelayMs(100); Lcd_init(); DelayMs(10); LCD_SetCursor(0,0); LCD_Puts("Hellow"); LCD_SetCursor(0,1); LCD_Puts("yeah!"); DelayMs(3000); while(1) { if(0==LEDflag){ LEDflag=1; LATCbits.LATC3=1;//LED ON }else if(1 == LEDflag){ LEDflag=0; LATCbits.LATC3=0;//LED OFF } if(0==(i++ % 10)){
sprintf(byMsg,"%d",++lpcnt);
LCD_Clear();
LCD_Puts(byMsg);
}
DelayMs(500); } }

コンパイルはMPLAB X IDE v4.2

Code Configratorでコンフィグ一部設定あり。

whileループ10回ごとにカウンターを表示するプログラムです。

AQM0802aのVDDとリセットは半田盛ってショート。

裏面の10K抵抗2か所も半田盛ってショートしてあります。

電圧は3.3vです。

 

最初に困った事をいくつか。。。

MPLABのConfigが間違っているのか、

i2cのプログラムがそもそも動作しないのか、

LCDの問題なのか、

かなりの時間悩みました。

まずはLチカが正しく動くこと。
クロックの設定通りチカチカしてるか確認。
MCLRは無効にしてあります。

しかし、LCDは無応答。
抵抗をONにしたから?
リセットをプルアップしたままだから?
コントラスト低すぎて見えない?
ま、まさかの初期不良?

それよりも、i2cのプログラムはきちんと動いている?
これを確認するために以前作成したpic18f14k50のi2cプログラムでAQM0802aを駆動してみたらば、、、

動作しないのね。。。

変よ。

最初は何か表示されたのよ。。。


で、たどり着いたのが電圧の低下。実はこのとき電池でやってたの。(げしっ

んで、電源をACアダプタに変えて、5V->3.3v(TA48033S)降圧して再確認。LCDは問題なし。

結局pic16f18326用のi2cプログラムは他所の方から参考に借用して改変してパクっ。(げしっ、げしっ、、、どげしっっっ

先輩方、ありがとうございます。

LCD便利ゲス。

いままで脳内デバッグだったのが、見えるようになって、ゴイス!

というわけで、追加で2,3個買ってきます。

 

2018.07.16

はい。買ってきました。8x2を1個と16x2を2つばかし。
#何に使おうか。。。

今回はRS232cで通信でも、と思いましたが、作りかけのプロジェクトを手直しで始めたのが運の尽き。

MPLAb IDE のPin Marnagerを使ってて判ったのが鍵マーク。これinputでもoutputでも使う設定にするとロックになるのね。
outputがopen inputがクローズ なのかとばかり思い違いしてて、ドーモ思った通りにならないのでした。

なので最初から作り直しました。

CodeConfigrator,DeviceResources,Pin Managerとやったら[Generate]して、出来たmcc.hをインクルードし

main()の中で
SYSTEM_Initialize();
INTERRUPT_GlobalInterruptEnable();
INTERRUPT_PeripheralInterruptEnable();
この3つを実行すればok。

でも、用意されたストラクチャが気に入らないというか、使い辛いが我慢するのだ。

なにしろ、Ganarateするときにコードがオリジナルじゃないと

置いてかれるので、Genarateコードはいぢらない事が肝。

最初はMCC,ピンアサイン、クロック、通信設定など、変える必要が多いので変えたらその都度

[Genarate]>コンパイル>書き込み>テストの繰り返しになるんで。。。私だけ?

Lチカしないのも、ピンアサインでoutputを設定していなかったから。

してあれば、ANSELxもTRISxもOSCCONも不要。てか、書いちゃダメです。どっちつかずの動作になって

バグります。

とりあえず、CodeConfigratorの立ち上がりを先にしてアップデートはバックグランドでやってくれないかなぁ。。。

 

#じゃぁ、最後に毒吐いて終わりにします。

EUSARTのライブラリで思ったんだけど

EUSART_Read(void)の中で

while(0 == eusartRxCount)
{
}

って、バカなの?

受信するまで戻らない。

TimeOutって考えはないんだ。。。

まぁ、いいけど。。。最後に手をいれとくから。。。

あと、EUSART_Write(uint8_t txData)って1バイト送信だけしかないの?

普通Length指定して書きませんか?
まぁ、いいけど。。。最後に手をいれとくから。。。

だからMicrochip Technologyとか完全に名前負けしてるでしょ。
やってる事が中途半端なのね。
コードは参考になるんだけど。
継承やvirtual関数としてユーザーに開放した方が良いかも。
それでオーバーヘッドが増えるのは困るが、vsのc#みたく
IDEがしっかりしてて。。。こっちもクソだけど。。。もういいや。

ということで。ではまた~

えっ、コード?

Genarateコードのヘッダにサンプルが書いてあります。

書くのも恥ずかしい。。。

先に書いてある14日のコードは書き直すのがメンドイし。。。(げし

だってi2cのストラクチャが(クソ)いや、使い辛くて。。。

ではでは。

 

MCLRをEnableにする。

PDFによるとMCLRのプルアップレジスタはWPUA3なので、MPLAB X IDEではPin ModeタブにあるRegister:WPUA/WPUA3をEnabledにする。

 

I2Cのクロック設定はMSSP1のI2CClock値を指定する。

Baud Rate Generator Value 0x03 <= 0x3の値をいろいろ変えてみる。

AQM802AはST7032のコントローラーでドライブ。
クロックスピードがいくつなんだかわからんが、MSSP1の設定では250Kが限界。
とりあえず、動作する。

 

mccのコードジェネレータで作った関数を使ってAQM0802aに表示してみるテスト
(正常動作を確認済み)

#include "mcc_generated_files/mcc.h"

#define MAX_i2cbufsize 32
//i2c送信用データレングス最大値

//I2C1_MasterWrite()で送信する場合、内部でアドレスをLSB<<1としているため
//AQM0802aの取説にある0x7c>>1のアドレス値を渡す。
uint8_t LCD_ADDR=0x3E;

void DelayMs(int dlyms){
    while(dlyms--) __delay_ms(1);
}
// 約27us程待つ
void Wait27us(void)
{
     __delay_us(26) ;
}
uint8_t gBuffer[MAX_i2cbufsize];
void Lcd_cmd(unsigned char cmd){
    I2C1_MESSAGE_STATUS status = I2C1_MESSAGE_PENDING;
    int p=0;
    gBuffer[p++]=0x80;
    gBuffer[p++]=cmd;
    I2C1_MasterWrite(gBuffer,p,LCD_ADDR,&status);
    while(status == I2C1_MESSAGE_PENDING);
    Wait27us() ;
}

void Lcd_init(){
     Lcd_cmd(0x38);     // function set     8ビットモード2行
     Lcd_cmd(0x39);     // function set     拡張コマンドを有効にする
     Lcd_cmd(0x14);     // バイアスの       選択と内部発振周波数の調整
     Lcd_cmd(0x70);     // Contrast set     コントラスト調整データ(下位4ビット)
     Lcd_cmd(0x56);     // Contrast set     昇圧回路有効、コントラスト調整データ(上位2ビット)
     Lcd_cmd(0x6C);     // Follower control フォロア回路をONし増幅率の調整を行う
     DelayMs(200);     //                  電力が安定するまで待つ
     Lcd_cmd(0x38);     // function set     拡張コマンドを無効にする
     Lcd_cmd(0x0c);     // display control  画面表示はON・カーソル表示はOFF
     Lcd_cmd(0x01);     // Clear Display    画面消去
     DelayMs(1);
}

void LCD_Putc(const char s)
{
    I2C1_MESSAGE_STATUS status = I2C1_MESSAGE_PENDING;
    int p=0;
    gBuffer[p++]=0b01000000;
    gBuffer[p++]=s;
    I2C1_MasterWrite(gBuffer,p,LCD_ADDR,&status);
    while(status == I2C1_MESSAGE_PENDING);
    Wait27us() ;
}

void LCD_Puts(const char *s)
{
    I2C1_MESSAGE_STATUS status = I2C1_MESSAGE_PENDING;
    int p=0;
    gBuffer[p++]=0b01000000;
    while(*s){
        gBuffer[p++]=*s++;
        if(p==MAX_i2cbufsize){
break; } } I2C1_MasterWrite(gBuffer,p,LCD_ADDR,&status); while(status == I2C1_MESSAGE_PENDING); Wait27us() ; } void LCD_SetCursor(int col, int row) { int row_offsets[] = { 0x00, 0x40 } ; Lcd_cmd(0x80 | (col + row_offsets[row])) ; // Set DDRAM Adddress : 00H-27H,40H-67H } void LCD_Clear(void) { Lcd_cmd(0x01) ; // Clear Display : 画面全体に20Hのスペースで表示、カーソルはcol=0,row=0に移動 __delay_us(1100) ; // LCDが処理(1.08ms)するのを待ちます Lcd_cmd(0x02) ; // Return Home : 画面を初期ポジションに戻す __delay_us(1100) ; // LCDが処理(1.08ms)するのを待ちます } void main(void) { // initialize the device SYSTEM_Initialize(); //I2C1_Initialize(); SYSTEM_Initialize()で設定済 // Enable the Global Interrupts INTERRUPT_GlobalInterruptEnable(); // Enable the Peripheral Interrupts INTERRUPT_PeripheralInterruptEnable(); DelayMs(1000); Lcd_init(); LCD_SetCursor(0,0); LCD_Puts("Hellow"); LCD_SetCursor(0,1); LCD_Puts("yeah!"); while (1); } 2020/11/03 もう2年か。。。 MPLAB XIDE 5.45 XC2.31 MCC V4 でのI2C LCD表示(AQM0802a) 今回はpic18f14k22を使いました。 MCC にて MSSPの設定 で、MCCのGenalateで出来るサンプルがありますのでこれをLCD用に流用します。 i2c_master_example.cのI2C_WriteNBytes();でございます。 今回は、2年前のpic16F18326が送信しているI2Cのコマンドをロジアナで読み取ったものをそのまま 送っているだけなのでコマンドの意味は噛み砕いておりません。なので関数名も適当です。すみません。 詳細はLCDの取説やらコマンドを調べてみてください。 #include "mcc_generated_files/mcc.h"
#include "mcc_generated_files/examples/i2c_master_example.h"
i2c_address_t address=0x3e;//7c=0x3e<<1;
void DelayMs(int ms)
{
while(0<ms--){
__delay_ms(1);
}
}
//クロック4M以上だと必須 void Wait27us(void)
{
__delay_us(26) ;
}
void Lcd_cmd(uint8_t cmd){ uint8_t data[2]; data[0]=(uint8_t)0x80; data[1]=(uint8_t)cmd; I2C_WriteNBytes(address, data,2); Wait27us() ;
} void Lcd_init(){ Lcd_cmd(0x38); // function set 8ビットモード2行 Lcd_cmd(0x39); // function set 拡張コマンドを有効にする Lcd_cmd(0x14);//14 // バイアスの 選択と内部発振周波数の調整 Lcd_cmd(0x70); // Contrast set コントラスト調整データ(下位4ビット) Lcd_cmd(0x56); // Contrast set 昇圧回路有効、コントラスト調整データ(上位2ビット) Lcd_cmd(0x6C); // Follower control フォロア回路をONし増幅率の調整を行う DelayMs(400); // 電力が安定するまで待つ Lcd_cmd(0x38); // function set 拡張コマンドを無効にする Lcd_cmd(0x0c); // display control 画面表示はON・カーソル表示はOFF Lcd_cmd(0x01); // Clear Display 画面消去 DelayMs(1); } void LCD_Putc(const char s) { uint8_t data[2]; data[0]=0x40; data[1]=s; I2C_WriteNBytes(address, data,2); Wait27us() ;
} void LCD_Puts(const char *s) { int len=1; data[0]=0x40; while(*s){ data[len++]=*s++; } I2C_WriteNBytes(address, data,len); Wait27us() ;
} void lcd_pos() { data[0]=0x80; data[1]=0x80; I2C_WriteNBytes(address, data,2); Wait27us() ;
} void main(void) { unsigned char pp=0; char buff[20]; SYSTEM_Initialize(); INTERRUPT_GlobalInterruptEnable(); INTERRUPT_PeripheralInterruptEnable(); Lcd_init(); while (1) { DelayMs(100); LATBbits.LATB7=1; DelayMs(100); LATBbits.LATB7=0; lcd_pos(); sprintf(buff,"%d",pp++); LCD_Puts(buff); } }

ええと、ロケーション設定やら画面クリアやら便利な関数がありませんが、そこはほかの人をあたってくりよぉ。。。俺もクソだ。。。

だから他人のことなど言えたもんじゃないんですが、やっぱり開発元ですからねぇ。。。それで金もらって食ってるんですよねぇ???

なんというかMPLABは コンパイラの下位互換を無視する暴挙。

ライブラリも使いかたなど説明なし。ただ作ったというクソっぷり。

初めて使う人はたぶん判らない。もともとI2CのLCDが動作(表示)しない原因がいろいろありすぎて困っちゃう。

しかし無けりゃ動かないので仕方ありません。まぁ、ソース付なので改造は自己責任で出来なくないんですが

もうちょっと使い方、エラーリカバリ、LCD、SDメモリ、他の機器との通信などケースバイケースのサンプルがあればgoodなんですが。。。

まぁ、だから動いた時はうれしいんですけど。。。狙ってます?

 

ロジアナ(LA1010)のログ

接続は0番SDA 1番SCL GND

1MSa 500KHz 5V TTL
Time [s],Packet ID,Address,Data,Read/Write,ACK/NAK

立ち上がり中

0.058636000,,|(0x7C),,Write,NAK
0.059510000,,|(0x7C),,Write,NAK
0.060386000,,|(0x7C),,Write,NAK
0.061260000,,|(0x7C),,Write,NAK
0.062134000,,|(0x7C),,Write,NAK
0.063010000,,|(0x7C),,Write,NAK

初期化コマンド

0.084598000,12,|(0x7C),(128)(0x80),Write,ACK
0.084818000,12,|(0x7C),8(0x38),Write,ACK
0.085914000,14,|(0x7C),(128)(0x80),Write,ACK
0.086134000,14,|(0x7C),9(0x39),Write,ACK
0.087230000,16,|(0x7C),(128)(0x80),Write,ACK
0.087450000,16,|(0x7C),DC4(0x14),Write,ACK
0.088546000,18,|(0x7C),(128)(0x80),Write,ACK
0.088766000,18,|(0x7C),p(0x70),Write,ACK
0.089862000,20,|(0x7C),(128)(0x80),Write,ACK
0.090082000,20,|(0x7C),V(0x56),Write,ACK
0.091178000,22,|(0x7C),(128)(0x80),Write,ACK
0.091400000,22,|(0x7C),l(0x6C),Write,ACK
0.500970000,24,|(0x7C),(128)(0x80),Write,ACK
0.501192000,24,|(0x7C),8(0x38),Write,ACK
0.502286000,26,|(0x7C),(128)(0x80),Write,ACK
0.502508000,26,|(0x7C),FF (0x0C),Write,ACK
0.503602000,28,|(0x7C),(128)(0x80),Write,ACK
0.503822000,28,|(0x7C),SOH(0x01),Write,ACK

0を表示

0.710466000,30,|(0x7C),(128)(0x80),Write,ACK
0.710686000,30,|(0x7C),(128)(0x80),Write,ACK
0.719158000,32,|(0x7C),@(0x40),Write,ACK
0.719378000,32,|(0x7C),0(0x30),Write,ACK

1を表示

0.924986000,34,|(0x7C),(128)(0x80),Write,ACK
0.925206000,34,|(0x7C),(128)(0x80),Write,ACK
0.933656000,36,|(0x7C),@(0x40),Write,ACK
0.933878000,36,|(0x7C),1(0x31),Write,ACK

2を表示

1.139488000,38,|(0x7C),(128)(0x80),Write,ACK
1.139708000,38,|(0x7C),(128)(0x80),Write,ACK
1.148158000,40,|(0x7C),@(0x40),Write,ACK
1.148380000,40,|(0x7C),2(0x32),Write,ACK

 

SEO [PR] !uO z[y[WJ Cu