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 ထဲကို ထည့်ပါတယ်။
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 နဲ့ ဆက်ထားတဲ့ အဝင် ပင်နံပါတ် ၇ ကို ဖတ်ကြည့်ထား ပါတယ်။
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment