Version 5 (modified by michkawa, 7 years ago) (diff) |
---|
ATTiny85を使ったI2C USB変換+温度センサ基板の作成
以前作成したUSB 温湿度/大気圧センサの修正版として作成。
以前作成した基板の問題点として、
- 温湿度センサと他のチップがベタグランドでつながっていて、熱が回ってきていないか不安
- センサとCPUが物理的に分離していないので、センサの種類を変えられない
等があったので、その辺りを考慮した。
今回使用するのは、温度センサ(ADT7410)のみなので、センサ基板にはこれだけを実装することにする。
回路図
回路図はこんな感じになった。
アートワーク
基板のアートワークはこんな感じ。
USB+CPUとセンサ基板を分離して作成することで、熱的に分離するのと、センサが変わってもプログラムの変更だけで対応できるように考慮した。
CPUへのファームウェアの書き込みは、裏面に付けたパッドから行う。
ファームウェア
ファームウェアは arduino を使って作成するので、開発環境を構築。
Arduino
arduinoの本家から開発環境(Arduino IDE)をダウンロードしてインストール。
ダウンロードは、ここから、自分の環境に合わせたものを持ってくる。
2017/12/12現在、最新版は 1.8.5。今回は Windows Installer を使った。
Board Manager
最近は色々なマイコンがarduinoで開発できるようになっていて、対応するボードマネージャーを使えば、環境構築を自動でやってくれる。いい時代になったもんだ、、、
今回使うCPUは Atmel ATTiny85、書き込みは Arduino ISP で行う。
実際の環境設定は以下のサイトが詳しいので、それを参照。
CPUの開発環境は以下のページを参照。
Arduino IDE に ATtiny45/85/2313 他の開発環境を組み込む
CPUへの書き込みを行う Arduino ISP は、Arduino UNO R3をArdunio書き込み装置にして使用する。(ややこしいですが)
Using an Arduino as an AVR ISP (In-System Programmer)
これを使えばAVRライターがなくても、arduino対応のCPU設定が簡単にできる。
開発環境テスト
開発環境が動作するかをチェックする。
【 Arduino IDE 】ArduinoISP 使い方・書き込みテストを参考に行うが、多少違っていた(古い?)ので相違点を記載する。
ArduinoISP -> Arduino as ISP(ATTinyCore)
設定は画像のようにする。シリアルポートの設定は、ArduinoISPがつながっているものを選択。
テスト用のソースは、
#define PIN 3 #define DTIME 500 void setup() { pinMode(PIN, OUTPUT); } void loop() { digitalWrite(PIN, HIGH); delay(DTIME); digitalWrite(PIN, LOW); delay(DTIME); }
これをArduinoISPに以下の様につないで書き込み。
書き込みが完了すると、LEDが2秒間隔ぐらいで点滅する。
点滅しなかったり、書き込み時にエラーが表示された場合には、設定か回路が間違っているのでチェックする。
本来このプログラムだとは0.5秒間隔で点滅するが、クロックに対するカウンタが合っていないのでこのようになる。
これを合わせるために、メニューから"ツール -> ブートローダーを書き込む"を実行し、再度テストプログラムを書き込むと、今度は0.5秒毎に点滅するようになる。
測定用ファームウェア
TinyWireM
今回は ATTiny85 + ADT7410なので、前回と同じようにADT7410のサンプルソースをTinyWireMに対応させる方法で作成する。
前回と違うのは、TinyWireMが"ライブラリマネージャー"でインストールできるようになっている点。
ライブラリマネージャーは、メニューから"スケッチ -> ライブラリをインクルード -> ライブラリを管理"で表示されるダイアログで"tinywire"で検索すると表示される。
これをインストール。
ADT7410
ADT7410用のライブラリもライブラリマネージャーでインストールできるが、使われているのがATMega用のWire(I2C)ライブラリなので、そのままでは使用できない。
なので、これを基にWireをTinyWireMに変更したライブラリを作成した。
元のライブラリはFaBoPlatform/FaBoTemperature-ADT7410-Library
作成したライブラリファイルはADT7410-TinyWire-Library.zipとして置いておくので、必要ならダウンロードして使用すること。
Firmware
Firmwareは、以前作成したものとほぼ同じ。
#include <TinyWireM.h> #include <USI_TWI_Master.h> #include <SoftwareSerial.h> #include <ADT7410_TinyWireM.h> ADT7410_TinyWireM ADT7410; SoftwareSerial SwSerial(3, 4); // RX, TX void setup() { SwSerial.begin(9600); ADT7410.begin(); } void loop() { float temp = ADT7410.readTemperature(); SwSerial.print("T:"); SwSerial.print(temp, 4); SwSerial.print("\r\n"); delay(5000); }
5秒毎にセンサから読み取ったデータを温度に変換し、文字列としてUSBシリアルに出力する。
以前のソースコードでは、メモリの使用量の問題でprintを使わずに自前でfloatを出力していたが、新しいバージョンではほとんど変わらなかったので、ソースコードを簡素化した。
Attachments (7)
- i2cduino_sch_2.png (27.4 KB) - added by michkawa 7 years ago.
- i2cduino_sch_1.png (47.4 KB) - added by michkawa 7 years ago.
- i2cduino_pcb.png (70.2 KB) - added by michkawa 7 years ago.
- arduino_isp.png (54.7 KB) - added by michkawa 7 years ago.
- arduino_lib.png (14.6 KB) - added by michkawa 7 years ago.
- ADT7410-TinyWire-Library.zip (2.8 KB) - added by michkawa 7 years ago.
- temp_sensor.png (978.0 KB) - added by michkawa 7 years ago.
Download all attachments as: .zip