2021年5月29日土曜日

OPC-2350LU互換ユニット

ID-31をPCと通信できるユニットである。ICOMの純正は、OPC-2350LUでありFTDI製チップを使用。AliexpressでFTI232RLを使ったTTLユニットを販売している。そこで、FTI232RL TTLユニットと232Cレベルコンバータと組合せ、OPC-2350LU互換ユニットにした。



回路図


3Pプラグ
2.5φ3Pプラグを使ってID-31と繋ぐが、プラグが直径7mm以下でなければならない。市販の2.5φ3pプラグは、直径8mmであった。このため、2.5φプラグ(直径6mm)ー3.5φソケット変換と3.5φプラグー3.5φプラグのケーブルを組み合わせて使う事にした。写真上は、3.5φプラグー3,5φプラグ。写真下は、3,5φソケットー2.5φプラグである。    
       




 






   




2021年5月4日火曜日

ESP8266 Multi encorder

ESP8266を使って、Multi encorder(2個)の動作確認を行った。割込みでencorderを読み取る事とし、Rotary.hを使った。Rotary.hは、バージョンによる違いが有るので、比較的新しいバージョンを使った。



動作確認用なので、結果はモニタ表示する事にした。

ESP8266固有の所は、

void ICACHE_RAM_ATTR enc1_proc();

void ICACHE_RAM_ATTR enc2_proc();

である。





スケッチ

Rotaly.hを含め、スケッチはJA2GQP's Download siteのesp8266フォルダからダウンロードできる。

//-------------------------------------------------------------

//  ESP8266 Multi encorder test

//                                              2010/5/4

//                                              JA2GQP

//-------------------------------------------------------------


#include "src/Rotary.h"


Rotary r1 = Rotary(D3,D4);               // encorder 1

void ICACHE_RAM_ATTR enc1_proc();


Rotary r2 = Rotary(D1,D2);               // encorder 2

void ICACHE_RAM_ATTR enc2_proc();


//---------- setup --------------------------------------------


void setup() {

  Serial.begin(115200);

  r1.begin(0);

  attachInterrupt(digitalPinToInterrupt(D3), enc1_proc, CHANGE);

  attachInterrupt(digitalPinToInterrupt(D4), enc1_proc, CHANGE);


  r2.begin(1);

  attachInterrupt(digitalPinToInterrupt(D1), enc2_proc, CHANGE);

  attachInterrupt(digitalPinToInterrupt(D2), enc2_proc, CHANGE);

}


//---------- main loop ----------------------------------------


void loop() {

}


//----------  encorder 1 proc ---------------------------------


void enc1_proc() {                     // rotary encoder events

  unsigned char result = r1.process();

  if (result == DIR_NONE) {

    // do nothing

  }

  else if (result == DIR_CW) {

    Serial.println("Enc 1 CW");

  }

  else if (result == DIR_CCW) {

    Serial.println("Enc 1 CCW");

  }

}


//----------  encorder 2 proc ---------------------------------


void enc2_proc() {                     // rotary encoder events

  unsigned char result = r2.process();

  if (result == DIR_NONE) {

    // do nothing

  }

  else if (result == DIR_CW) {

    Serial.println("Enc 2 CW");

  }

  else if (result == DIR_CCW) {

    Serial.println("Enc 2 CCW");

  }

}