Showing posts with label Rabbit MCU. Show all posts
Showing posts with label Rabbit MCU. Show all posts

Saturday, 13 February 2010

RCM5400W ေနာက္ဆက္တြဲ (၁)

RCM54XX ေတြရဲ့အားသာခ်က္က Zworld http mini server ေလးထဲ့လို႔ရပါတယ္။ ဒါေပမယ့္ အဲ့ဒီ Server ရဲ့ Foot Print က အေတာ္ႀကီးတဲ့အတြက္ တစ္ကယ္တမ္း အေသအေၾကသံုးၾကစတမ္းဆိုရင္ Storage Area မ်ားတဲ့ (၂ ဆ၊ ေစ်းလည္း ပိုပါတယ္) RCM5450 လိုေကာင္နဲ႔မွ အဆင္ေျပလိမ့္မယ္။ က်ေတာ္သံုးတဲ့ ပံုစံက FTP server ကို အဲဒီထဲမွာ ထဲ့ၿပီးေတာ့ Wireless Filer Transfer ေလာက္ပါပဲ။ http server ကို သံုးဖို႔ စဥ္းစားေပမယ့္လည္း Port forwarding ကိတ္စေတြမွာ ျပသနာရွိေနတဲ့အတြက္ တိုက္႐ိုက္ Data Access လုပ္တဲ့နည္းကို ေမ့ပစ္ၿပီး FTP နည္းစံနစ္ကို သံုးလိုက္ရတာပါ။

အားသာခ်က္ ေနာက္တစ္ခုက Embedded WiFi Module ျဖစ္တဲ့အတြက္ DHCP ကိုသံုးလို႔ရပါတယ္။ အရင္ 3700 ကေတာ့ Static IP ပဲ အဆင္ေျပပါတယ္။

Ref : http://www.rabbit.com/products/rcm5400W/


Introduction of RCM5400W

RCM5400W ကိုႀကိဳက္မိတာ ဒီရက္ပိုင္းမွပါ။ အရင္က်ေတာ္သံုးေနက်ေကာင္က RCM3700, 3720 ေတြ။ 3700 ေတြရဲ့အားနည္းခ်က္က သူ႔မွာ Ethernet Port ေတာ့ပါတယ္ ဒါေပမယ့္ ခုေနာက္ပိုင္းမွာ WiFi ေတြကိုပဲအဓိကထားၾကတာကိုး Cable ေတြကအဆင္မေျပေတာ့ေတာ့။ အဲ့ေတာ့ ဒီေကာင့္ကို အခုသံုးေနတဲ့ပံုစံက Acksys Wifi (Bridge) Card ကို ထပ္ထဲ့ေပးေနရတယ္။ Acksys က ေစ်းႀကီးတဲ့အျပင္ Setting လည္း ခ်ခ်ေပးေနရတာေၾကာင့္ ထပ္ရွာလိုက္တဲ့အခါ RCM5000 series ကိုေတြ႔တာပဲ။ ေနာက္ပိုင္းေတြမွာ b/ g အထိရလာေတာ့ အဲ့ေကာင္ကို ေနာက္ပိုင္းမွာ သံုးဖို႔ ဆံုးျဖတ္လိုက္တယ္။ ေစ်းကေတာ့ ၂ ဆေက်ာ္ရွိတယ္။


RCM5400W (Rabbit Core Module)

Monday, 29 December 2008

Double Head (Double Auger) Powder Filler

ပံုမွန္ Powder Filler က Head တစ္ခုတည္းနဲ႔ 2 Speed သံုးၿပီး အမႈန္႔ေတြကို ျဖည့္ေလ့ရွိတယ္။ First နဲ႔ Second speed ေပါ့။ Normal speed နဲ႔ Prelim speed လို႔ ေခၚတာေပါ့။ Double Head (Auger) က်ေတာ့ အဲဒီသေဘာကိုပဲ Head ႏွစ္ခုခြဲလုပ္တာပါ။ Calculation နဲ႔ Processing (speed change) time ကို က်သြားေအာင္လုပ္တာေပါ့။ ပထမ head က Normal speed ပဲျဖည့္တယ္။ ဒုတိယ head က Second speed နဲ႔ဆက္ျဖည့္တာပါပဲ။ Container ၂ခုကို တစ္ၿပိဳင္နက္ျဖည့္တာေပါ့။ Conveyor (Assembly line) ေပၚမွာအလုပ္လုပ္မွ အဆင္ေျပႏိုင္ပါတယ္။



Friday, 14 November 2008

Ethernet Module at Embedded Software (Rabbit)

