2022年10月31日月曜日

Seeed Xaio SAMDとRP2040とESPC32でD6/D7の挙動が違う問題。

こんにちは


やましょうです。

どうもXAIOの種類SAMD/RP2040/ESP32C3で挙動が違う。

D6/D7の挙動が違う。なんでだろう?

確認ファームはArudinoで以下のコードを確認してみた。

 


void setup() {
  // declare the ledPin as an OUTPUT:
  Serial.begin(9600);
  Serial.print("ProgramStart!!");  
  pinMode(A0, INPUT);
  pinMode(A1, INPUT);
  pinMode(A2, INPUT);
  pinMode(A3, INPUT);

 pinMode(4,OUTPUT);
 pinMode(5,OUTPUT);
 pinMode(6,OUTPUT);

 pinMode(7,OUTPUT);
 pinMode(8,OUTPUT);
 pinMode(9,OUTPUT);
 pinMode(10,OUTPUT);

}

void loop() {
  // read the value from the sensor:
  uint16_t Readdata;
  Readdata = analogRead(A0);
  Serial.print(" 0=");
  Serial.print(Readdata);
  Readdata = analogRead(A1);
  Serial.print(" 1=");
  Serial.print(Readdata);
  Readdata = analogRead(A2);
  Serial.print(" 2=");
  Serial.print(Readdata);
  Readdata = analogRead(A3);
  Serial.print(" 3=");
  Serial.println(Readdata);
  digitalWrite(4,1);
  digitalWrite(5,1);
  digitalWrite(6,1);
  digitalWrite(7,1);
  digitalWrite(8,1);
  digitalWrite(9,1);
  digitalWrite(10,1);
  delay(500);
  digitalWrite(4,0);
  digitalWrite(5,0);
  digitalWrite(6,0);
  digitalWrite(7,0);
  digitalWrite(8,0);
  digitalWrite(9,0);
  digitalWrite(10,0);
  delay(500);
}

この時にD6/D7/D8の挙動が異なる。

SAMD D6/D7汎用出力OK
RP2040 D6/D7/D8 だめ
ESP32C3 D6(UART TXだと思う) D7/UART RXになっている模様。
どうすれば汎用ポートにできるのかな? 
 
 
これから対応を考えてみようと思う。  
対応 ESP32の場合 7,8を20,21に変更すれば治る
RP2040の場合 ためしてないけど多分同様だと思う。

 

2022年4月23日土曜日

玄関対応くんを作成する。

オンライン会議中は、その対応に出ることもできない。

そのため、玄関対応くん(くま)にまかせることにする。

1.擬人化する。

 



 2.PCから操作可能する。

 

 

 

3.実際の画面

 

4.裏側

 
 
 
 
 
 
 
 
 

5.作成に必要なもの

1.dfplayer関連

DFPlayer - A Mini MP3 Player For Arduino - スイッチサイエンス (switch-science.com) 

 スピーカー、お好きに!

 

2.xbee関連

たぶんこのあたり

2-1.pcからxbeeへ送信する

XBee USB アダプター rev.2 - スイッチサイエンス (switch-science.com)

2-2.xbeeのピッチ変換

XBee用2.54mmピッチ変換基板: 半導体(モジュール) 秋月電子通商-電子部品・ネット通販 (akizukidenshi.com)

2-3.xbee2個

いろいろあるので自分で知られるべし。

 

3.接続

2-2の電源を5vとします。(なのでusb)

gndとvddを接続 xbee,dfplayerともに、

xbeeのtxを2pinをdfplayerのrx2pin繋げます。

 なので

実際は3本しか接続せず終了簡単

 

4.pcソフト

4-1.コンパイラdelphiをエンバカデロから入手

エンバカデロ・テクノロジーズ アプリケーション開発ツール (embarcadero.com)

4-2.232cコンポーネント githubから入手

GitHub - CSDCOJP/WUni232c: WUni232c Uni232c Uart Usart delphi cppbuillder Windows

4-3.ソースgithubから入手

GitHub - qa65000/CTMEnt: delphi uni232c

変更点コムポートを変更してコンパイル完成

 

以上

 


 

 



2021年9月18日土曜日

ATTinyでprintfデバッグする。

 こんにちは

やましょうです。

 

ATTINYでprintfする


 赤の部分を追記すればUart printfがでる。

static FILE USART_stream = FDEV_SETUP_STREAM(USART_0_write, NULL, _FDEV_SETUP_WRITE);

