'************************************************************************ ' microsoft Visual Studio Express 2013 windows Desktop ' SWR & POWER 表示ソフト '              後ろにR8C/25のマイコン側のソースがあります。 '************************************************************************ Public Class Form1 Dim comand As Integer Dim p_data_ As String Dim r_data_ As String Dim dat As Byte() Private Sub Form1_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed SerialPort1.Close() End Sub   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load TacoMeterClass1.FreamColor = Color.Silver 'TacoMeterClassはベクターにあります。 TacoMeterClass1.PanelColor = Color.Black 'http://www.vector.co.jp/soft/winnt/prog/se477114.html TacoMeterClass1.NomalTextColor = Color.White TacoMeterClass1.AlarmTextColor = Color.Red TacoMeterClass1.NeedleColor = Color.Red TacoMeterClass1.UnitName = "W" TacoMeterClass1.MeterName = "POWER" TacoMeterClass1.UnitDps = 0 TacoMeterClass1.MaxValue = 120 TacoMeterClass1.MinValue = 0 TacoMeterClass1.OverAlarmValue = 100 TacoMeterClass1.Graduations = 12 TacoMeterClass1.Division = 10 TacoMeterClass1.StartAngle = 20 TacoMeterClass1.EndAngle = 270 TacoMeterClass1.MeterValue = 0 TacoMeterClass1.Enabled = True ' シリアルポートのオープン SerialPort1.PortName = "COM12" ' シリアルポートの通信速度指定 SerialPort1.BaudRate = 115200 ' シリアルポートのパリティ指定 SerialPort1.Parity = IO.Ports.Parity.None ' シリアルポートのビット数指定 SerialPort1.DataBits = 8 ' シリアルポートのストップビット指定 SerialPort1.StopBits = IO.Ports.StopBits.One ' シリアルポートのオープン SerialPort1.Open() comand = 8 ' コマンド初期値 Button1.Text = comand dat = System.Text.Encoding.GetEncoding("SHIFT-JIS").GetBytes("3") Timer1.Interval = 10 Timer1.Enabled = True End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click ' シリアルポートにデータ送信 dat = System.Text.Encoding.GetEncoding("SHIFT-JIS").GetBytes(comand) SerialPort1.Write(dat, 0, dat.GetLength(0)) End Sub Private Sub SerialPort1_DataReceived(sender As Object, e As IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived ' シリアルポートからデータ受信 p_data_ = SerialPort1.ReadLine() r_data_ = SerialPort1.ReadLine() End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click comand = comand + 5 If comand = 13 Then comand = 3 Button1.Text = comand ' test(66.0) ' System.Threading.Thread.Sleep(5000) ' test(33.0) End Sub Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick Timer1.Enabled = False TextBox3.Text = "[" & p_data_ & "]{" & r_data_ & "}" Dim cnv_data_f_PO As Double Dim cnv_data_f_RL As Double Dim POWER_dBm As Double Dim POWER_W As Double Dim RL_dB As Double Dim VSWR As Double Dim LGP_ As Double Dim P_ As Double ' On Error Resume Next cnv_data_f_PO = p_data_ cnv_data_f_RL = r_data_ ' Err.Clear() 'SWR & POWER ' POWER_dBm = (0.011723329 * cnv_data_f_PO) + 4.49 POWER_dBm = (0.010526315 * cnv_data_f_PO) + 8.9368 POWER_W = (Math.Pow(10, POWER_dBm / 10)) / 1000 ' POWER_DATA = POWER_W RL_dB = (0.009025 * cnv_data_f_RL) - 1.59 LGP_ = -(RL_dB / 20) P_ = Math.Pow(10, LGP_) VSWR = (1 + P_) / (1 - P_) ' VSWR_DATA = VSWR TextBox1.Text = POWER_W.ToString("F1") TextBox2.Text = VSWR.ToString("F1") TacoMeterClass1.MeterValue = POWER_W Timer1.Enabled = True dat = System.Text.Encoding.GetEncoding("SHIFT-JIS").GetBytes("3") SerialPort1.Write(dat, 0, dat.GetLength(0)) ' Exit Sub End Sub Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click If Button3.Text = "MAX120W" Then TacoMeterClass1.MaxValue = 120 TacoMeterClass1.MinValue = 0 TacoMeterClass1.OverAlarmValue = 10 TacoMeterClass1.Graduations = 12 TacoMeterClass1.Division = 10 TacoMeterClass1.OverAlarmValue = 100 Button3.Text = "MAX12W" ElseIf Button3.Text = "MAX60W" Then TacoMeterClass1.MaxValue = 60 TacoMeterClass1.MinValue = 0 TacoMeterClass1.OverAlarmValue = 100 TacoMeterClass1.Graduations = 6 TacoMeterClass1.Division = 10 Button3.Text = "MAX120W" Else TacoMeterClass1.MaxValue = 12 TacoMeterClass1.MinValue = 0 TacoMeterClass1.OverAlarmValue = 100 TacoMeterClass1.Graduations = 12 TacoMeterClass1.Division = 10 Button3.Text = "MAX60W" End If End Sub Private Sub move_meter(at As Integer) Dim i As Integer If (at - TacoMeterClass1.MeterValue) > (TacoMeterClass1.MaxValue / 3) And (at > TacoMeterClass1.MeterValue) Then i = TacoMeterClass1.MeterValue + at / 3 Do Until i > at TacoMeterClass1.MeterValue = i i = i + (at / 3) Loop Else TacoMeterClass1.MeterValue = at End If End Sub End Class '************************************************************************ '   R8C/25のマイコン側のソース  '        AD変換してUARTより送信 パソコンより0x33がきたら送信       '************************************************************************ //============================================================================ // R8C/25 I2C液晶,ADC,UART,AD9833-2CH 制御プログラム // 2015.09.22 Copyright narichan //============================================================================ #include #include "sfr_r825.h" // R8C/25 SFRの定義ファイル == //====================================== // 定数 //====================================== //======================================== // プロトタイプ // tsprintfはhttp://hp.vector.co.jp/authors/VA007110/technicalworkshop/sprintf/ // intが32ビットでないのでは手直ししています。 //======================================== void init( void ); void Init_UART(void); void Send_UART(char); void Rec_UART(char *); void Send_UART_s(char *); void Init_ADC(void); void Get_ADC(unsigned int *); void wait(void); int tsprintf(char* ,char* , ...); int vtsprintf(char* buff,char* fmt,va_list arg); static int tsprintf_string(char* ,char* ); static int tsprintf_char(int ,char* ); static int tsprintf_decimal(signed long,char* ,int ,int ); static int tsprintf_hexadecimal(unsigned long ,char* ,int ,int ,int ); //======================================== // 変数 //======================================== unsigned int UART_DATA; //======================================================================== void main( void ) { unsigned int i,i1; unsigned int ad_data; unsigned int cnv_data; float ad_data_f; float cnv_data_f; float cnv_data_f_PO; float cnv_data_f_RL; float dds_data_f; unsigned long int dds_DAT; unsigned int dds_LSB; unsigned int dds_MSB; unsigned char msg_line[10]; unsigned char msg_line_1[10]; unsigned char c_data; float POWER_dBm; float POWER_W; float RL_dB; float VSWR; float LGP_; float P_; unsigned int POWER_DATA; unsigned int VSWR_DATA; init(); // 初期化 Init_UART(); Init_ADC(); asm("ldipl #2") ; //IPLを設定する(0〜7) ※注)プロセスの割り込み優先レベル > IPL なら割り込みが発生する asm(" fset I "); //enable Intrupt(Iフラグ) // ============================== // Program main // ============================== // init Message UART_DATA = 0x33; // Send_UART_s("R8C/25 Connected OK> "); wait(); while( 1 ){ while( UART_DATA == 0x33 ){   //POW-Vの処理 ch2 = 0; // ch1 = 0; // ch0 = 0; // AN0指定 Get_ADC(&ad_data); // アナログ値取り込み ad_data_f = ad_data ; // フロート化 cnv_data_f = ad_data_f / (float)255 * (float)5000; //電圧に変換(REF=5000mV) cnv_data = (unsigned int)cnv_data_f; tsprintf(msg_line,"%04u\n", cnv_data ); Send_UART_s(msg_line); // UART Send ch2 = 0; // ch1 = 0; // ch0 = 1; // AN1指定 Get_ADC(&ad_data); // アナログ値取り込み ad_data_f = ad_data ; // フロート化 cnv_data_f = ad_data_f / (float)255 * (float)5000; //電圧に変換(REF=5000mV) cnv_data = (unsigned int)cnv_data_f; tsprintf(msg_line,"%04u\n", cnv_data ); Send_UART_s(msg_line); // UART Send UART_DATA = 0x39; } } } //======================================================================== void init( void ) { int i; prc0 = 1; // プロテクト解除   cm04 = 1; // XCIN,XCOUT使用   cm06 = 0; // cm16,cm17 有効   cm16 = 0; //   cm17 = 0; // 分周 なし cm13 = 1; // P4_6,P4_7をXIN-XOUT端子にする cm05 = 0; // XINクロック発振 for(i=0; i<50; i++ ); // 安定するまで少し待つ(約10ms) ocd2 = 0; // システムクロックをXINにする prc0 = 0; // プロテクトON } //======================================================================== //UART0 RCV 割り込み処理 //======================================================================== #pragma interrupt UART0_RCV(vect=18) void UART0_RCV( void ) { char error; error = u0rbh & 0xf0; // エラーデータ if (error == 0x00 ){ UART_DATA = u0rbl; } re_u0c1 = 1; // 受信可 } ///========================================================================================* // Function Init_ADC ADCの初期化 割り込み未使用 ///========================================================================================* void Init_ADC(void) { // ==================================== // ADCON0の設定 // ==================================== // md = 0; //単発モード ch2 = 0; // ch1 = 0; // ch0 = 0; // AN0指定 adgsel0 = 0; //AN8-AN11使用不可 adst = 0; //A/D変換停止 cks0 = 1; // cks1 = 0; // f2指定=10MHz   bits = 0; // 8bit mode vcut = 1; //VREF接続 // ==================================== // ADCON2の設定 // ==================================== // adcon2 = 0; smp = 1; //サンプル&ホールドあり } ///========================================================================================* // Function Get_ADC ADC読み取り ///========================================================================================* void Get_ADC(unsigned int *ad_data) {   while(adst!=0); adst = 1; // Start while(adst!=0); // Cehck *ad_data = ad ; // Copy } ///========================================================================================* // Function Send_UART_s  UART 文字列送信 ///========================================================================================* void Send_UART_s(char *put_string) { while(*put_string!=0x00){ Send_UART(*put_string); put_string++; } } ///========================================================================================* // Function Init_UART UART初期化 割り込み受信使用 ///========================================================================================* void Init_UART(void) { u0brg = 0x0A; //ビットレート(115200bps) smd0_u0mr = 1; // smd1_u0mr = 0; // smd2_u0mr = 1; //8ビット長   ckdir_u0mr = 0; // 外部クロック未使用 stps_u0mr = 0; //1ストップビット prye_u0mr = 0; //パリティなし clk0_u0c0 = 0; // clk1_u0c0 = 0; // f1 nch_u0c0 = 0; ckpol_u0c0 = 0; uform_u0c0 = 0; te_u0c1 = 1; // 送信可 re_u0c1 = 1; // 受信可 // ************************************ // UARTi割り込みの設定 // ************************************ s0ric = 0x0d; // 割り込み有りレベル6 } ///========================================================================================* // Function Send_UART UART 送信 ///========================================================================================* void Send_UART(char c_data) { while(ti_u0c1 != 1); // 送信バッファ空フラグ(0:UiTBにデータあり) u0tb = c_data; } ///========================================================================================* // Function Rec_UART UART受信 ///========================================================================================* void Rec_UART(char *c_data) { char error_f; char err; while (ri_u0c1 != 1) ; //受信完了フラグ(1:UiRBにデータあり) *c_data = u0rbl; // UARTi受信バッファレジスタ error_f = u0rbh & 0xf0; // エラーデータ } ///========================================================================================* // Function wait 待ち時間生成 ///========================================================================================* void wait(void) { unsigned int i,i1; for( i1=0 ; i1<500 ; i1++ ){ for( i=0 ; i<200 ; i++ ){ asm("NOP"); } } } ///========================================================================================* // END of File ///========================================================================================*