= ATTiny85を使ったI2C USB変換+温度センサ基板の作成 = 以前作成した[wiki:/epics/weather_sensor USB 温湿度/大気圧センサ]の修正版として作成。[[br]] 以前作成した基板の問題点として、 * 温湿度センサと他のチップがベタグランドでつながっていて、熱が回ってきていないか不安 * センサとCPUが物理的に分離していないので、センサの種類を変えられない 等があったので、その辺りを考慮した。 今回使用するのは、温度センサ[http://www.analog.com/jp/products/analog-to-digital-converters/integrated-special-purpose-converters/digital-temperature-sensors/adt7410.html (ADT7410)]のみなので、センサ基板にはこれだけを実装することにする。 == 回路図 == 回路図はこんな感じになった。 [[Image(i2cduino_sch_1.png, 400)]] [[Image(i2cduino_sch_2.png, 400)]] == アートワーク == 基板のアートワークはこんな感じ。 [[Image(i2cduino_pcb.png, 400)]] USB+CPUとセンサ基板を分離して作成することで、熱的に分離するのと、センサが変わってもプログラムの変更だけで対応できるように考慮した。[[br]] CPUへのファームウェアの書き込みは、裏面に付けたパッドから行う。 == ファームウェア == ファームウェアは arduino を使って作成するので、開発環境を構築。 === Arduino === [https://www.arduino.cc/ arduinoの本家]から開発環境(Arduino IDE)をダウンロードしてインストール。[[br]] ダウンロードは、[https://www.arduino.cc/en/Main/Software ここ]から、自分の環境に合わせたものを持ってくる。[[br]] 2017/12/12現在、最新版は 1.8.5。今回は Windows Installer を使った。 === Board Manager === 最近は色々なマイコンがarduinoで開発できるようになっていて、対応するボードマネージャーを使えば、環境構築を自動でやってくれる。いい時代になったもんだ、、、[[br]] 今回使うCPUは Atmel ATTiny85、書き込みは Arduino ISP で行う。 実際の環境設定は以下のサイトが詳しいので、それを参照。 [http://make.kosakalab.com/make/electronic-work/arduino-ide-dev/ Arduino IDE で ATtiny 他の開発] CPUの開発環境は以下のページを参照。 [http://make.kosakalab.com/make/electronic-work/arduino-ide/attiny-dev/ Arduino IDE に ATtiny45/85/2313 他の開発環境を組み込む] CPUへの書き込みを行う Arduino ISP は、Arduino UNO R3をArdunio書き込み装置にして使用する。(ややこしいですが) [https://www.arduino.cc/en/Tutorial/ArduinoISP Using an Arduino as an AVR ISP (In-System Programmer)] これを使えばAVRライターがなくても、arduino対応のCPU設定が簡単にできる。 === 開発環境テスト === 開発環境が動作するかをチェックする。[[br]] [http://make.kosakalab.com/make/electronic-work/arduino-ide/test_arduinoisp/ 【 Arduino IDE 】ArduinoISP 使い方・書き込みテスト]を参考に行うが、多少違っていた(古い?)ので相違点を記載する。[[br]] {{{ ArduinoISP -> Arduino as ISP(ATTinyCore) }}} 設定は画像のようにする。シリアルポートの設定は、ArduinoISPがつながっているものを選択。 [[Image(arduino_isp.png,400)]] テスト用のソースは、 {{{ #define PIN 3 #define DTIME 500 void setup() { pinMode(PIN, OUTPUT); } void loop() { digitalWrite(PIN, HIGH); delay(DTIME); digitalWrite(PIN, LOW); delay(DTIME); } }}} これをArduinoISPに以下の様につないで書き込み。 [[Image(http://make.kosakalab.com/arduino/use/45_85.gif)]] 書き込みが完了すると、LEDが2秒間隔ぐらいで点滅する。[[br]] 点滅しなかったり、書き込み時にエラーが表示された場合には、設定か回路が間違っているのでチェックする。 本来このプログラムだとは0.5秒間隔で点滅するが、クロックに対するカウンタが合っていないのでこのようになる。[[br]] これを合わせるために、メニューから"ツール -> ブートローダーを書き込む"を実行し、再度テストプログラムを書き込むと、今度は0.5秒毎に点滅するようになる。