このチュートリアルでは、FLEXセンサーをATMEGA8マイクロコントローラーとインターフェースします。ATMEGA8では、この作業を行うために10ビットADC(アナログ-デジタル変換)機能を使用します。これで、ATMEGAのADCは+ 5Vを超える入力を受け取ることができなくなりました。
フレックスセンサーとは何ですか?
FLEXセンサは、その形状が変更されたときにその抵抗値が変化するトランスデューサです。下図に示します。
このセンサーは、直線性の変化を感知するために使用されます。そのため、FLEXセンサーを曲げると、抵抗が大幅に曲がります。これを下図に示します。
ここで、この抵抗の変化を電圧の変化に変換するために、分圧回路を使用します。この抵抗ネットワークには、1つの一定の抵抗と他の可変の抵抗があります。下の図に示すように、ここでのR1は一定の抵抗であり、R2は抵抗として機能するFLEXセンサーです。分岐の中点が測定されます。抵抗R2が変化すると、Voutもそれに比例して変化します。したがって、これにより、直線性によって変化する電圧が得られます。
ここで注意すべき重要なことは、ADC変換のためにコントローラーが受け取る入力が50µAmpと低いことです。分圧器のVoutから引き出される電流がエラー率を増加させるため、抵抗ベースの分圧器のこの負荷効果は重要です。今のところ、負荷効果について心配する必要はありません。
2つの抵抗を使用して分周回路を形成し、25ボルトのVinに対して5ボルトのVoutを取得します。したがって、実際の入力電圧を取得するには、プログラムでVout値に「5」を掛けるだけです。
必要なコンポーネント
ハードウェア: ATMEGA8、電源(5v)、AVR-ISPプログラマー、JHD_162ALCD(16x2LCD)、100uFコンデンサー、100nFコンデンサー(5個)、100KΩ抵抗。
ソフトウェア: Atmel studio 6.1、progispまたはflashmagic。
回路図と動作説明
回路では、ATMEGA8のPORTDはデータポートLCDに接続されています。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ピンを制御して、それに応じて文字とデータを送信する必要があります。
ATmega8とのLCD接続は次のとおりです。
PIN1またはVSSからグラウンドへ
PIN2またはVDDまたはVCCから+ 5v電源
PIN3またはVEEto Ground(初心者に最適な最大のコントラストを提供します)
PIN4またはRS(レジスタ選択)をuCのPB0に
PIN5またはRW(読み取り/書き込み)をグランドに接続(LCDを読み取りモードにすると、ユーザーの通信が容易になります)
uCのPB1へのPIN6またはE(有効化)
uCのPIN7またはD0からPD0
uCのPIN8またはD1からPD1
uCのPIN9またはD2からPD2
uCのPIN10またはD3からPD3
uCのPIN11またはD4からD4
uCのPIN12またはD5からPD5
uCのPIN13またはD6からPD6
uCのPIN14またはD7からPD7
回路では8ビット通信(D0-D7)を使用していることがわかりますが、これは必須ではありません。4ビット通信(D4-D7)を使用できますが、4ビット通信プログラムでは少し複雑になるため、8ビットを使用しました。コミュニケーション。(このチュートリアルも確認してください:AVRマイクロコントローラーとの16x2 LCDインターフェース)
したがって、上記の表からの単なる観察から、LCDの10ピンをコントローラーに接続しています。8ピンはデータピンで、2ピンは制御用です。
R2の両端の電圧は完全に線形ではありません。うるさいものになります。ノイズを除去するために、図に示すように、分圧器回路の各抵抗の両端にコンデンサが配置されます。
ここでの1Kポットは、ADCの精度を調整するためのものです。それでは、ATMEGA8のADCについて説明しましょう。
ATMEGA8では、PORTCの4つのチャネルのいずれかにアナログ入力を与えることができます。すべて同じであるため、どのチャネルを選択してもかまいません。PORTCのチャネル0またはPIN0を選択します。
ATMEGA8では、ADCは10ビットの分解能であるため、コントローラーはVref / 2 ^ 10の最小変化の検出を検出できるため、基準電圧が5Vの場合、5/2 ^ 10 = 5mVごとにデジタル出力増分が得られます。 。したがって、入力が5mV増加するごとに、デジタル出力で1ずつ増加します。
次に、次の条件に基づいてADCのレジスタを設定する必要があります。
1.まず、ADCでADC機能を有効にする必要があります。
2.ADC変換の最大入力電圧は+ 5Vになります。したがって、ADCの最大値またはリファレンスを5Vに設定できます。
3.コントローラーにはトリガー変換機能があります。これは、ADCのレジスタを連続フリーランニングモードで実行するように設定する必要がないため、ADC変換が外部トリガーの後にのみ行われることを意味します。
4.どのADCでも、変換の周波数(アナログ値からデジタル値)とデジタル出力の精度は反比例します。したがって、デジタル出力の精度を高めるには、より低い周波数を選択する必要があります。通常のADCクロックの場合、ADCの先行販売を最大値(2)に設定しています。1MHZの内部クロックを使用しているため、ADCのクロックは(1000000/2)になります。
ADCを使い始めるために知っておく必要があるのはこれらの4つだけです。
上記の4つの機能はすべて、2つのレジスタによって設定されます。
赤(ADEN):このビットはATMEGAのADC機能を有効にするために設定する必要があります。
BLUE(REFS1、REFS0):これらの2ビットは、基準電圧(またはこれから与える最大入力電圧)を設定するために使用されます。基準電圧を5Vにしたいので、表でREFS0を設定する必要があります。
黄色(ADFR):ADCを継続的に実行するには、このビットを設定する必要があります(フリーランニングモード)。
PINK(MUX0-MUX3):これらの4ビットは、入力チャネルを通知するためのものです。ADC0またはPIN0を使用するため、表のようにビットを設定する必要はありません。
ブラウン(ADPS0-ADPS2):これらの3ビットは、ADCのプリスケーラを設定するためのものです。2のプリスケーラを使用しているため、1ビットを設定する必要があります。
DARK GREEN(ADSC):ADCが変換を開始するために設定されたこのビット。このビットは、変換を停止する必要があるときにプログラムで無効にすることができます。
ATmega8とインターフェースするFLEXセンサーは、以下のCコードで段階的に説明されています。