[iPhone][AVR]iPhoneにAVRマイコン(Atmel ATtiny45)をつなぎ温度計測してみた
ATtiny2313にはADCが無いから、LM35DZやLM60のようなアナログセンサーがつなげないじゃん、ということで、ADCはもとより、温度センサーまで内蔵かつ8ピンDIPで小さいATtiny45を使ってみた。
↑写真は、Dock Connectorの中にどう納めようかと置いてみただけ。
ちなみに、SOIC版のATtiny2313であるATtiny2313-20SUは、国内ではマルツでしか手に入らないみたいだけど、店頭には置いておらず通販専用商品とのことなのでご注意あれ。
ATtiny45はATtiny45で、ADCや、温度センサーはあっても、USARTが無くてiPhoneとシリアル通信ができないじゃん、と思いきや、ソフトウェアで実装する方法があるとのこと。
オプティマイズ: 最新AVRチップ(ATtiny45等のソフトウェアUARTサンプルコード)
また、BASCOM-AVRにも任意のUSART/UARTポート以外のGPIOをシリアルポートとして機能させることができる、ソフトウェアUART機能があるということを知った。以下のソースを見ての通りすげー簡単だ。
というわけで、ソフトウェアUARTが簡単に書けるBASCOM-AVRで書いてみた。
動作は、ATtiny45内蔵の温度センサーから値を取得し、それをソフトウェアUARTポートとして設定したPB1から「9600bps/8/1/NONE」で繰り返し送信するというもの。
BASCOM-AVRのForumにあったスレッド「ATTiny44 ADC reference selection」を参考にさせてもらった。
$regfile = "attiny45.dat" $crystal = 8000000 $hwstack = 24 $swstack = 16 $framesize = 32 Dim Lsb_adc As Byte 'ADC least significant byte Dim Msb_adc As Byte 'ADC most significant byte Dim Adc_value As Word At Lsb_adc Overlay Dim I As Byte Dim Summary As Integer Dim Offset As Word Offset = 281 Config Portb.3 = Output 'LED Open "COMB.1:9600,8,N,1" For Output As #1 'PB1 used for serial output Config Adc = Single , Prescaler = Auto , Reference = Internal_1.1 'ADC Ref 1.1V / Use Temperature Sensor Admux = &B10001111 Start Adc Do Summary = 0 For I = 1 To 100 Set Adcsra.adsc 'Start conversion While Adcsra.adsc = 1 'Wait conversion to complete Wend Lsb_adc = Adcl 'Get least significant byte Msb_adc = Adch Summary = Summary + Adc_value Next I Summary = Summary / 100 'Average Summary = Summary - Offset Print #1 , Summary Set Portb.3 'LED Flash Waitms 200 Reset Portb.3 Waitms 500 Loop End
しかし、取れる値がどうも変だ。ADCから来る最下位が1度に相当するとのことでおおざっぱだし。
こちらのページでの検証によると、ATtiny45等の内蔵温度センサーならびに内蔵基準電圧はアテにならないそうだ。確かに変だ。5Vで動作させているときと、iPhoneの3.3Vで動作させているときで値が全然違うし。8MHz動作と1MHz動作でも全然違う。何だかよく分からない。
よく分かってないので、プログラムや自分の操作が変かもしれない(どこか変だったら教えてください)。
しかし、まがりなりにもATtiny45をiPhoneのDock Connectorからの電源供給で動作させ、内蔵の温度センサーから温度を取得して、iPhoneに送信、iPhoneで受信して表示というところまではできた。勉強になった。
精度的に使いものにならないので、基準電圧を外部から供給し、温度センサーを外部につないでどうなるか、それがDock Connectorに内蔵できそうかという模索に逆戻りだね。
« [iPhone][AVR]iPhoneにAVRマイコン(Atmel ATtiny2313)をつないでみた | Main | [AVR]ATmega644P版ArduinoであるところのSanguinoのキットが到着したので作ってみた »
Recent Comments