[ 新規に投稿する ]

MPLAB X IDE C言語についてNo.00537
ねこ丸 さん 25/08/17 11:05 [ コメントを投稿する ]
  こんにちは
お世話に成っております

PICでプログラムを組んでおりますが、
C言語が直感的に判りにくく、
日本語表現に直して表示することは、難しいでしょうか。

それと、日本語で記述してやれば、英文のC言語に変換する事は、
可能でしょうか。

もし出来そうでしたら、お教え下さい。

それでは宜しくお願い致します
[ ]
RE:00537 MPLAB X IDE C言語についてNo.00538
ねこ丸 さん 25/08/17 16:38 [ コメントを投稿する ]
  >こんにちは
> ......
>それでは宜しくお願い致します

見て頂くには、例文が必要なので、一部を掲載します。


//==============================================
//メイン
//==============================================
void main(void)
{
 unsigned char off=0;   //波形テーブルオフセット
 unsigned char vol=0;   //音量
 unsigned char sts=0;   //状態(0=オフ、1=オン)
 unsigned short sts_ps=0;  //状態変更プリスケ
 unsigned char step_ps=0;  //増減変更プリスケ
 short dc;    //デューティサイクル


 //システム設定
 OSCCON=0b11110000;   //4xPLL有効、内部クロック8MHz、
      //システムクロックはCONFIGに従う
 while(!PLLR);    //4xPLL準備完了を待つ
 VREGPM1=1;    //ローパワーSleepモード有効
 OPTION_REG=0b11010010;   //WPUする、TMR0は命令サイクル、
      //プリスケはTMR0に1/8

 //デバグ信号設定
#ifdef SHDBS    //デバグ信号を出力するとき
 DBS_LAT=0;    //デバグ信号をLにしておく
 DBS_TRIS=0;    //デバグ信号を出力モード
#endif

 //デバグ情報設定
#ifdef SHDBG    //デバグ情報を出力するとき
 DBG_LAT=1;    //デバグ用TXをHにしておく
 DBG_TRIS=0;    //デバグ用TXを出力モード
#endif

 //PWM設定
 T2PR=254;    //PWM周期を設定する
 T2TMR=0;    //TMR2をクリアしておく
 T2CON=0b10000011;   //TMR2有効、プリスケ1/1、ポストスケ1/4
 CCPR1H=CCPR1L=0;   //PWMデューティを0にしておく
 CCP1CON=0b10011111;   //CCP1有効、ピン出力しない、
      // デューティ左詰め、PWMモード
 TMR2IF=0;    //PWM周期割込み表示をクリアしておく
 while(!TMR2IF);    //PWM周期の終了を待つ

 //CWG設定
 CWG1ISM=0b00000011;   //CWG1入力はCCP1
#if BTL==0    //シングル出力のとき
 CWG1STRA=1;    //CWG1Aを出力
 CWG1OEA=1;    //CWG1Aをピン出力する
 CWG1CON0=0b10000000;   //CWG1有効、ステアリングモード
#endif
#if BTL==1    //コンプリ出力のとき
 CWG1DBF=CWG1DBR=PWM_DEAD;  //デッドバンドを設定する
 CWG1OCON1=0b00000011;   //CWG1BとCWG1Aをピン出力する
 CWG1CON0=0b10000100;   //CWG1有効、ハーフブリッジモード
#endif
#if BTL==2    //ブリッジ出力のとき
 CWG1OCON1=0b00000011;   //CWG1BとCWG1Aをピン出力する
 CWG1CON0=0b10000001;   //CWG1有効、同期ステアリングモード
#endif
#if BTL==3    //ブレーキ出力のとき
 CWG1OCON1=0b00000011;   //CWG1BとCWG1Aをピン出力する
 CWG1OCON0=0b00110011;   //CWG1Bデータは1、CWG1Aデータは1、
      // CWG1Bを出力、CWG1Aを出力
 CWG1CON0=0b10000001;   //CWG1有効、同期ステアリングモード
 CWG1CON1=0b00000011;   //CWG1BとCWG1Aは反転出力
#endif

 //PWMポート設定
 APFCON=0b01100000;   //CWGAはRA5、CWGBはRA4に割当てる
 PWM_TRISR&=~PWM_MSK;   //PWMポートを出力モード

 //最初の開始待ち
 wait_ms(ST_TIME);   //開始待ち時間


 //メインループ
 for(;;)
 {

  //処理タイミング
DBS_H;
  while(!TMR2IF){};  //サンプリング周期の満了を待つ
DBS_L;
  TMR2IF=0;   //TMR2割込み表示をクリアしておく

  //デューティ設定
  dc=wave[off+=TOBI]-128;  //サンプル値をsignedで取出す
  uuu.sss=dc*vol;   //uuu.ccc=dc*vol/256
#if BTL<2    //シングル・コンプリ出力のとき
  CCPR1H=uuu.ccc[1]+128;  //デューティを設定する
#else     //ブリッジ・ブレーキ出力のとき
  if(dc&0x80)   //負のとき
  {
   CCPR1H=(-uuu.ccc[1])*2; //デューティを設定する
   CWG1STRA=0;  //CWG1Aを出力しない
   CWG1STRB=1;  //CWG1Bを出力する
  }
  else
  {
   CCPR1H=uuu.ccc[1]*2;
      //デューティを設定する
   CWG1STRB=0;  //CWG1Bを出力しない
   CWG1STRA=1;  //CWG1Aを出力する
  }
#endif

  //鳴動変化
  if(sts)    //オン状態のとき
  {
   if(!sts_ps--)  //オン時間が満了したら
   {
    sts=0;  //オフ状態にする
    sts_ps=OF_TIME*8;
      //状態プリスケを初期化
   }
  }
  else    //オフ状態のとき
  {
   if(!sts_ps--)  //オフ時間が満了したら
   {
    sts=1;  //オン状態にする
    sts_ps=ON_TIME*8;
      //状態プリスケを初期化
   }
  }
  if(!step_ps--)   //増減プリスケが満了したら
  {
   if(sts)   //オン状態のとき
   {
    step_ps=ON_STEP/32;
      //増減プリスケを初期化
    if(vol<255) vol++;
      //音量を増加する
   }
   else   //オフ状態のとき
   {
    step_ps=OF_STEP/32;
      //増減プリスケを初期化
    if(vol) vol--; //音量を減少する
      
   }
  }
 }
}


