2012/02/22

AVR進捗状況

ゼロからはじめて温度計まで作ろうという無茶な計画の進捗状況

まずは進める手順を考えておく。
  1. とりあえずマイコンを動かす(LED点灯)
  2. LED点滅・順次点灯
  3. 7セグメントLED点灯(74LS247にて)
  4. 外部割り込み
  5. A/Dコンバーター
  6. 温度センサーの特性確認
  7. 温度計製作

現状
1完了、2完了、3完了、4完了、5一応完了だが、微調整を要する。6はVout=10mV/℃ × K [℃]のICを利用。A/Dをタイマー割り込みで連続動作。7セグLEDにA/D結果を表示させるための出力(74LS247)完成。2.28完成
履歴
2.22 1,2途中まで完了
2.24 6まで更新。下の7seg LED用の関数をメモ。

メモ
●アナログ回路なら何とか足りていたブレッドボードが小さすぎるので大きいのを用意せねば。
●A/D変換をしようとしてATmega88を使っているが、LED点滅には大げさすぎるのでtinyがあるといいかも。
●はっきりいってインターネット上に情報が少ない。なので基本的にはマニュアルをダウンロードして読み進めるしかない模様。
●でも、基本的操作については日本語サイトを「参考に」することは可能。(そのままコピーはあまり望めない。)
●外部割り込みするとき、GIMSKの第5ビットをセットしなければならないのだが、GIMSK=(1<<5)などとしてもだめで、GIMSK|=0x38;としなければ動かなかった(tiny2313 with AVR Studio 5 & AVRISP mk ii)
●書き込みにブレッドボードは面倒なので、7805を積んだ電源装置 兼 ATmega88PA, ATtiny2313専用書き込み装置を作った。結構便利。DCジャックと7805、ICソケット、書き込み機接続用のピンヘッダで構成。→接続が間違っていたことが発覚し、修正。
参考になるサイト
AVR Libc Home Page (AVR用Cのライブラリ)[EN]
AVRマイコンTIP集[JP]

プログラムメモ
◎ビット操作
bin=0b00000000
のように書いておく。0b**は**という二進数を表す。
ところで、8bitでは2^8=(2^4)^2なので、0b00000000=0x00と16進数で書くこともある。
bin=1<<2のときは、
bin=0b00000100
bin=(1<<2)|(1<<3)は、それぞれの論理和で、
bin=0b00001100
<<と>>はシフトといって、
abcdefgh<<2 -> abcdef00
abcdefgh>>2 -> 00abcdef
などとなる。
◎7セグメントLEDドライバーIC74LS(2)47動作用2桁表示関数

void print7seg(int n){
if(n<100){
int digit1 = n%10;
int digit2 = (n - digit1)/10;
PORTB = digit1 | (digit2<<4);
}
return;
}

PB7..4 1桁目, PB3..0 2桁目のABCDをそれぞれつなぐ。1桁目は10で割ったあまり、2桁目は1桁目を引いて10で割った数字。

◎ADC(ADコンバータ)設定用プログラム(ATmega88PA用)

//ADC SETTING######################################/
//ADC multiplexer selection register (ADMUX)
//REFS 00:AREF internal Vref turned off / 01:AVCC / 11:internal 1.1V
// MUX 0000 ADC0 -> 0111 ADC7
ADMUX = (0<<REFS1) | (0<<REFS0) | (0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (0<<MUX0);
//ADC control and status register A (ADCSRA)===========================
//ADEN ADC enable(1) disable(0)
//ADSC ADC start conversion start conversion by writing 1
//ADATE ADC Auto Trigger Enable
//ADIF ADC Interrupt Flag reset by writing 1
//ADIE ADC Interrupt Enable
//ADPS2:0 ADC prescaler select 101 32
ADCSRA = (1<<ADEN) | (1<<ADATE) | (1<<ADIE) | (1<<ADPS2) | (0<<ADPS1) | (1<<ADPS0);
//ADC control and status register B (ADCSRB)===========================
//ADTS2:0 ADC auto trigger source
//000 free running mode / 001 Analog comparator
//010 External Interrupt Request0
//011 Timer/counter0 cmp. match A
//100 Timer/counter0 cmp. overflow
//101 Timer/counter1 cmp. match B
//110 Timer/counter1 cmp. overflow
ADCSRB = (1<<ADTS2) | (0<<ADTS1) | (1<<ADTS0);
//Digital Input Disable Register0 (DIDR0)===========================
//ADCnD n:0..7 disable digital buffer by writing 1 to corresponding ADCnD register.
DIDR0 = (1<<ADC0D);

*ADC開始の割り込みに使えるタイマー割り込み(CTC)はTimer/counter1 compare matchB。一方でCTCに設定する最大値はAの値。

1 件のコメント:

  1. Betway casino and sportsbook app for iPhone and iPad
    The Betway mobile app 양산 출장안마 is available to iOS and 아산 출장샵 Android users via 속초 출장마사지 its dedicated app, 서귀포 출장마사지 a free betting app for Apple iOS and  Rating: 천안 출장마사지 4 · ‎6 votes

    返信削除