Attiny85とAQM0802A(LCD)のI2C接続
Attiny85とAQM0802A(LCD)のI2C接続
以前に、ブレッドボード上でArduinoにAQM0802を接続して文字を表示できたので、今度はAttiny85での表示。
Arduino UNO,Nanoだと"Wire.h"を読み込むんだがAttinyでI2Cを扱うには、”TinyWireM"を読み込む。
またLCDで提供されているST7032.hの中身とかも変更する必要がある。
そこは自分でやらなくても、非常に先人の方々がまとめてくれている。(こことか)
・はまった点症状
AttinyにちゃんとISPから書き込みができているのに液晶に何も映らない。
かと言って同じスケッチをNanoに書き込み”Wire”に戻してあげて接続すると動く。
つまり、スケッチが悪い訳でもないし、液晶が壊れている訳でもない。
VCCのラインにスイッチを設けてやって、スイッチをなぜかダブルクリックすると液晶が映る。一度映ると消える事はないが、たまに映らない事があり不安定・・・
なぞのままである。
でAttinyが表示器を手にいれられた。
でスケッチを書き換えて温度計としてみる。
サーミスタのテストをしたときのスケッチとマージして、Attiny85で計測して表示する。
26度付近の室温を示して、サーミスタを手でつまむと34度とかまですぐ上昇。
温度表示まではできた。
//this is a test for attiny85 thermistor
//measured temperature is displayed on LCD AQM0802A
// PB5[ ]VCC
// PB3[ ]PB2 SCL
// PB4[ ]PB1
// GND[ ]PB0 SDA
#include <TinyWireM.h>
#include <ST7032.h>
ST7032 lcd;
const int PIN_ANALOG_INPUT = 4;
const float V5V = 5.0;//measured voltage +5V pin.
const float R10k = 9980;//measured R R10k.
const float B = 3500;//measured voltage R10k.
const float R0 = 200000;//themistor @ 25 dgree
void setup() {
// put your setup code here, to run once:
// set up the LCD's number of columns and rows:
lcd.begin(8, 2);
lcd.setContrast(10);
// Print a message to the LCD.
lcd.print("Temp(C)=");
// pinMode(3, OUTPUT);
pinMode(PIN_ANALOG_INPUT, INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
int i = analogRead(A2);
float Vm = i * V5V/ 1023.0;
float Rth=R10k*Vm/(V5V-Vm);
float invT=1/B*log(Rth/R0)+1/(273.15+25);
float Ta=1/invT;
float Td=Ta-273.15;
lcd.setCursor(0, 1);
lcd.print(Td);
delay(500);
}
以前に、ブレッドボード上でArduinoにAQM0802を接続して文字を表示できたので、今度はAttiny85での表示。
Arduino UNO,Nanoだと"Wire.h"を読み込むんだがAttinyでI2Cを扱うには、”TinyWireM"を読み込む。
またLCDで提供されているST7032.hの中身とかも変更する必要がある。
そこは自分でやらなくても、非常に先人の方々がまとめてくれている。(こことか)
・はまった点症状
AttinyにちゃんとISPから書き込みができているのに液晶に何も映らない。
かと言って同じスケッチをNanoに書き込み”Wire”に戻してあげて接続すると動く。
つまり、スケッチが悪い訳でもないし、液晶が壊れている訳でもない。
VCCのラインにスイッチを設けてやって、スイッチをなぜかダブルクリックすると液晶が映る。一度映ると消える事はないが、たまに映らない事があり不安定・・・
なぞのままである。
でAttinyが表示器を手にいれられた。
でスケッチを書き換えて温度計としてみる。
サーミスタのテストをしたときのスケッチとマージして、Attiny85で計測して表示する。
26度付近の室温を示して、サーミスタを手でつまむと34度とかまですぐ上昇。
温度表示まではできた。
//this is a test for attiny85 thermistor
//measured temperature is displayed on LCD AQM0802A
// PB5[ ]VCC
// PB3[ ]PB2 SCL
// PB4[ ]PB1
// GND[ ]PB0 SDA
#include <TinyWireM.h>
#include <ST7032.h>
ST7032 lcd;
const int PIN_ANALOG_INPUT = 4;
const float V5V = 5.0;//measured voltage +5V pin.
const float R10k = 9980;//measured R R10k.
const float B = 3500;//measured voltage R10k.
const float R0 = 200000;//themistor @ 25 dgree
void setup() {
// put your setup code here, to run once:
// set up the LCD's number of columns and rows:
lcd.begin(8, 2);
lcd.setContrast(10);
// Print a message to the LCD.
lcd.print("Temp(C)=");
// pinMode(3, OUTPUT);
pinMode(PIN_ANALOG_INPUT, INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
int i = analogRead(A2);
float Vm = i * V5V/ 1023.0;
float Rth=R10k*Vm/(V5V-Vm);
float invT=1/B*log(Rth/R0)+1/(273.15+25);
float Ta=1/invT;
float Td=Ta-273.15;
lcd.setCursor(0, 1);
lcd.print(Td);
delay(500);
}
コメント
コメントを投稿