Showing posts with label Modulation. Show all posts
Showing posts with label Modulation. Show all posts

Friday, 26 December 2008

TX Level & RX Gain related to NOISE

ကၽြန္ေတာ္ ဒုကၡေရာက္ခဲ့တဲ့ အေတြ႔အၾကံဳေလးတစ္ခုပါ။ Modem data communication Project ေလးတစ္ခုကို ေရးတုန္းက Terminal ႏွစ္ခုကို Single Tone Dual Frequency (V.21 300bps FSK High band, Bell 103 300bps FSK High band, V.23 FSK 75bps, Bell 202 FSK Protocols) နဲ႔ပို႔ေတာ့ နဲ႔ Tx Level & Rx Gain ေတြကို steps ေရြးလို႔ရေအာင္ေရးတာေပါ့။ အဲဒီမွာ ျပႆနာက Transmit ပိုင္းမွာေတာ့ အိုေကပဲ။ Receive ပိုင္းက်ေတာ့ Noise ေတြ၀င္လာပါေလေရာ။ ကၽြန္ေတာ္က Tx level နဲ႔ Rx gain ေတြကို ခ်ိန္တဲ့ေနရွာမွာ step တစ္မ်ိဳးေရြးလိုက္တာနဲ႔ ၂ ခုလံုး Set ျဖစ္သြားေအာင္ ေရးထားလိုက္တယ္။ တစ္ကယ္ေတာ့ Tx level > Rx gain ျဖစ္ရမယ္ေလ။ ႏို႔မို႔ဆို Noise ေတြကိုပါ Rx ဘက္က Amplify လုပ္လိုက္ေတာ့ garbage data အမ်ားႀကီး ထြက္လာတာေပါ့ေလ။ Software Protocol ဘက္ကေန အမ်ိဳးမိ်ဴး Filter လုပ္တယ္။ မရဘူး။ ေနာက္ဆံုး Rx gain ကို ေလွ်ာ့ခ်ၿပီး လႊင့္ၾကည့္မွ အိုေကသြားတယ္။ Try in Error လုပ္လိုက္တာပါ။ Theory ေတြကို မပိုင္ခဲ့တဲ့ ဆိုးက်ိဳးေပါ့ဗ်ာ။

Monday, 22 December 2008

DTMF (Dual Tone Multi Frequency) (Part - 1)

DTMF Key Pad ေလးေတြကို လူတိုင္းသံုးဘူးၾကမွာပါ။ ကၽြန္ေတာ္ေျပာခ်င္တာက အဲဒီ DTMF ရဲ့ Encoding and Decoding အေၾကာင္းေတြပါ။

DTMF ဆိုတာက ကၽြန္ေတာ္ဟိုအရင္ကေရးဘူးတဲ့ PWM နဲ႔ယွဥ္ေျပာရမယ္ဆိုရင္ PWM က Single Tone အတြက္ Dual Frequency ပါ။ ဥပမာ 1 အတြက္ 2 KHz Frequency နဲ႔ 0 အတြက္က 1.5 KHz Frequency ဆိုပါစို႔။ DTMF က်ေတာ့ 0 အတြက္ 941, 1633 Hz ထုတ္ၿပီးေတာ့ 1 အတြက္ 697, 1209 Hz ထုတ္တာပါ။ 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F ေတြအတြက္လည္း Tone pair ေတြရွိပါတယ္။ သေဘာကေတာ့ A (0x65) ဆိုတဲ့ character ကို transmit လုပ္ဖို႔အတြက္ PWM က 0110 0101 = 2000, 1500, 2000, .... Hz ေတြထုတ္ရၿပီးေတာ့ DTMF ကေတာ့ 6 5 = 770-1477, 770-1336 Hz ေတြ ထုတ္ရတဲ့သေဘာပါ။ သေဘာကေတာ့ PWM နဲ႔ဆိုရင္ 8-bit အတြက္ ၈ ခါပို႔ရၿပီးေတာ့ DTMF နဲ႔ဆိုရင္ 8-bit အတြက္ ၂ ခါပဲ ပို႔ရတဲ့သေဘာပါ။

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

PWM အေၾကာင္းကို ကၽြန္ေတာ္ေရးေနတာမ်ားပါၿပီ ဘယ္ေနရာေတြမွာ ဘယ္လိုသံုးလည္း ဆိုတာကို ဆက္ေရးပါမယ္။ ကၽြန္ေတာ္သံုးဘူးတဲ့ ေနရာေတြေပါ့။ ပထမတစ္ခုက Servo Motor (Direction Mode) မွာပါ။ Motor ရဲ႕ Revolution မွာ လိုအပ္တဲ့ Pulse ေတြေပးႏုိင္ေအာင္ သံုးပါတယ္။ Pulse ေတြက အေသေပးထားလို႔ မရ (Speed ကိုေျပာင္းၿပီး သံုးခ်င္တဲ့အတြက္) တဲ့အတြက္ PWM ကိုသံုးရတာပါ။ Forward/ Backward (Directions) ေပးတာကေတာ့ Digital I/ O ကို low/ high လုပ္ၿပီး သံုးလို႔ရပါတယ္။

Wednesday, 9 July 2008

Pulse Width Modulation (PWM) over Analog Communication

Pulse Width Modulation ထုတ္တယ္ဆိုတာ Digital Circuit ကေန Analog Signal ေတြထုတ္ခ်င္တဲ့အခါ သံုးပါတယ္။ တစ္နည္းအားျဖင့္ Modulation ေပါ့ဗ်ာ။ Frequency Division Modulation (FDM) လို႔လည္းေခၚၾကတယ္။ သူရဲ႕ processing ကနဲနဲေတာ့႐ႈပ္တယ္။ အဓိကက timing နဲ႔ noise ပါ။ ဥပမာေလးနဲ႔ေျပာတာေပါ့။

ဥပမာ ။ ။ 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

}