このプロジェクトでは、温度を測定するための回路を設計します。この回路は、線形電圧センサー「LM35」を使用して開発されています。温度は通常、「摂氏」または「ファラハイト」で測定されます。「LM35」センサーは、摂氏のスケールに基づいて出力を提供します。
LM35はデバイスのような3ピントランジスタです。VCC、GND、およびOUTPUTがあります。このセンサーは、温度に基づいて出力に可変電圧を提供します。
上の図に示すように、摂氏+1度の温度上昇ごとに、出力が+ 10mV高くなります。したがって、温度が0°Cの場合、センサーの出力は0Vになり、温度が10°Cの場合、センサーの出力は+ 100mVになり、温度が25°Cの場合、センサーの出力は+ 250mVになります。
したがって、今のところLM35では、可変電圧の形で温度を取得します。この温度依存電圧は、ATMEGA32AのADC(アナログ-デジタルコンバータ)への入力として与えられます。得られた変換後のデジタル値は、16x2LCDに温度として表示されます。
必要なコンポーネント
ハードウェア: ATMEGA32マイクロコントローラー、電源(5v)、AVR-ISPプログラマー、JHD_162ALCD(16x2LCD)、100uFコンデンサー(2個)、100nFコンデンサー、LM35温度センサー。
ソフトウェア: Atmel studio 6.1、progispまたはflashmagic。
回路図と説明
この回路では、ATMEGA32のPORTBがLCDのデータポートに接続されています。ここで、PORTCを通常の通信ポートとして使用したい場合は、ヒューズバイトを変更してPORTCまたはATMEGAのJTAG通信を無効にすることを忘れないでください。16x2 LCDでは、バックライトがある場合は全体で16ピン、バックライトがない場合は14ピンになります。バックライトピンに電力を供給するか、そのままにしておくことができます。14ピンには8つのデータピン(7-14またはD0-D7)、2つの電源ピン(1&2またはVSS&VDDまたはgnd&+ 5v)、コントラスト制御用の3番目のピン(VEE-文字の太さを制御します)があります。示されている)、3つの制御ピン(RS&RW&E)。
回路では、理解を深める柔軟性が得られるため、2つの制御ピンしか使用していないことがわかります。コントラストビットとREAD / WRITEはあまり使用されないため、グランドに短絡することができます。これにより、LCDが最高のコントラストと読み取りモードになります。ENABLEピンとRSピンを制御して、それに応じて文字とデータを送信する必要があります。
LCD用に行われる接続を以下に示します。
PIN1またはVSS ------------------グラウンド
PIN2またはVDDまたはVCC ------------ + 5v電源
PIN3またはVEE ---------------地面(初心者に最適な最大のコントラストを提供します)
PIN4またはRS(レジスタ選択)--------------- uCのPD6
PIN5またはRW(読み取り/書き込み)-----------------グラウンド(LCDを読み取りモードにすると、ユーザーの通信が容易になります)
PIN6またはE(有効)------------------- uCのPD5
PIN7またはD0 ----------------------------- uCのPB0
PIN8またはD1 ----------------------------- uCのPB1
PIN9またはD2 ----------------------------- uCのPB2
PIN10またはD3 ----------------------------- uCのPB3
PIN11またはD4 ----------------------------- uCのPB4
PIN12またはD5 ----------------------------- uCのPB5
PIN13またはD6 ----------------------------- uCのPB6
PIN14またはD7 ----------------------------- uCのPB7
回路では8ビット通信(D0-D7)を使用していることがわかりますが、これは必須ではなく、4ビット通信(D4-D7)を使用できますが、4ビット通信プログラムでは少し複雑になるため、8ビットを選択しましたコミュニケーション。
したがって、上記の表からの単なる観察から、LCDの10ピンをコントローラーに接続します。8ピンはデータピンで、2ピンは制御用です。センサーによって提供される電圧出力は完全に線形ではありません。うるさいものになります。ノイズを除去するには、図に示すように、センサーの出力にコンデンサーを配置する必要があります。
先に進む前に、ATMEGA32AのADCについて話す必要があります。ATMEGA32Aでは、PORTAの8つのチャネルのいずれかにアナログ入力を与えることができます。すべてが同じであるため、どのチャネルを選択してもかまいません。PORTAのチャンネル0またはPIN0を選択します。ATMEGA32Aでは、ADCは10ビットの分解能であるため、コントローラーはVref / 2 ^ 10の最小変化を検出できるため、基準電圧が5Vの場合、5/2 ^ 10 = 5mVごとにデジタル出力増分が得られます。 。したがって、入力が5mV増加するごとに、デジタル出力で1ずつ増加します。
次に、次の条件に基づいてADCのレジスタを設定する必要があります。
1.まず、ADCでADC機能を有効にする必要があります。
2.室温を測定しているので、100度(LM35の1000mV出力)を超える値は実際には必要ありません。したがって、ADCの最大値またはリファレンスを2.5Vに設定できます。
3.コントローラーにはトリガー変換機能があります。つまり、ADCのレジスタを連続フリーランニングモードで実行するように設定する必要がないため、ADC変換は外部トリガーの後にのみ実行されます。
4.どのADCでも、変換の周波数(アナログ値からデジタル値)とデジタル出力の精度は反比例します。したがって、デジタル出力の精度を高めるには、より低い周波数を選択する必要があります。より少ないADCクロックの場合、ADCの先行販売を最大値(128)に設定しています。1MHZの内部クロックを使用しているため、ADCのクロックは(1000000/128)になります。
ADCを使い始めるために知っておく必要があるのはこれらの4つだけです。上記の4つの機能はすべて、2つのレジスタによって設定されます。
赤(ADEN):このビットはATMEGAのADC機能を有効にするために設定する必要があります。
BLUE(REFS1、REFS0):これらの2ビットは、基準電圧(またはこれから与える最大入力電圧)を設定するために使用されます。基準電圧を2.56Vにしたいので、REFS0とREFS1の両方を表で設定する必要があります。
LIGHT GREEN(ADATE):ADCを継続的に実行するには、このビットを設定する必要があります(フリーランニングモード)。
PINK(MUX0-MUX4):これらの5ビットは、入力チャネルを通知するためのものです。ADC0またはPIN0を使用するため、表のようにビットを設定する必要はありません。
ブラウン(ADPS0-ADPS2):これらの3ビットは、ADCのプリスケーラを設定するためのものです。128のプリスケーラを使用している場合、3ビットすべてを設定する必要があります。
DARK GREEN(ADSC):ADCが変換を開始するために設定されたこのビット。このビットは、変換を停止する必要があるときにプログラムで無効にすることができます。
Arduinoでこのプロジェクトを作成するには、このチュートリアルを参照してください:Arduinoを使用したデジタル体温計
プログラミングの説明
TEMPARATURE MEASUREMENTの動作は、以下に示すCコードのステップバイステップで最もよく説明されています。
#include //ピンのデータフロー制御を有効にするヘッダー
#define F_CPU 1000000 //コントローラーの水晶周波数を接続
#include
#define E 5 // LCDイネーブルピンに接続されているため、PORTDの5番目のピンに「enable」という名前を付けます
#define RS 6 // LCD RSピンに接続されているため、PORTDの6番目のピンに「registerselection」という名前を付けます
void send_a_command(unsigned char command);
void send_a_character(unsigned char character);
void send_a_string(char * string_of_characters);
int main(void)
{{
DDRB = 0xFF; // portBとportDを出力ピンとして配置
DDRD = 0xFF;
_delay_ms(50); // 50msの遅延を与える
DDRA = 0; // portAを入力として使用します。
ADMUX-=(1 <
ADCSRA-=(1 <0)
{{
send_a_character(* string_of_characters ++);
}
}