Embedded Software ေတြမွာ Flash File System သံုးတာကို ကၽြန္ေတာ္ ေရးခဲ့ဘူးပါတယ္။ အခု အဲဒီထဲက ဖိုင္ေတြကို ဘယ္လို ယူလို႔ရလည္း၊ MCU ထဲကို file ေတြဘယ္လိုထည့္လည္း ဆိုတာကို ေျပာမွာပါ။ FTP protocol ေတာ္ေတာ္မ်ားမ်ား ၾကားဘူးပါလိမ့္မယ္။ MCU ေတြမွာလည္း FTP, TCP/ IP, UDP စတဲ့ Protocol ေတြကို သံုးပါတယ္။ အဲလိုသံုးဖုိ႔အတြက္ MCU မွာ Ethernet port ရွိရပါတယ္။ MCU ကို IP Address အရင္ေပးရမွာပါ။ Dynamic IP ေကာ Static IP ေကာ လုပ္လို႔ရပါတယ္။ ဟိုဘက္က DHCP သံုးရင္ေတာ့ Dynamic IP ကိုသံုးလို႔ရပါတယ္။ ဒါေပမယ့္ Static ကေတာ့ ပိုၿပီးအဆင္ေျပာပါတယ္။ အဲဒီ Ehternet port ကေနၿပီး နဲ႔ Network cable ကိုခ်ိတ္ဆက္ၿပီး PC ကေန FTP software တစ္မ်ိဳးမ်ိဳးနဲ႔ လုပ္ၾကတာပါ။ MCU ဘက္မွာေတာ့ IP Address, User Name, Password ေတြကို setting လုပ္ေပးရတာေပါ့။ အဲဒီ Ethernet port ကေနပဲ WLAN Module နဲ႔ဆက္ၿပီးေတာ့ WLAN facility ေတြကို သံုးလို႔ရပါတယ္။

ဒီလိုလုပ္တဲ့ ေနရာမွာ TCP/ IP protocol က Transparent ျဖစ္ပါတယ္။ ဘာမွၾကားခံ Hardware, Software ေတြထည့္ေနစရာ မလိုပါဘူး။

ကၽြန္ေတာ္က Filezilla, Core FTP Software ေတြသံုးၿပီး access လုပ္ပါတယ္။

Thursday, 6 November 2008

Short Notes (1)

၁။ Battery Backup RAM က power ျဖတ္လိုက္ေသာ္လည္း RAM variables ထဲမွာ ေနာက္ဆံုး data ေတြက်န္ခဲ့တယ္။ ေနာက္တစ္ႀကိမ္ power on ၿပီး ျပန္ run လို႔ အဲဒီ ေတြကို Initialize မလုပ္ဘူးဆိုရင္ contents အေဟာင္းအတိုင္း က်န္ခဲ့တယ္။
Non-battery backup RAM က power ျဖတ္လိုက္ရင္ variable ထဲက data ေတြ အကုန္ေပ်ာက္ကုန္တယ္။ initialize လည္း ျပန္လုပ္စရာမလိုဘူး။ ဒါေၾကာင့္ MCU ေတြမွာ program ေရးေတာ့မယ္ဆိုရင္ battery backup ပါ၊ မပါ အရင္စစ္ေဆးပါ။
၂။ Mifare card reader မွာ Wegan mode နဲ႔ Command mode ဆိုၿပီး ရွိတယ္။ Wegan က card ကို အျမဲဖတ္ေနၿပီးေတာ့ Command mode က command ေပးတဲ့အခါမွာပဲ card ကို ဖတ္တယ္။
wegan mode ကို Barcode reader ေတြမွာသံုးထားၿပီးေတာ့ command mode ကို Smart card reader ေတြမွာသံုးေလ့ရွိတယ္။

Thursday, 23 October 2008

Load Cell Degitizing Unit (LDU 78.1) for Weighting Machine

ဒီပစၥည္းက Weighting Machine ေတြမွာပဲ သံုးတဲ့ပစၥည္းပါ။ ၁ x ၂ လက္မ ပတ္လည္ပဲ ရွိပါတယ္။ သူရဲ႕လုပ္ငန္းကေတာ့ Weighter နဲ႔ PLC or MCU ၾကားမွာ အေလးခ်ိန္ကို တြက္ခ်က္ ေဖၚျပေပးတဲ့ အလုပ္ပါပဲ။ High Precision Measuremment Tool တစ္ခုပါ။ ကၽြန္ေတာ္သံုးတဲ့ Load Cell Unit က FLINTEC/ SOEMER ပါ။ Germany (EU) က ထုတ္ပါတယ္။ သူက RS-485 Communication ကိုပဲ လုပ္ေပးတာပါ။ ဒါေပမယ့္ MCU နဲ႔ သံုးတဲ့အခါမွာ RS-232 ကိုပဲ အလုပ္လုပ္တဲ့အတြက္ converter (adaptor) တစ္ခုထပ္ထည့္ေပးရပါတယ္။ အဲဒီ Converter က ပံုမွာျပထားတဲ့ အစိမ္းေရာင္ ေအာက္ခံေလးပါ။ ပံုကိုၾကည့္မယ္ဆိုရင္ ဘယ္ဘက္ပိုင္းက Weighter နဲ႔ ဆက္ရၿပီးေတာ့ ညာဘက္ပိုင္းက Power supply, MCU/ PLC ေတြနဲ႔ ဆက္ရပါတယ္။ သူ႔မွာ Firmware သပ္သပ္ပါတဲ့အတြက္ command level communication လည္းလုပ္လို႔ရပါတယ္။ PC's HyperTerminal ဒါမွမဟုတ္ သူ႔ရဲ႕သက္ဆိုင္ရာ software (DOP program) ကိုသံုးရင္လည္း ရပါတယ္။

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 လုပ္ၿပီး သံုးလို႔ရပါတယ္။

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();
}