FT232RL USBシリアル変換モジュールを秋月で買いました。
 
これで、マイコンとPCの通信でもっと遊べる!!
 
 
【仕様は以下】
定番のFT232を使用したUSBシリアル変換モジュールです。
FT232RL・USBコネクタ搭載済み(基板は完成しています)
■通信速度:300bps~460kbps
■256バイト受信バッファ、128バイト送信バッファ内蔵
■電源はホストからUSBで供給されます。
■仮想COMポートによりCOMポートとして使用できます。
■RS232CではなくTTL(CMOS)レベルでの変換を行います。
 RS232CレベルはK-01798です。
■4本のデジタルI/O
■USBミニB端子(miniB)
■基板サイズ:34x19mm
取扱い説明書(マニュアル)
▼FTDIメーカーサイト(ドライバをダウンロードできます)
http://www.ftdichip.com/

【その他参考サイト】
パソコン(PC)と接続するパート1
 
(一部抜粋) ※一部文章改変あり
マイコンがパソコンとシリアル通信を行うにはマイコンのUSART機能を利用します。
 USART通信の電圧レベルは 0~3.3V/5V ですが、パソコンが利用するRS232Cの電圧レベルは±12V/±15V です、なので何らかの方法で電圧を変換しないとだめです。
 そこで、USART通信信号をUSB通信信号に変換してくれるIC(FT232RL)を利用します。
但し、この方法はパソコン側に”USB信号をRS232C信号に変換”するドライバソフトをインストール
する必要が有ります、これによりパソコン側のターミナルソフト等のアプリソフトからは仮想COMポート
とし利用可能になります。
 
 
 
エンディアンの違うCPU同士かつ転送バイト数を違う設定(CPU-Aは2バイト、CPU-Bは1バイト)でシリアル通信をしたらバグったので、なんでバグったのか検討してみました。。。
 
以下のようになりました。。。 ※正しいのか不明(笑)
 
イメージ 1
 
 
 
FT232RL USBシリアル変換モジュール
を使って、PCとRX62Nマイコンを通信できるようにしました。
 
Windows用のターミナルエミュレーターには「Tera Term」を
使用しました。
 
 
<Cubesuite+で作成したプログラムメモ>
#include "iodefine.h"
 
#define DataSize 10
void main(void);
int wa;
char Txdata[DataSize]="StartUart:";
char Rxdata[DataSize];

int test;
int test2;
int Ok;
int i;
int count;
char Rflag;
char rState;
char Wflag;
char wtest;
char rtest;
short result[2];
char wait;
 
void main(void)
{
 wait = 1;
 R_PG_Clock_Set(); //クロックの設定
 wait += 1; //ブレーク用
 R_PG_ADC_12_Set_S12AD0(); //12ビットA/Dコンバータ(S12AD0)を設定
 wait += 1; //ブレーク用
 //ソフトウェアトリガによりAD変換開始
 R_PG_ADC_12_StartConversionSW_S12AD0();
 wait += 1; //ブレーク用

 R_PG_SCI_Set_C0(); //SCI0を設定 p178
 wait += 1; //ブレーク用
// SCI0.BRR = 0x9b;
// SCI0.SCMR = 0x72;
 R_PG_SCI_StartReceiving_C0(Rxdata, DataSize); //データを受信する
 wait += 1; //ブレーク用
// SCI0.SCR = 0x50;
// SCI0.SSR = 0xc0;
 
 R_PG_SCI_StartSending_C0(Txdata, DataSize); //DataSizeバイトのデータを送信 9615bps p177
 wait += 1; //ブレーク用
 while(1){
  if(wtest == 0){
   Wflag = R_PG_SCI_StartSending_C0(Txdata, DataSize); //DataSizeバイトのデータを送信 9615bps p177
   wtest = 1;
  }
  if(rtest == 0){
   Rflag = R_PG_SCI_StartReceiving_C0(Rxdata, DataSize); //データを受信する
   rtest = 1;
  }
 }
}

void Sci0TrFunc(void)
{
 Ok=1;
 rtest = 0;
}
void Sci0ReFunc(void)
{
 char i;
 wtest = 0;
 
 for(i=0;i<DataSize;i++) {
   Txdata[i] = Rxdata[i];
 }
}
 
void S12ad0IntFunc(void)
{
 R_PG_ADC_12_GetResult_S12AD0(result); //A/D変換結果の取得
 wtest = 0;
}
下記関数の仕様は以下となります。
関数の引数1で指定した「Moji」の行数①を調べ
①と引数2(列)の要素を出力する関数
 
Function GetTime(ByVal Moji As String, ByVal Retu As Integer)
  For myCnt = 1 To 65535 Step 1           'FOR文実行開始
    If Cells(myCnt, 1).Value = Moji Then  '文字列の検索
        Exit For                          'FORから抜ける
    End If
  Next myCnt
 
    '文字列を見つけた行と指定した列の要素をリターンする
    GetTime = Cells(myCnt, Retu).Value
End Function
 
以下のサイトを参考にさせていただきました
http://excel.onushi.com/function/search-line.htm
時刻・時間の比較(出社・退社・勤務時間計算)を毎月するのがめんどくさくなったので
エクセルで自動計算しようと考えていたら。。。
 
まさに、以下のサイトに記載されている内容ではないですか。。。
 
<エクセルで作成した計算方法>
 (セルB1)出勤時間:7:30
 (セルC1)退勤時間:17:00
 (セルD1)休憩:=IF(VALUE("17:00") >= C1,"1:00","1:15" )
  ※お昼休憩を1時間、17:00以降の休憩を15分と定義しました。
 (セルE1)勤務時間(時間単位):C1-B1-D1
  ※「8:00」といった時間表記になります。
 (セルF1)勤務時間(数値単位):(C1-B1-D1)*24
  ※セルの書式設定を"数値"等に変換が必要
  ※「8.0」といった数値表記になります
 
 