int main(void)
{
    /* Initializes MCU, drivers and middleware */
    atmel_start_init();
    stdout = &USART_stream;

 
 以上

やましょうでした。


 

 

ATTiny 402 404の内部発振ではまったこと16MHZ



 こんにちは

やましょうです。

ATTINY404で遊んでいるのですが、16Mhz内部発振の筈が20MHZに。。。

Atmel Startでは16MHZにしたのですが、(画像は20MHZですが。。)


 動作させると20MHzなんです。

いろいろ調べるとFUSEを設定する必要があるようです。。

 
以上
やましょうでした。

2021年6月9日水曜日

Tiny Avr 0 シリーズタイマの例

 こんにちは   やましょうです。

AVR0 シリーズ本日はタイマです。

なんか昔のAVRと違う。。ということでタイマのsampleです。

TCAの構成はこんな感じですね。

 typedef struct TCA_SINGLE_struct
{
    register8_t CTRLA;  /* Control A */
    register8_t CTRLB;  /* Control B */
    register8_t CTRLC;  /* Control C */
    register8_t CTRLD;  /* Control D */
    register8_t CTRLECLR;  /* Control E Clear */
    register8_t CTRLESET;  /* Control E Set */
    register8_t CTRLFCLR;  /* Control F Clear */
    register8_t CTRLFSET;  /* Control F Set */
    register8_t reserved_0x08;
    register8_t EVCTRL;  /* Event Control */
    register8_t INTCTRL;  /* Interrupt Control */
    register8_t INTFLAGS;  /* Interrupt Flags */
    register8_t reserved_0x0C;
    register8_t reserved_0x0D;
    register8_t DBGCTRL;  /* Degbug Control */
    register8_t TEMP;  /* Temporary data for 16-bit Access */
    register8_t reserved_0x10;
    register8_t reserved_0x11;
    register8_t reserved_0x12;
    register8_t reserved_0x13;
    register8_t reserved_0x14;
    register8_t reserved_0x15;
    register8_t reserved_0x16;
    register8_t reserved_0x17;
    register8_t reserved_0x18;
    register8_t reserved_0x19;
    register8_t reserved_0x1A;
    register8_t reserved_0x1B;
    register8_t reserved_0x1C;
    register8_t reserved_0x1D;
    register8_t reserved_0x1E;
    register8_t reserved_0x1F;
    _WORDREGISTER(CNT);  /* Count */
    register8_t reserved_0x22;
    register8_t reserved_0x23;
    register8_t reserved_0x24;
    register8_t reserved_0x25;
    _WORDREGISTER(PER);  /* Period */
    _WORDREGISTER(CMP0);  /* Compare 0 */
    _WORDREGISTER(CMP1);  /* Compare 1 */
    _WORDREGISTER(CMP2);  /* Compare 2 */
    register8_t reserved_0x2E;
    register8_t reserved_0x2F;
    register8_t reserved_0x30;
    register8_t reserved_0x31;
    register8_t reserved_0x32;
    register8_t reserved_0x33;
    register8_t reserved_0x34;
    register8_t reserved_0x35;
    _WORDREGISTER(PERBUF);  /* Period Buffer */
    _WORDREGISTER(CMP0BUF);  /* Compare 0 Buffer */
    _WORDREGISTER(CMP1BUF);  /* Compare 1 Buffer */
    _WORDREGISTER(CMP2BUF);  /* Compare 2 Buffer */
    register8_t reserved_0x3E;
    register8_t reserved_0x3F;
} TCA_SINGLE_t;


①CTRLBのWGMODE2~01に01(FRQ)を設定

#define TCA_SINGLE_OVF_bm  0x01  /* Overflow Interrupt bit mask. */

となっているのでこれを設定

 

②PERにタイマ値設定

 

カウント数(設定値+1) = 欲しい規定時間 * 3.3Mhz(20Mhz発振時 1/6分周後)となるので。

1[mS]が欲しい規定時間の場合 3000となります。

TCBですと1/2の分周器が入るので設定値は半分の

1500になると思います。

実際タイマの回路はアンダーフローで割込みに入るでしょうから

カウント数-1を設定するべきかと思います。


③CTRLAに分周数設定し開始

TCA0.SINGLE.CTRLB = TCA_SINGLE_WGMODE_NORMAL_gc;
TCA0.SINGLE.PER = 3000;
TCA0.SINGLE.CTRLA  = TCA_SINGLE_CLKSEL_DIV1_gc;     /* 1/1分周        */  TCA0.SINGLE.CTRLA |= TCA_SINGLE_ENABLE_bm;                /* タイマ計測開始 */

また割込みを使用する場合は、

④INTCTRLのOVFを設定して、タイマのOVERフロー割込みを許可にしておきます。

(その後MASTER割込みも許可してくださいね)


⑤割込み処理の記述、もしくはメインでOVFのチェックをします。

    

5-1.割込み時

タイマ割込み設定にして、

 TCA0.SINGLE.INTCTRL = TCA_SINGLE_OVF_bm;を設定部に追加し


ISR(TCA0_OVF_vect)
{
    任意処理 

  TCA0.SINGLE.INTFLAGS = TCA_SINGLE_OVF_bm;
}

5-2.メインでタイマチェック

     if(TCA0.SINGLE.INTFLAGS & TCA_SINGLE_OVF_bm)
    {    /*1MS単位 */
           TCA0.SINGLE.INTFLAGS = TCA_SINGLE_OVF_bm; 

           任意処理  

 }


以上

やましょうでした。






2021年6月8日火曜日

TINY AVR0 シリーズのポートの構成

 こんにちは、

 

やましょうです。

 

 AVR TINY 0 シリーズ(AVR  TINY   202,402,204,404,804,1604,1606,806,406,807,1607)

実際にはATtiny202を使ってみようと思ったのですが、いろいろ検索をしてみたのですが、

何もみつからなったので、記載しておきたいと思います。


1.ポートのレジスタ構成がPICポイ。W

iotn202.hを見てみます。
typedef struct PORT_struct
{
    register8_t DIR;  /* Data Direction */
    register8_t DIRSET;  /* Data Direction Set */
    register8_t DIRCLR;  /* Data Direction Clear */
    register8_t DIRTGL;  /* Data Direction Toggle */
    register8_t OUT;  /* Output Value */
    register8_t OUTSET;  /* Output Value Set */
    register8_t OUTCLR;  /* Output Value Clear */
    register8_t OUTTGL;  /* Output Value Toggle */
    register8_t IN;  /* Input Value */
    register8_t INTFLAGS;  /* Interrupt Flags */
    register8_t reserved_0x0A;
    register8_t reserved_0x0B;
    register8_t reserved_0x0C;
    register8_t reserved_0x0D;
    register8_t reserved_0x0E;
    register8_t reserved_0x0F;
    register8_t PIN0CTRL;  /* Pin 0 Control */
    register8_t PIN1CTRL;  /* Pin 1 Control */
    register8_t PIN2CTRL;  /* Pin 2 Control */
    register8_t PIN3CTRL;  /* Pin 3 Control */
    register8_t PIN4CTRL;  /* Pin 4 Control */
    register8_t PIN5CTRL;  /* Pin 5 Control */
    register8_t PIN6CTRL;  /* Pin 6 Control */
    register8_t PIN7CTRL;  /* Pin 7 Control */
    register8_t reserved_0x18;
    register8_t reserved_0x19;
    register8_t reserved_0x1A;
    register8_t reserved_0x1B;
    register8_t reserved_0x1C;
    register8_t reserved_0x1D;
    register8_t reserved_0x1E;
    register8_t reserved_0x1F;
} PORT_t;

うんーーー最近のpic32に似ています。
まず、dirは入出力設定だと思います。
そのあとSET(bitを立てる用)のレジスタ
そのあとCLR(bitを下げる用)のレジスタ
 そのあとTGL(bitを反転用)のレジスタですね。
その後は、出力ラッチと入力ラッチ 別になっていますね。
あと各PINの機能も1BYTE毎に設定(PINxCTRL)内容としてはPULLUP&反転、割込み設定。
ですね。

次回はタイマを書きたいなぁ。

以上
やましょうでした。

2017年12月25日月曜日

MicrobitでBle

こんにちは、やましょうです。

MicroBit:Advent カレンダー25日目です。
皆様のご協力で、25日すべて無事に完了いたしました。
ありがとうございます。

今日はマイクロビットでbleをお送りします。
内容はこんな感じです。
シリアル出力はテスト用で、動けば必要はありません。


そして、動かすとこんな感じになりまうす。

とても簡単に通信できますね。

それでは、みなさん本当にありがとうございました。