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:回路図

 

<参考文献>

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

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

ATTiny13A ブートローダー書き込み

ATTiny13Aは秋月で50円ほどで

とにかく安い

ピンの数が少ないんでかなり制限

されて使いにくいかもしれないけど

とにかく安い

 

というわけで使ってみる

 

・目的

ATTiny13Aにブートローダーを書き込む

 

・使用したもの

 

ATTiny13A

Arduino UNO

Arduino IDE

ブレッドボード

ジャンパワイヤ

mac mini

 

 

・方法

 

(1)Arduino に ArduinoISPを書き込む

 

まずはArduino unoにArduinoISPを書き込む

 

f:id:shangtian:20170629230220p:plain

図1:ArduinoISP

 

(2)ボードマネージャに追加

 

まずは

Arduino IDE に ATtiny10/13 の開発環境を組み込む | Make | kosakalab

にアクセスして図2の赤四角の

部分をクリックしてzipファイルを

ダウンロード

 

f:id:shangtian:20171116082103p:plain

図2:Arduino IDE に ATtiny10/13 の開発環境を組み込む | Make | kosakalab

 

ダウンロードしたファイルを解凍すると

以下のような構成になる

 

bitDuino_2017-2/

                        ┣ bitDuino10/

                        ┣ bitDuino13/  <---使うのはこのファイル

                        ┗bitDuino_Readme.txt

 

次に

  書籍/Arduino/

ディレクトリにHardwareという名前で

ディレクトリを作成しておく

 

先ほど解凍したファイルの中にある

   bitDuino13

をHardwareにコピー

 

うまく追加されるとツール->ボード

で以下の図のように表示される 

f:id:shangtian:20171116083820p:plain

 図3:ボードの選択

 

(3)配線

図4のように配線して

Arduino uno とATTiny13Aのピンの対応表

を表1に示した。

f:id:shangtian:20171115234008p:plain

図4:Arduino unoとATTiny13Aの繋げ方

 

 表1:対応表

 

Arduino uno

ATTiny13A

SDK

D13

7(PB2)

MISO

D12

6(PB1)

MOSI

D11

5(PB0)

RESET

D10

1(RESET)

 

(4)ブートローダーを書き込み

 

ツールを開いて図5のように書き込み装置

Arduino as ISP を選択して

ブートローダーを書き込むをクリック

 

f:id:shangtian:20171116083655p:plain

 

<参考文献>

Arduino IDE に ATtiny10/13 の開発環境を組み込む | Make | kosakalab

Arduinoで、小っちゃいIC(ATTiny)を使う方法 - Qiita

 

 

Ada入門:繰り返し構文

・目的

今回は繰り返し構文について

Adaの繰り返し構文はバリエーション

がけっこうあるきがする。

 

・方法

ここでは5種類の繰り返しかた

をやってみる

 

まずこれ

c言語でいうdo whileみたいなやつ

  i := 0;

   loop
      put("i =");
      put(i, 5);
      New_Line;
      i := i + 1;
      exit when i = 4; --iが4になったら終了
   end loop;

 

次は、条件文で繰り返しを抜けるパターン


      i := 0;
  loop
      Put("i =");
      Put(i,5);
      New_Line;
      i := i + 1;
      if i = 4 then exit; end if;
   end loop;

次はwhile文

  i := 0;

   while i < 5 loop
       Put("i =");
       Put(i,5);
       New_Line;
       i := i + 1;
   end loop;

つぎはfor文

iが1から4の間繰り返す

for i in 1..4 loop
      Put("Hello World");
      Put(i);
      New_Line;
   end loop;

今度は8〜5の間繰り返す

ただし8 7 6 5 4

という感じで処理される

 

for i in reverse 5..8 loop
      Put("Good morning");
      Put(i);
      New_Line;
   end loop;

 

Ada入門:Boolean型

・目的

 Boolean型を使えるようになること

 

・方法

Boolean型を使ったコードを図1に示した。 


with Ada.Text_IO, Ada.Integer_Text_IO;
use Ada.Text_IO, Ada.Integer_Text_IO;

procedure BOO is

   package Enum_IO is new Ada.Text_IO.Enumeration_IO(BOOLEAN);
   use Enum_IO;

   rat, cat, dog, bird    : INTEGER;
   question, truth, lies  : BOOLEAN;

