Search This Blog

Wednesday, May 26, 2010

Using SPI on Low-End Microcontroller

SPI က IC အချင်းချင်း ဆက်သွယ်ဖို့ အတွက် ရိုးရှင်းပြီး ထိရောက်တဲ့ bus တစ်ခုပါ။ Real Time Clock၊ EEPROM အစရှိတဲ့ chip အများစုမှာ ဆက်သွယ်ဖို့ အတွက် SPI ဒါမှမဟုတ် I2C bus တွေ ပါလေ့ရှိပါတယ်။ ထူးခြားတဲ့ အချက် မရှိရင် တော့ SPI သုံးရတာကို I2C ထက်ပိုကြိုက်ပါတယ်။ သူက ပိုမြန်ပြီး ပိုရှင်းလို့ပါ။ သူ့ကို software နဲ့ ဖန်တီး emulate လုပ်ဖို့လဲ လွယ်ပါတယ်။
တစ်ခါက 10MHz ရှိတဲ့ SPI ပါတဲ့ LED driver chip တစ်ခုကို လုပ်ဆောင်မှု အရမ်းမမြင့်တဲ့ 4MHz microcontroller နဲ့ တွဲသုံးဖြစ်ပါတယ်။ Design လုပ်တုန်းက ဈေးသက်သာ ဖို့ အတွက် အဓိက ထားလို့ပါ။ Microcontroller ကလဲ တစ် ဒေါ်လာတောင် မပေးရပါဘူး။ ဒါပေမယ့် သူ့မှာ firmware နဲ့ font တွေသိမ်းဖို့ flash အလုံအလောက် ရှိပါတယ်။ အစကတော့ SPI ကို ဒေတာ ပို့ဖို့၊ လက်ခံဖို့ အတွက် ပုံမှန် အတိုင်းပဲ နှေးတဲ့ အဝေးပို့ RS232 တို့၊ CAN bus တို့မှာ သုံးနေကြ အတိုင်း circular buffer ကို hardware interrupt နဲ့ တွဲသုံးပါတယ်။ အဲဒါက ပုံမှန် အခြေအနေမှာ တော့ အိုကေ ပါတယ်။ ပြဿနာ က ကြီးမားတဲ့ 96x16 dot-matrix LED ဆိုင်းဘုတ် ကြီးကို တစ်စက္ကန့် ၁၂၅ ကြိမ် မောင်းချင်ပြီး CPU ကို အသုံးချ တဲ့ utilization က အရမ်းမြင့်နေတာပါ။ အကျိုးဆက် အနေနဲ့ စာသားတွေကို ဘေးတိုက် ပြေးတာ အစရှိတဲ့ ဂရပ်ဖစ် လုပ်ဆောင်မှုတွေကို ကိုင်တွယ်ရတဲ့ အခါ ကောင်းကောင်း မလုပ်နိုင်တော့ပဲ ဖုတ်လှိုက် ဖုတ်လှိုက် ဖြစ်ချင်လာ ပါတယ်။ ဒါနဲ့ပဲ အရင်းအမြစ်ကို စာရင်းစစ် ကြည့်လိုက်တော့ အဓိက အသုံးအများဆုံး ဖြစ်တဲ့၊ CPU က အမြဲတမ်းလိုလို လုပ်ဆောင်နေ ရတဲ့ SPI function က interrupt တွေ၊ circular buffer တွေနဲ့ ဖောင်းပွ နေပြီး သူ့ကို ထိရောက်အောင် ပြင်နိုင်ရင် CPU က တော်တော် သက်သာသွားမယ် ဆိုတာ တွေ့ရပါတယ်။ ပုံမှန်ကတော့ hardware interrupt ကိုသုံးတာက ပိုထိရောက်၊ ပိုမြန်တာ မှန်ပါတယ်။ ဒါပေမယ့် ဒီ ကိစ္စမှာတော့ ပုံမှန် မဟုတ်ပါဘူး နှေးတဲ့ CPU က အရမ်းမြန် အရမ်းအသုံးပြုဖို့ လိုတဲ့ SPI ကို မောင်းဖို့ လိုနေလို့ပါ။ SPI ကို ဒေတာ တစ်လုံး ပို့တိုင်း CPU cycle တွေ အရမ်းစားတဲ့ ပို့တဲ့ interrupt function၊ လက်ခံတဲ့ interrupt function တွေကို လုပ်နေရလို့ပါ။ နောက်တော့ polling ဒါမှမဟုတ် emulation ကို သုံးပြီး SPI ကို ဆက်သွယ်တာက interrupt ထက် ပိုမြန်တာကို တွေ့ရပါတယ်။ ဒါတောင် polling ကိုသုံးမယ်ဆိုရင် hardware က လက်ခံတဲ့ bus speed ကိုပဲ သုံးလို့ရမှာပါ။ ဒါနဲ့ SPI function ကို ပိုထိရောက်အောင် firmware ကို ပြင်လိုက်တော့ ကောင်းသွားပါတယ်။ ဒါကြောင့် SPI ကို emulating လုပ်ရင် ကောင်းတဲ့ အချက် တစ်ချို့ ကို ကျွန်တော် တို့ရဲ့ အတွေ့အကြုံ အရ ပြောချင်တာက
  1. SPI ကို software မှာ emulate လုပ်ရင် ပိုမြန်တဲ့ အခါတွေ လည်း ရှိပါတယ်။
  2. အရည်အသွေး လည်း ပိုကောင်းပါတယ်။ ဘာကြောင့်လဲ ဆိုတော့ ရိုးရှင်းတာရယ်၊ interrupt ကြောင့် ဖြစ်လာနိုင်တဲ့ ပြဿနာ အများစုကနေ ရှောင်ပြီးသား ဖြစ်သွားလို့ပါ။
  3. ရိုးရှင်းတဲ့ code လေးကို ရေးရတာ ပိုမြန်၊ ပိုလွယ်ကူ၊ ပိုပြီး အမှားနည်းနိုင်ပါတယ်။ မဟုတ်ရင် အသစ်သုံးမယ့် microcontroller တိုင်း အတွက် အမျိုးမျိုးသော register setting တွေနားလည်ဖို့ datasheet ကို အချိန်ပေး ဖတ်ဖို့ လိုမှာပါ။
  4. အကောင်းဆုံးကတော့ portable ဖြစ်ပြီး hardware ကို မမှီခိုတော့ တာပါပဲ။