<その他補足>
時間を15分単位で切り捨てる場合は。。。
 A1セルに時刻が入力されていてB1セルに丸めを行なった時刻を表示する例)
 B1セルに「=FLOOR(A1,"0:15")」
 とするらしいです。
 
以下のサイトに記載されております。
 
 
これでわざわざ、電卓叩かなくてもよくなるぞぉ~!!
たぶん。。。
 
会社の中堅って難しい・・・
 
中堅クラスになると、自分だけでなく
 ・自分のチーム
 ・周りの状況
 ・課内の状況
を見ないといけないorz
 
どうすればよいのだろう(´Д` )
 
下記サイトにいろいろと書かれているので、明日?今日の仕事に役立てます
 
まずは、
「仕事の目的がわかる」
「段取りの方法」
これを布教させたいと思います。
 
 
 
「カフェるね」に記載されていたので、メモ程度に残しておきます。
 
 
私の考える方法はセクション指定かな(上記サイトに明記されております)。
でも、いまいちセクションでmotを分ける方法がわからない。。。
 
void *Call;
void main(void)
{
 //Umain();
 void (*po)()  = __sectop("USER");
 po();
}
 
イメージ 1
 
 
Peripheral Driver Generator を使用した時の高速シリアル関数で使用するセット値のメモ
 
 
★:操作が必要な部分
 
R_SCI_SendAll
 if ((configuration & PDL_SCI_MP_ID_CYCLE) != 0)
 R_SCI_SendData
  rpdl_SCI_ModifyTx_IER(channel, 0)
★   ICU.IER[IER_SCI0_TXI0].BIT.IEN_SCI0_TXI0 = 0;
  rpdl_SCI_ModifyTxEnd_IER(channel, 0)
★   ICU.IER[IER_SCI0_TEI0].BIT.IEN_SCI0_TEI0 = 0;
★  *TXI_pointer = 0x00u;
  switch (configuration & (
★   *TXI_DTCER_pointer = 0x00u;
★   trigger_used = true;
  if( (0 != ((*SMR_pointer) & (uint8_t)BIT_7)) ||
   (0 != ((*SCMR_pointer) & (uint8_t)BIT_0)))
   if ( (callback_function != PDL_NO_FUNC) || (trigger_used == true) )
    rpdl_SCI_ModifyTx_IER(channel, 1);
★     ICU.IER[IER_SCI0_TXI0].BIT.IEN_SCI0_TXI0 = 1;
★  rpdl_SCI_GlobalData(channel)->tx_string_pointer = tx_string_start;
★  rpdl_SCI_GlobalData(channel)->TX_End_callback_func = callback_function;
★  rpdl_SCI_GlobalData(channel)->tx_threshold = data_total;
★  rpdl_SCI_GlobalData(channel)->tx_counter = 0;
  
  if ( (callback_function != PDL_NO_FUNC) && (trigger_used == false) )
   
   else
★   rpdl_SCI_GlobalData(channel)->tx_using_irq = false;
★   rpdl_SCI_EnableTransmission(channel);
★    scr_mask = (BIT_7 | BIT_5);
★    scr_mask |= (uint8_t)(BIT_6 | BIT_4);
★    *SCR_pointer |= scr_mask;
   
R_SCI_ReceiveAll
 if ((configuration & PDL_SCI_MP_ID_CYCLE) != 0)
  
  else
   R_SCI_ReceiveData
    rpdl_SCI_ModifyRxIER(channel, 0)
★     ICU.IER[IER_SCI0_RXI0].BIT.IEN_SCI0_RXI0 = 0;
★     ICU.IER[IER_SCI0_ERI0].BIT.IEN_SCI0_ERI0 = 0;
    switch (configuration
★     *RXI_DTCER_pointer = 0x00u;
★     trigger_used = true;
    if ( (EndFunction != PDL_NO_FUNC) || (trigger_used == true) )
     rpdl_SCI_ModifyRxIER(channel, 1);
★      ICU.IER[IER_SCI0_RXI0].BIT.IEN_SCI0_RXI0 = 1;
★      ICU.IER[IER_SCI0_ERI0].BIT.IEN_SCI0_ERI0 = 1;
★    rpdl_SCI_GlobalData(channel)->rx_string_pointer = receive_buffer;
★    rpdl_SCI_GlobalData(channel)->RX_End_callback_func = EndFunction;
★    rpdl_SCI_GlobalData(channel)->RX_Error_callback_func = ErrorFunction;
★    rpdl_SCI_GlobalData(channel)->rx_string_start = receive_buffer;
★    rpdl_SCI_GlobalData(channel)->rx_threshold = threshold;
★    rpdl_SCI_GlobalData(channel)->rx_counter = 0;
    if ( (EndFunction != PDL_NO_FUNC) && (trigger_used == false) )
    
    else
★     rpdl_SCI_GlobalData(channel)->rx_using_irq = false;
     rpdl_SCI_EnableReception(channel);
★      *SSR_pointer = (BIT_7 | BIT_6);
★      *RXI_pointer = 0x00u;
★      *ERI_pointer = 0x00u;
      if ((*SCR_pointer & BIT_4) != 0x0u)
      else
★       *SCR_pointer |= (uint8_t)BIT_6;
★       *SCR_pointer |= (uint8_t)(BIT_6 | BIT_4);