ATTiny13Aでシリアル通信を行う

スポンサーリンク

 

・目的

ATTiny13Aのピン一つでシリアル通信を行う

 

・使用したもの

ATTiny13A

シリアル変換機

ダイオード

トランジスタ

10KΩ抵抗 1個

ブレッドボード

Arduino IDE

mac mini

 

・方法

 

(1)ライブラリのインポート

まずはシリアル通信を行うために

ライブラリを追加する

 

下のサイトにとんで

Nerd Ralph: AVR half-duplex software UART supporting single pin operation

 

赤で囲ってある部分をクリックすると

ライブラリをダウンロードできる

 

f:id:shangtian:20171116185859p:plain

 図1:ライブラリのダウンロード

出典:Nerd Ralph: AVR half-duplex software UART supporting single pin operation

 

ダウンロードし終わったら

zip形式のライブラリをインストールを

クリックしいて BasicSerial3を選択する

f:id:shangtian:20171116190247p:plain

 図2:ライブラリの追加

 

(2)回路を組み立てる

 

図3に回路図を示した

シリアル変換器につなげるときは

TX-RX RX-TX

とクロスして接続すること

f:id:shangtian:20171116185106p:plain

 図3:シリアル通信回路

 

(3)ライブラリの設定

 

使うピンの指定と通信速度はをスケッチ上では

指定できないのでライブラリを直接編集して

指定する。

 

まずは使用するピンの指定から

$vim Documents/Arduino/libraries/BasicSerial3
$vim BasicSerial3.S

 13,14行目にデフォルトで

#define UART_Tx 5
#define UART_Rx 5

とあるので5を2に変更

#define UART_Tx 2
#define UART_Rx 2

 

つぎに通信速度の指定

$vim BasicSerial3.h

7行目にある

#define BAUD_RATE 115200

がシリアル通信の速度を指定している

今回38400bpsに指定したいので

#define BAUD_RATE 38400

に変更して保存

 

以上でライブラリの設定は終わり

 

(4)スケッチの作成

スケッチを示した 

1を受け取ったら”CHIBA”を返し

それ以外は”jajaja”を返す 

#include <BasicSerial3.h> 

void setup() {

}

void serOut(const char* str) {
   while (*str) TxByte (*str++);
}

void loop(){
  byte c;
  c = RxByte();
  switch(c) {
    case '1': 
      for (uint8_t i=0;i<10;i++) serOut("CHIBA");
      serOut("\n\r");
      break;
    default:
      serOut("jajaja");
      break;
      
  }
}

図4:スケッチ

 

・結果

 

上手くいくとこんな感じ

f:id:shangtian:20171117212955p:plain

 図5:シリアルモニタ

 

追記

BasicSerial3.SのUART_Tx 、UART_Rx 

を違うピンを割り振れば

普通のシリアル通信が行える

回路図を図6に示した

$vim BasicSerial3.S

 13,14行目

#define UART_Tx 1
#define UART_Rx 0

f:id:shangtian:20171117220041p:plain

図6:回路図

 

 

www.shangtian.tokyo

 

<参考文献>

Nerd Ralph: AVR half-duplex software UART supporting single pin operation

ATtiny13Aでシリアル通信(UART)を行う: 猫にコ・ン・バ・ン・ワ