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

}


Wednesday, 25 June 2008

Multi-tasking and Time sharing with Rabbit 3000 (RCM 3700) MCU

Rabbit MCU နဲ႔ software ေရးတဲ့အခါ Dynamic C ဆိုတဲ့ compiler ကိုသံုးပါတယ္။ ကၽြန္ေတာ္ေျပာမွာက အဲဒီ compiler မွာပါတဲ့ build-in function တစ္ခုကိုေျပာခ်င္တာပါ။ သူ႔မွာ multi tasking လုပ္တဲ့ function ေလးတစ္ခုပါပါတယ္။ costate { ... } ပါ။ အဲဒါက program run ေနတဲ့အခ်ိန္တိုင္းမွာ သြားစစ္ပါတယ္။ တကယ္လို႔ function တစ္ခုကို costate ထဲမွာေရးထားရင္ အဲဒါကိုအရင္လုပ္ပါတယ္။ ၿပီးမွ main program ထဲက function ေတြကိုဆက္လုပ္ပါတယ္။ costate ထဲမွာ wait ေနတဲ့အခ်ိန္မွာ deadlock ျဖစ္မွာစိုးလို႔ waitfor( ) ကိုတြဲၿပီးသံုးရပါတယ္။ waitfor( ) ထဲမွာ delay ကို သတ္မွတ္ေပးထားတာနဲ႔ time slot ရဲ႕ ကို ဖန္တီးေပးထားလို႔ ရပါတယ္။ costate, waitfor နမူနာေလးတစ္ခု ျပထားပါတယ္။

main() { // echoes null terminated character strings
int getOk;
char s[16];
serAopen(19200);
loopinit();
while (1) {
loophead();
costate {
wfd getOk = cof_serAgets (s, 15, 20);
if (getOk)
wfd cof_serAputs(s);
else { // timed out: s null terminated, but incomplete
}
waitfor(MS_TIMER>=150)
}
}
serAclose();
}

RS 232 And RS 485

RS 232 အေၾကာင္းကိုေတာ့ ကၽြန္ေတာ္ ေတာ္ေတာ္မ်ားမ်ား ေျပာၿပီးသားပါ။ RS 485 ကလည္း 232 လိုပဲ Tx, Rx သံုးပါတယ္။ ဒါေပမယ့္ သူ႔မွာ Tx နဲ႔ Rx ကို ခ်ိတ္ထားတဲ့ေနာက္ cross wire တစ္ခုပါပါတယ္။ RS 485 မွာ Master နဲ႔ Slaves ဆိုၿပီးရွိပါတယ္။ RS 232 ကေတာ့ peer-to-peer communication ပါပဲ။ 1 Master နဲ႔ 1 Slave ပဲရပါတယ္။ ေအာက္မွာ ပံုနဲ႔ျပထားပါတယ္။ Slave ၃၀ ေက်ာ္အထိ ခ်ိတ္လို႔ရတယ္လို႔ ေျပာပါတယ္။ သူက Bus Topology နဲ႔သြားပါတယ္။ တကယ္ေတာ့ slave ကေန Handshaking မလာပဲနဲ႔ Master ကေန control signal တစ္ခုကိုပဲ ေပးတာပါ။ Handshaking လာခ်င္ရင္ေတာ့ slave devices ေတြမွာprogram သပ္သပ္ေရးေပးရပါတယ္။ Machine ေတြက slaves ေတြျဖစ္ၿပီး CPU က master ျဖစ္မွာပါ။ slave to slave ေတာ့ communicate လုပ္လို႔မရႏိုင္ပါဘူး။

Tuesday, 24 June 2008

Programming the Parallel Port (Interfacing the PC for Data Acquisition and Process Control) E-Book

Parallel Port နဲ႔ပါတ္သတ္တဲ့ ေနာက္ E-Book တစ္အုပ္ပါ။ ကၽြန္ေတာ္လည္း အခုေနာက္ပိုင္း Project ေတြက Parallel Port ေတြနဲ႔ မပါတ္သတ္ေသးေတာ့ လံုး၀ မဖတ္ရေသးပါဘူး။ ေလ့လာခ်င္သူေတြ အဆင္ေျပေအာင္လို႔ တင္ေပးလုိက္ပါတယ္။

``ဒီစာအုပ္ကို ေပးတာက ညီမေလး (ကၽြန္ေတာ့္ထက္ငယ္မယ္ထင္လို႔ပါ) အယ္လ္ပိုင္း ပါ။´´
Programming the Parallel Port
(Interfacing the PC for Data Acquisition and Process Control)

Thursday, 19 June 2008

M2I TOP2 Touch Screen Interface Programming (1)

