Search This Blog

Saturday, June 29, 2013

Using Analog to Digital Converter of AT89C51CC01 Microcontroller

AT89STK-06 starter kit ကိုသုံးပြီး 8051 microcontroller တစ်ခုဖြစ်တဲ့ AT89C51CC01 အတွက် analog to digital converter (ADC) အဝင် ကိုဖတ်တဲ့ C ကုဒ် တစ်ချို့ကို ရေးထားပါတယ်။ အဲဒီ မိုက်ခရို ကွန်ထရိုလာ မှာ 10 bit resolution ရှိတဲ့ multiplexed လုပ်ထားတဲ့ အဝင် ၈ ခုရှိပါတယ်။ ဒီနမူနာမှာ variable resister နဲ့ ဆက်ထားတဲ့ အဝင် ပင်နံပါတ် ၇ ကို ဖတ်ကြည့်ထား ပါတယ်။
void SysADCInit()//Initialize AD7
{
 ADCF=0x80;
 ADCON=0x67;
}
ui16 SysADCRead()//Read AD7
{
 ui16 v;
 ADCON|=0x08;
 while((ADCON & 0x10)==0);
 ADCON&=0xEF;
 v= (ADDH << 2)+(ADDL);
 return v;
}
ပထမဆုံး ADC configuration register (ADCF) မှာ သုံးမယ့် ADC အဝင်ကို သတ်မှတ်ပေးပါမယ်။ Bit 0 က အဝင် ၀ အတွက်၊ bit 1 က အဝင် ၁ အတွက် အသီးသီး ဖြစ်ကြတာမို့ ဒီနမူနာမှာ 0x80 ထည့်ပြီး အဝင်နံပါတ် ၇ တစ်ခုထဲပဲ enable လုပ်လိုက်ပါတယ်။ Multiplexed လုပ်ထားတဲ့ အဝင်တွေ ဖြစ်တာမို့ တစ်ခါဖတ်ရင် အဝင်တစ်ခုပဲ ဖတ်နိုင်ပြီး၊ မဖတ်ခင် တိုင်းမှာ ADCON မှာ လက်ရှိ ဖတ်မယ့် အဝင်ကို သတ်မှတ် ပေးရပါတယ်။ ဒီနမူနာမှာ best precision နဲ့ ADC ကို enable လုပ်၊ အဝင်ကတော့ ၇ တစ်ခုပဲရှိတာမို့ တစ်ခါထည့်ပြီးတာနဲ့ အဲဒီမှာ တစ်ခြား ဂဏန်း ပြောင်း မထည့်မချင်း ဖတ်တိုင်း ဖတ်တိုင်း ၇ ကိုပဲ ဖတ်ပါမယ်။ ADCON bit တစ်ခုချင်းစီရဲ့ အဓိပ္ပာယ် ကို အောက်က ပုံမှာ ကြည့်နိုင်ပါတယ်။
ဖတ်တဲ့ procedure မှာတော့ ADC ကို စစေတဲ့ bit ကို ၁ ပေးလိုက် ပြီး ဒစ်ဂျစ်တယ် ပြောင်းတဲ့လုပ်ငန်း စပါတယ်။ နောက်ပြီးမပြီး စောင့်ပြီးစစ်ပါတယ်။ ဒီလို low end microcontroller မှာ interrupt ကို သုံးတာ ကို အားမပေးပါဘူး။ ဘာကြောင့် လဲဆိုရင် ပြောင်းတာက ၁၆ မိုက်ခရိုစကကန့် ပဲကြာတဲ့အတွက် လုပ်ဆောင်မှု က ပိုကောင်းမလာ နိုင်ဘူးလို့ ယူဆလို့ပါ။ ပြီးရင် အဲ ဒီ flag bit ကို ပြန်ရှင်းပါမယ်။ ပြောင်းလို့ ရတဲ့ ရလာဒ် က ၁၀ bit ဖြစ်တာကြောင့် ADDH ထဲမှာ နေရာ ၇ နဲ့ ၆ မှာရှိတဲ့ မှာ၂ bits ရယ်၊ ADDL ထဲမှာ ရှိတဲ့ ၈ bits ရယ်ကို ပြန်ပေါင်းပြီး ၁၆ bits ရှိတဲ့ နေရာ v ထဲကို ထည့်ပါတယ်။

No comments:

Post a Comment