begin

   rat  := 10;
   cat  := 10;
   dog  := 12;
   bird :=2;

   question := rat = cat;
   Put("question is ");
   Put(question);
   New_Line(2);

   question := rat = dog; --ratとdogが同値である
   Put("question is ");  -- 正しくないのでFALSE
   Put(question);
   New_Line(2);

   question := rat /= cat; --ratとcatが同値でない
   Put("question is ");    --正しくないんでFALSE
   Put(question);
   New_Line(2);

   question := rat < dog; --ratがdogより小さい
   Put("question is ");   --正しいのでTRUE
   Put(question);
   New_Line(2);

   question := bird > dog;  --birdがdogより大きい
   Put("question is ");     --正しくないのでFALSE
   Put(question);
   New_Line(2);

   question := rat <= cat;
   Put("question is ");
   Put(question);
   New_Line(2);

   question := rat >= cat;
   Put("question is ");
   Put(question);
   New_Line(2);

   truth := rat = cat; --truth は TRUE
   lies  := rat < cat; --lies  は FALSE

   question := truth or lies;
   Put("question is ");
   Put(question);
   New_Line(2);

   question := truth xor lies;
   Put("question is ");
   Put(question);
   New_Line(2);

end BOO;

図1:BOO.adb

 

実行結果

question is FALSE

question is FALSE

question is TRUE

question is TRUE

question is TRUE

question is TRUE

question is TRUE

question is TRUE 

 

 procedure内で

Enumeration_IO();

インスタンスすることでboolean型を使うことが

出来るようになる

 

or と xor について

 

まずorから

question := truth or lies; --TRUE

question := lies or lies;     --FALSE

question := truth or truth; --TRUE

を実行するとわかるが

少なくとも片方がTRUEであれば

questionはTRUEを返す

 

次にxor

 

question := truth xor lies; --TRUE

question := lies xor lies;     --FALSE

question := truth xor truth; --FALSE

question := truth xor lies; --TRUE

 

つまり A xor B としたとき

AとBが同じ値であればFALSE

AとBが異なる値であればTRUEを返す

 

実験用電源の作成記録その3

・目的

その1で組んだ回路を元に

ユニバーサル基板にはんだ付け

していく

 

・使用したもの

ユニバーサル基板

XHコネクタ2pinオス,メス

 はんだ

 はんだごて

 

・方法

 

はんだ付け

図1の回路図のように

ユニバーサル基板に配線していく。

f:id:shangtian:20171022221157p:plain

 図1:電源回路

 

スイッチやコネクタは直接

配線せずXHコネクタを用いて

取り外し出来るようにした。

 取り外しができるので基板を

ケースに入れる時かなり楽になる

 

図みたいに先にユニバーサル基板に

パーツをつける位置をマジックで

印しておくと配線がだいぶ

楽になった。
f:id:shangtian:20171017074633j:image

 

すべての配線が終わりちゃんと動作するか

確認をする。 

f:id:shangtian:20171016163145j:image

 

ちなみに基板の裏側はこんな感じ
f:id:shangtian:20171016163212j:image

 

・完成

下の写真が完成品
f:id:shangtian:20171028003451j:image

実験用電源の作成記録その2

・目的

プラスチックケースを加工して

スイッチやコネクタを取り付ける

 

・使用したもの

ドリル

ヤスリ(ダイソーで売ってた金属のヤスリ)

木片(ホームセンターで購入)

プラスドライバー

プラスチックケース

f:id:shangtian:20171016095127j:image

可変抵抗(B10k)

トルグスイッチ

DCコネクタ(外径5.5mm,内径2.1mm)

絶縁ターミナル

サトーパーツ(SATOPARTS) T-3025-B

サトーパーツ(SATOPARTS) T-3025-B

 

ヒートシンク秋月電子の店頭で売られていた)
f:id:shangtian:20171016100525j:image

 

・方法

 

(1)ケースに印をつける

 

まずはケースにコネクタや

スイッチを取り付ける

位置をマジックペンで

印をつけていく

 

トルグスイッチ
f:id:shangtian:20171016095754j:image

 

ボリューム

f:id:shangtian:20171016095827j:plain

 

コネクタ赤黒
f:id:shangtian:20171016100012j:image

 

DCコネクタ
f:id:shangtian:20171016100038j:image

 

ヒートシンク
f:id:shangtian:20171016100133j:image

(2)ドリルで穴開け

先ほど印をつけたところを

ドリルで穴を空けていく

空け終わったら部品を通して

