Friday, 26 December 2008
TX Level & RX Gain related to NOISE
Monday, 22 December 2008
DTMF (Dual Tone Multi Frequency) (Part - 1)
DTMF ရဲ့အားသာခ်က္က Noise အလြန္နည္းၿပီးေတာ့ Security အလြန္ေကာင္းပါတယ္။ အားနည္းခ်က္ကေတာ့ DTMF start-up time ၾကာတာပါပဲ။ သူ႔ရဲ့ Tone pair (frequency pair) ေတြနဲ႔ Key တစ္ခုခ်င္းစီကို ကိုယ္စားျပဳတဲ့ ဇယားေတြကို ေအာက္မွာျပထားပါတယ္။ ဒါေတြက တစ္ကမာၻလံုးက သံုးေနတဲ့ DTMF tone ေတြပါ။
ကၽြန္ေတာ္အခုသံုးတဲ့ CMX865 မွာေတာ့ start-up time က ၾကာပါတယ္ one key အတြက္ 40 ms အနည္းဆံုးပါ။ ကၽြန္ေတာ္လိုခ်င္တဲ့ 200 Baud မရႏိုင္တဲ့အတြက္ DTMF ကိုမသံုးႏိုင္ပါဘူး။ Single tone ကိုပဲ သံုးလိုက္ပါတယ္။ Noise အတြက္ေတာ့ Software/ Hardware Filter ေတြထပ္ခံရမယ္ထင္တယ္။ ၿပီးေတာ့ Digital & Analogue ground ကိုခြဲရပါလိမ့္မယ္။



Wednesday, 16 July 2008
Operate Speed Mode Servo Motor using PWM
Wednesday, 9 July 2008
Pulse Width Modulation (PWM) over Analog Communication
ဥပမာ ။ ။ A ကိုပို႔ခ်င္တယ္ဆိုၾကပါဆို႔ ASCII အေနနဲ႔ဆိုရင္ 65၊ Hexa နဲ႔ဆိုရင္ 41။ သူ႕ကို ပံုမွန္ serial communication (UART) နဲ႔ပို႔မယ္ဆိုရင္ Start bit, Data, Stop bit ဆိုတဲ့ protocol နဲ႔ ႐ိုး႐ိုးတန္းတန္းပို႔ပါတယ္။ ထံုးစံအတိုင္း Low/ High နဲ႔ေပါ့။ Binary digit ဆိုရင္ 1000001 ေပါ့။ အဲဒီေနရာမွာ Frequency နဲ႔က်ေတာ့ Low = 2400 Hz, High = 3000 Hz ထားတယ္ဆိုပါစုိ႔။ Low ေတြျဖစ္တဲ့အခ်ိန္မွာ 24 KHz ကိုလႊတ္ၿပီးေတာ့ High ေတြျဖစ္တဲ့အခ်ိန္မွာ 30 Kz ကိုလႊတ္တယ္။ ၁၀ ဆ လႊတ္ရတာကေတာ့ Resolution အတြက္ပါ။ အဆမ်ားေလေလ Resolution ပိုေကာင္းေလေပါ့။ timing က 5ms ဆိုရင္ 1 bit ကို 5ms ထားၿပီးလႊတ္ရတာေပါ့။ ျပန္ဖမ္းတဲ့အခါမွာလည္း အဲဒီ protocol အတိုင္းဖမ္းရပါတယ္။
တကယ္ေတာ့ FM Radio ေတြလည္း အဲလိုပဲ လႊင့္ေလ့ရွိပါတယ္။ Frequency ျမင့္ေလ timing နဲ႔ filtering လုပ္ရတာေတြ ခက္လာေလပါပဲ။ ေနာက္ထပ္အေရးႀကီးတာက Noise ပါ။
Monday, 30 June 2008
Pulse Width Modulation (PWM) with Rabbit 3000 MCU
PWM (Pulse Width Modulation) ကို ေနာက္ပိုင္း MCU ေတြမွာ ေတာ္ေတာ္ေတြ႕လာရပါတယ္။ ကၽြန္ေတာ္အခုျပမွာက Rabbit 3000 နဲ႔ပါ။ အရင္ကၽြန္ေတာ္သံုးခဲ့တဲ့ MCU ေတြ Cygnal, NEC, ARM မွာ ဒီ function မပါတဲ့အတြက္ Timer ေတြ၊ Interrupt ေတြနဲ႔ ႐ႈပ္ေနေအာင္တြက္ရ ေရးခဲ့ရပါတယ္။ ၿပီးေတာ့ Time interval တိက်မႈလည္း မရွိပါဘူး။ ဒီ PWM function ကေတာ့ interval တိက်မႈရွိတဲ့အျပင္ Duty Cycle ကိုလည္း လိုအပ္သလို (%) နဲ႔ထုတ္ေပးလို႔ရပါတယ္။ တကယ္ေတာ့ MCU ေတြရဲ႕အားသာခ်က္ပါသလို compiler (core module) ေတြရဲ႕စြမ္းရည္ကလည္း အရမ္းျမင့္လာလို႔ပါ။ ဒီမွာ pwm_set ၄ ခါေရးရတာကေတာ့ Rabbit 3000 မွာ PWM Channel ၄ ခုပါတဲ့အတြက္ျဖစ္ပါတယ္။ Duty cycle တစ္မ်ိဳးစီနဲ႔ ေရးျပထားတာပါ။
void main()
{
unsigned long freq;
int pwm_options;
// request 10kHz PWM cycle (will select closest possible value)
freq = pwm_init(10000);
printf("Actual PWM frequency = %d Hz\n", freq);
pwm_options = 0;
pwm_set(0, 0.10 * 1024, pwm_options);
pwm_set(1, 0.25 * 1024, pwm_options);
pwm_set(2, 0.50 * 1024, pwm_options);
pwm_set(3, 0.99 * 1024, pwm_options);
while(1); //keep running the program
}