SPI မှာ တိကျတဲ့ formal standard မရှိပါဘူး။ ပုံမှန် shift register တစ်ခုလို ရှင်းလွန်းလို့ပါ။ Timing diagram ကိုမြင်ရုံနဲ့ နားလည်နိုင်ပါတယ်။ အောက်က နမူနာက SPI မျိုးကွဲ တစ်ခုကို emulate လုပ်တဲ့ C function တစ်ခုပါ။
//-------------------------------------
unsigned char spi(unsigned char d)
{
    unsigned char i;
    SCLK=1;
    EN=1;
    for(i=0;i<8;i++)
    {
        MOSI=(d & 0x80)?1:0;        
        //Delay(period/2)-optional for slower SPI bus speed
        SCLK=0;
        d<<=1;        
        d|=MISO;
        //Delay(period/2)-optional for slower SPI bus speed
        SCLK=1;
    }
    EN=0;
    return d;
}
//-------------------------------------

Tuesday, May 25, 2010

Astable Multivibrator using Op-amp

မိတ်ဆွေ တစ်ယောက်က op-amp circuit တစ်ခုရဲ့ oscillation frequency ကို တွက်ထုတ်ဖို့ အကူ အညီ တောင်းလာ ပါတယ်။ တိုင်းကြည့်လို့ ရတဲ့ frequency က ၁၀၉ kHz ရှိတယ်လို့ ဆိုပါတယ်။ သူက ထွက်လာတဲ့ oscillation frequency နဲ့ သုံးထားတဲ့ passive component တွေရဲ့ ဆက်သွယ်မှု ကို တွက်ထုတ် ချင်တာ ပါ။ ဒီလို analog circuits တွေကို မတွေ့ ဖြစ်တာ တော်တော် ကြာနေ ပေမယ့် ကြည့်ပေးမယ် လို့ သဘောတူ လိုက်ပါတယ်။ ဒါနဲ့ သူက ဆားကစ် ပတ်လမ်း ပုံကို ဖုန်းနဲ့ ဓာတ်ပုံရိုက် ပြီး MMS နဲ့ ပို့ လိုက်ပါတယ်။ ကြည့် လိုက်တော့ သူ့ရဲ့ တည်ဆောက်ပုံ က ရိုးရှင်းပြီး တွေ့ နေကြ ပုံစံ မျိုး ဖြစ်နေတာနဲ့ frequency ကို တွက်ကြည့် ပြီး ဖုန်းနဲ့ ဓာတ်ပုံ ပြန်ရိုက်၊ အောက်က ပုံတွေကို သူဆီကို MMS နဲ့ ပြန် ပို့ လိုက်ပါတယ်။