それでは宜しくお願い致します
[ ]
RE:00538 MPLAB X IDE C言語についてNo.00539
秀まるお2 さん 25/08/17 17:36 [ コメントを投稿する ]
  PICマイコン用のプログラミングについては、すみませんがサイトー企画ではまったく分かりません。仮に分かったとしても、基本的にこちらのサポート会議室でお返事する内容では無いです。

今ちょっとネット検索したら、

https://teratail.com/

ってサイトがあって、そこでプログラミングについての質問など出来るみたいです。その辺を活用などしてみてはどうでしょうか。

あと、ChatGPTなどのAIチャットに質問するといろいろ教えてくれます。(時々間違った返事もしますが)

例えば「PICでプログラムを組んでおりますが、C言語が直感的に判りにくく、日本語表現に直して表示することは、難しいでしょうか。」って質問したら、いくつか日本語で分かりやすくする例を提示してくれました。

とりあえずこちらの会議室に質問されても仕方が無いということで、その辺よろしくお願いします。
[ ]
RE:00539 MPLAB X IDE C言語についてNo.00540
ねこ丸 さん 25/08/27 23:48 [ コメントを投稿する ]
  >PICマイコン用のプログラミングについては、すみませんがサイトー企画ではまったく分かりません。仮に分かったとしても、基本的にこちらのサポート会議室でお返事する内容では無いです。
> ......
>とりあえずこちらの会議室に質問されても仕方が無いということで、その辺よろしくお願いします。


すみません
PICというのはC言語の例の一部で
例えば
//デューティ設定
  dc=wave[off+=TOBI]-128;  //サンプル値をsignedで取出す
  uuu.sss=dc*vol;   //uuu.ccc=dc*vol/256
#if BTL<2    //シングル・コンプリ出力のとき
  CCPR1H=uuu.ccc[1]+128;  //デューティを設定する
#else     //ブリッジ・ブレーキ出力のとき
  if(dc&0x80)   //負のとき
  {
   CCPR1H=(-uuu.ccc[1])*2; //デューティを設定する
   CWG1STRA=0;  //CWG1Aを出力しない
   CWG1STRB=1;  //CWG1Bを出力する
  }
  else
  {
   CCPR1H=uuu.ccc[1]*2;
      //デューティを設定する
   CWG1STRB=0;  //CWG1Bを出力しない
   CWG1STRA=1;  //CWG1Aを出力する
  }
#endif

という例を

//デューティ設定
  dc=wave[off+=TOBI]-128;  //サンプル値をsignedで取出す
  uuu.sss=dc*vol;   //uuu.ccc=dc*vol/256
#もし BTL<2    //シングル・コンプリ出力のとき
  CCPR1H=uuu.ccc[1]+128;  //デューティを設定する
#他に    //ブリッジ・ブレーキ出力のとき
  もし(dc&0x80)   //負のとき
  {
   CCPR1H=(-uuu.ccc[1])*2; //デューティを設定する
   CWG1STRA=0;  //CWG1Aを出力しない
   CWG1STRB=1;  //CWG1Bを出力する
  }
  他に
  {
   CCPR1H=uuu.ccc[1]*2;
      //デューティを設定する
   CWG1STRB=0;  //CWG1Bを出力しない
   CWG1STRA=1;  //CWG1Aを出力する
  }
#もし終り

一例ですが
上記のような
書き方を
元のC言語に変更してくれる
変換マクロは出来ないかと思いました。
[ ]
RE:00540 MPLAB X IDE C言語についてNo.00541
秀まるお2 さん 25/08/28 08:42 [ コメントを投稿する ]
  ソースコード中の変数名を何か別の名前に変更(全置換)するとかの単純なレベルの話であればマクロでなんとかなると思いますが、AIでも出来ないような高度な思考を必要とするような処理はマクロでは出来ないです。
[ ]

[ 新規に投稿する ]