みる。もし入らなかったら

ヤスリで削って行くとよい。
f:id:shangtian:20171016100206j:image

 

こういう大きな部分

を切り出す時は印の

周りを、間隔を詰めて穴を

空けていき、最後はニッパー

で切り取ると空けられる

f:id:shangtian:20171016100133j:image

 

切り出したのが下の写真
f:id:shangtian:20171016100301j:image

 

こちらが完成品
f:id:shangtian:20171016100322j:image

 (3)コネクタの配線

 

 次はコネクタに配線をしていく


f:id:shangtian:20171016101525j:image


f:id:shangtian:20171016162743j:image

 

レギュレーターへの配線
f:id:shangtian:20171016162855j:image

 

レギュレーターに配線し終わったら

レギュレーターの裏側に

CPUグリスを塗って

ネジで固定した
f:id:shangtian:20171016162933j:image

固定したのが図
f:id:shangtian:20171016162946j:image

 

その3へ続く

 

shangtian.hatenablog.com

 

実験用電源の作成記録その1

・目的

1Vから12Vの幅を持つ

電源を作成する。

 

 

・使用したもの

可変抵抗

可変三端子レギュレータLM317T

整流ダイオード1N4007G 2個

0.1μF セラミックコンデンサ

28μF、23μF 電解コンデンサコンデンサ

ブレッドボード

ジャンパワイヤ

DCコネクタ(外径5.5mm,内径2.1mm)

ACアダプター 12V1A AD-K1

1kΩ 抵抗

200Ω抵抗

LED

 

・方法

 

(1)回路図の作成

 回路図を作成して、ブレッドボード上で

正しく動作するかを検証する。

 

単に電圧を変化させるだけであれば、

図1の回路で十分である。

 

今回はユニバーサル基板にはんだ付けして

ケースに収めたいので回路にはノイズ除去

と安全装置(ダイオード)を加えれおく。

 

可変レギュレタの詳しい使い方は以下を参照
shangtian.hatenablog.com

 

 

1Vから12Vほどの幅で出力できるように

使う抵抗の大きさについて考える。

 

まずは基本回路で考えてみる。

基本回路を図1に示した。

 

f:id:shangtian:20171016211232p:plain

 図1:基本回路

 

可変レギュレターの出力Voutは次の式で表される。

f:id:shangtian:20171016215158p:plain

 

最高10Vほど出力できるようにしたいので

R1 = 1kΩ

R2max = 10kΩ

として回路を組んだ。

 

最高出力は理論上は以下

f:id:shangtian:20171016223709p:plain

 

最低出力は

f:id:shangtian:20171018230526p:plain

 

 

次に基本回路にコンデンサダイオード

加えた保護回路につて考えて見る。

図2に保護回路の回路図をしめした。

 f:id:shangtian:20171022215256p:plain

図2:保護回路図

 

まずCinについて

Vin部分の配線のインピーダンスの影響

を低くするために設置する。

Cinは0.1μFセラミックコンデンサ

または1.0μFタンタルコンデンサ

が推奨されている。

 

次はCadjについて

Cadjはリップル除去を行うために設置。

つまりAC電源の電圧の変動の影響を

抑えるアンプの役割。

Cadjは10μFが推奨されている。

 

最後にCoについて

出力側に25μF電解コンデンサ

取り付けることでリンキングの

発生を抑えることが出来る。

 

保護 ダイオードについて

あらゆるIC化されたレギュレータに

コンデンサを外付けした場合、

コンデンサにたまった電荷

ICの微小電流回路をつたって

流れてしまうのを防ぐため設置する。

 

 

図2を参考のしてVoutにLEDを

接続して電圧の変化をわかりやすく

したのが図3の回路。

 

この図3の回路をブレッドボードに組み上げるる。

 

 

f:id:shangtian:20171022212419p:plain

図3:保護回路図

 

(2)ブレッドボード上で回路を組む

 図3を参考にしながらブレッドボード

上に回路をくんだ。

図4にFrizingで作成した回路図

を載せた。

f:id:shangtian:20171022204115p:plain

図4:Frizingで描いた回路図

 

 ・結果

 ブレッドボード上に組んで

可変抵抗を回すとLEDの

明るさが変化した。

 

 電圧を測ったところ

最小で1.2v

最大で11v

程だったのでちゃんと動いたと思う。
f:id:shangtian:20171016094006j:image

 

shangtian.hatenablog.com