Sunday, May 2, 2010

Choosing name for our daughter

သမီးလေး မွေးလာတော့ သူ့အတွက် နာမည် ပေးဖို့ စဉ်းစားရင်း ဖတ်မိတဲ့ စာအုပ်တွေထဲက ရယ်၊ ကိုယ့်ဟာကိုယ် ကြိုက်တဲ့ အချက် လေးတွေရယ် ကိုပြန်ပြီး အမှတ်တရ တင်လိုက်ပါတယ်။
  1. ပထမဆုံး စဉ်းစားတဲ့ အချက်က သမီး ငယ်စဉ်ခါရော၊ လူကြီးဖြစ်လာတဲ့အခါရောပါ အသက် အရွယ် မရွေး အဆင်ပြေမယ့် နာမည်မျိုးပါ။
  2. ကျွန်တော်တို့ ရွေးလိုက်တဲ့ နာမည် ကြောင့် သမီးလေး အနောက် အပြောင် ခံရနိုင် စရာ အကြောင်းလုံးဝ မရှိတဲ့ နာမည်မျိုး ဖြစ်အောင်လည်း အထူး စိုက်ရပါသေးတယ်။
  3. အဓိပ္ပာယ် ကောင်းတဲ့ နာမည်လေး ဖြစ်ရင်တော့ ပိုကောင်းတာပေါ့ နော်။
  4. ရိုးရာ အစဉ်အလာ မပျက် မြန်မာ နာမည် ပဲပေးချင်ပါတယ်။ နေ့နံ ကိုက်တဲ့ ဟာမျိုးလည်း ဖြစ်ချင်ပါသေးတယ်။ သမီးတုန်းက တော့ မွေးဖို့ ခန့်မှန်းထားတဲ့ ရက်က တနင်္ဂနွေ ဆို့တော့ 'အေး' နဲ့စဖို့ စဉ်းစားထားတာ တစ်ကယ်မွေးတော့ စနေ နေ့မှာ။
  5. ကဗျာ တစ်ပုဒ်လို ရွတ်ဆိုရ ချော မွေ့ တဲ့ နာမည်မျိုး၊ သီချင်းလေး တစ်ပုဒ် လို အသံထွက် ငြိမ့်ညောင်းတဲ့ နာမည် မျိုးလည်း ဖြစ်ချင် ပြန်ရော။
  6. အဖေ ဆီက နာမည်တစ်လုံး၊ အမေ ဆီက နာမည် တစ်လုံး စီလည်း သမီးနာမည် မှာ ပါစေချင်သေးတယ်။
  7. ဖြစ်ချင်တာတွေ၊ ထည့်စဉ်းစား ထားတာ တွေ ဘယ်လိုပဲ ရှိရှိ ၊ အခု စဉ်းစား နေတဲ့ နာမည်က သမီးလေး အတွက် ဆိုတော့ သမီးလေး ဘဝ တစ်လျှောက်လုံး သူကြိုက်မည့် နာမည်မျိုး ဖြစ်ဖို့သာ အရေးအကြီး ဆုံးလို့ ကျွန်တော် တို့ ဘာသာ ပြန်ပြီး သတိပေးရ ပါသေး တယ်။