Touch Panel (Screen) ကိုျမင္ဖူး သံုးဖူးၾကလိမ့္မယ္ထင္တယ္။ ကၽြန္ေတာ္ေျပာမွာက Touch Panel ကိုသံုးၿပီး Microcontroller Interface ေရးတဲ့ပံုစံကိုပါ။ သူ႔ က Application program လိုလဲမဟုတ္၊ Embedded program နဲ႔လည္း သိပ္မတူဘူး။ Application လို Intercafe ေတြ create ရၿပီးေတာ့ Embedded လို Memory address, Register ေတြကိုသံုးၿပီးေရးပါတယ္။ ကၽြန္ေတာ္တို႔ သံုးတာက M2I TOP2 Touch Panel ပါ။ အျဖဴနဲ႔ တစ္ျခားတစ္ေရာင္ Monochrome ပဲရပါတယ္။ Microcontroller Interface ပိုင္းကေတာ့ RS232 ပါ။ PC Interface ကေတာ့ download သက္သက္အတြက္ပဲ သံုးပါတယ္။ RS232 န႔ဲပါပဲ။ သူ႔မွာ Main Menu တစ္ခုပါၿပီးေတာ့။ Program Mode ဆိုရင္ေတာ့ အဲဒီ Menu ကို ေျဖာက္ထားလို႔ရပါတယ္။ Baud Rate ကိုလည္း Program Runtime အတြင္းမွာ ေျပာင္းသံုးလို႔ရပါတယ္။ Software Reset ေတာ့ လုပ္ေပးရပါတယ္။

Friday, 6 June 2008

RF Reader Pro V 2.0 (China Version Reader)

ဒီ Program က RFID Tag ေတြကို ဖတ္၊ ေရး လုပ္တဲ့ program ပါ။ သူက Mifare, UltraLight, 14443A, 14443B, 15693 စတဲ့ ေတြကို ေရး၊ ဖတ္ လုပ္လို႔ရပါတယ္။ ကၽြန္ေတာ္တစ္ခုေျပာခ်င္တာက tag ေတြကို ဖတ္တဲ့အခါ လိုအပ္တဲ့ Sequence (protocol) ေလးကိုပါ။ procedure အစဥ္လုိက္လုပ္ရပါတယ္။
1. Request
2. Anti-collation
3. Select
4. Load Key
5. Authentication
6. Read/ Write
ဆိုၿပီးအစဥ္လိုက္ ရွိပါတယ္။ ဒီ software မွာေတာ့ အဲဒီ button ေလးေတြကို အစဥ္လုိက္ႏွိပ္ရင္ ရပါတယ္။ program ေရးမယ္ဆိုရင္လည္း အဲဒီအဆင့္ေတြအတိုင္း ေရးရပါတယ္။ လိုအပ္တာတစ္ခုကေတာ့ Card Reader ရဲ႕ communication protocol ကို ေသခ်ာဖတ္ဖို႔ လိုပါလိမ့္မယ္။ ကၽြန္ေတာ္အခုသံုးတာက China Version card reader ပါ။ tag ကေတာ့ Mifare (Phillips) ပါ။


Thursday, 5 June 2008

Radio Frequency IDentification system (RFID)

RFID ကို ေနာက္ပိုင္းမွာ ေတာ္ေတာ္မ်ားမ်ားသံုးလာပါတယ္။ ကၽြန္ေတာ္ေနာက္လုပ္မယ့္ Project ေတာ္ေတာ္မ်ားမ်ားမွာ RFID system ကိုသံုးရမွာမို႔လို႔ ဒီ Post ကိုစတင္လုိက္တာပါ။ ေနာက္ထပ္လည္း RF နဲ႔ပါတ္သတ္တဲ့ Post ေတြတင္ပါဦးမယ္။ RFID မွာ သံုးမ်ိဳးရွိပါတယ္။
1. Passive RFID
2. Active RFID
3. Semi-Passive RFID ေတြပါပဲ။
RFID မွာ Transmitter နဲ႔ Receiver/ Transponder/ Tag ဆိုၿပီးပါပါတယ္။ ေတာ္ေတာ္မ်ားမ်ားသိၾကမွာပါ။ Credit Card, Door Lock, ATM card, ... ေတြမွာသံုးေလ့ရွိပါတယ္။

Passive က Transmitter မွာ Power Source ပါၿပီးေတာ့ Tag မွာမပါပါဘူး။ IC နဲ႔ Antanna Coil တစ္ခုေလာက္ပဲပါၿပီးေတာ့ အလြန္ပါးပါတယ္။
Active က Transmitter ေရာ Tag မွာပါ Power source ပါပါတယ္။ ဒါေၾကာင့္ သီးျခားစီအလုပ္လုပ္ႏိုင္ပါတယ္။

Semi-passive က Transmitter မွာ Power source ပါၿပီးေတာ့ Tag မွာမပါပါဘူး။ ဒါေပမယ့္ Transmitter က power supply (scan) လုပ္ရင္ Response ျပန္ႏိုင္ပါတယ္။ ေအာက္ဆံုးကပံုက RFID Transmission ရဲ႕ပံုပါ။

ျပန္ေရာက္လာပါၿပီ . . .

ကၽြန္ေတာ္ ျပန္ေရာက္လာပါၿပီ။ ေနာက္ပိုင္းမွာ Post အသစ္ေတြထပ္တင္သြား ပါ့မယ္။ Post အမ်ားႀကီးတင္စရာ ရွိပါတယ္။