Showing posts with label PIC. Show all posts
Showing posts with label PIC. Show all posts

Tuesday, 23 February 2010

GPS Module Interface Commands

GPS (Global Positioning System) ကေတာ့ လူတိုင္းၾကားဖူး သိဖူးပီးသားပါ။ ေျပာခ်င္တာက အဲ့ GPS Module ေတြနဲ႔ ဆက္သြယ္ တဲ့အခါမွာ လိုအပ္တာေလးေတြပါ။ မ်ားေသာအားျဖင့္ Serial COM ေလးနဲ႔ပါပဲ။ Baud Rate ကေတာ့ နဲနဲ ျမင့္တယ္လို႔ေျပာလို႔ရတယ္ ပံုမွန္ GPRS, Modem နဲ႔စာရင္ေပါ့။ သူက NMEA (National Marine Electronics Association) ဆိုတဲ့အဖြဲ႔အစည္းက သံုးတဲ့ ေတြပဲသံုးတယ္ဗ်ာ။ ဥပမာ - GGA ဆိုတဲ့ Command ကို ေပးလိုက္ရင္ GPS ရဲ့ Data အားလံုးကို ျပန္ေပးတယ္။ Reply က ေအာက္မွာျပထားသလိုေပါ့။ Time, Latitude, Longitude, Altitude, .... ေတြပါတယ္။

$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47

လင့္ခ္ကေတာ့ NMEA Data ။ ေအာက္ကပံုက ေလးတစ္ခုရဲ့ပံုပါ။ Antenna ေတာ့ ထပ္တပ္ရတယ္။ ၿပီးေတာ့ အမိုးေအာက္မွာဆိုရင္ Data ေတြကမမွန္ပါဘူး။

Friday, 19 February 2010

Graphic LCD

သာမန္ Character display LCD ေတြနဲ႔ ကြာျခားတဲ့အခ်က္ကေတာ့ GLCD က Dot Matrix ပံုစံသြားပါတယ္။ ကၽြန္ေတာ္သံုးတာက Graphic LCD 128x64 Dot Matrix ပါ။ သူ႔ေပၚမွာ စာေရးတာပဲ ျဖစ္ျဖစ္ ပံုဆြဲတာပဲျဖစ္ျဖစ္ အဲ့ဒီ Dot Matrix ပံုစံနဲ႔ သြားရပါတယ္။ အရွင္းဆံုးေျပာရရင္ေတာ့ Dot (pixel) ေလးေတြကို ဆက္ၿပီးေတာ့ ပံုေဖၚလိုက္တာပါပဲ။ က်န္တဲ့သေဘာတရားေတြအကုန္လံုးက ပံုမွန္ LCD module ေတြနဲ႔အတူတူပါပဲ။ ေရးခ်င္ရင္ အနက္ေရာင္ေလးအုပ္၊ ဖ်က္ခ်င္ရင္ အျဖဴေရာင္ေလး ျပန္အုပ္ ဆိုတဲ့သေဘာေတြပါပဲ။ ဒီေကာင္ေလးကို သံုးရင္းနဲ႔ ဟိုးအရင္ ၁၉၉၇ ေလာက္က Pascal programming မွာ Graphic mode နဲ႔ DOS မွာ Windows, Buttons, Text boxes ေတြေရးခဲ့တာေလးေတြကိုေတာင္ ျပန္သတိရမိတယ္။

Monday, 16 February 2009

RTC, Timer And External Oscillator

RTC နဲ႔ TIMER ေတြ အေၾကာင္းကို ကၽြန္ေတာ္ ခဏခဏ ေရးေလ့ရွိပါတယ္။ အခုေျပာျပခ်င္တာက RTC ကို Timer နဲ႔ေရးတဲ့အခါ လိုအပ္တဲ့ လိုအပ္ခ်က္ေတြပါ။ အမ်ားအားျဖင့္ RTC သံုးခ်င္တဲ့အခါ External RTC chip ကိုသံုးေလ့ ရွိၾကပါတယ္။ ဒါေပမယ့္ Hardware overload ကိုေလွ်ာ့ခ်ခ်င္တဲ့ အခါမွာျဖစ္ျဖစ္၊ Boom Price ကိုေလွ်ာ့ခ်င္တဲ့အခါမွာ ျဖစ္ျဖစ္ RTC ကို routine ေရးၿပီးသံုးၾကပါတယ္။

အဲဒီအခါမွာ Timer တစ္ခုကို သံုးၿပီး ေရးရပါတယ္။ ေအာက္မွာ RTC ေရးရတဲ့ Assembly source codeကို ျပထားပါတယ္။ C language အျဖစ္လည္း ေျပာင္းၿပီးေရးလို႔ရပါတယ္။ ဒါေပမယ့္ RTC routine အမ်ားစုကို Assembly ေရးေလ့ရွိပါတယ္။ Instruction cycle ကိုေလွ်ာ့ခ်ခ်င္လို႔ပါ။

အဲလို ေရးတဲ့အခါမွာ Timer ရဲ႕ အခ်ိန္ကို တိက်ေအာင္ External Crystal (Oscillator) တစ္ခုကို ခ်ိတ္ဆက္ေပးရပါတယ္။ ေအာက္မွာ ျပထားတာကေတာ့ Timer1 ကိုသံုးၿပီးေတာ့ RTC routine ကိုေရးတဲ့အခါ လိုအပ္တဲ့ Crystal ခ်ိတ္ဆက္ေပးရတဲ့ ပံုပါ။



Friday, 6 February 2009

PIC18F85J90 Plug-In Module

TQFP (Thin Quad Flat Pack) MCU ေတြနဲ႔ အလုပ္လုပ္တဲ့အခါ။ Mass production (standard PCB လုပ္ၿပီးတဲ့အခါ) မွာေတာ့ သိပ္စဥ္းစားစရာ မလိုေပမယ့္ R & D လုပ္တဲ့အခါမွာေတာ့ တစ္ခ်က္စဥ္းစားရပါတယ္။ အဲဒါက TQFP ေတြက prototype PCB ေပၚမွာ solder လုပ္ဖို႔ အရမ္းခက္ခဲပါတယ္။ ရတယ္ထားဦး ၾကာမယ္ေလ။ အဲဒီေတာ့ သူ႔အတြက္ Daughter board (Plug-In Module) ေတြရွာရပါတယ္။ အဲဒီ Module ေလးေတြက Demo, Evolution Board ေတြမွာတပ္သံုးတာပါ။ ရွိရင္ေတာ့ အိုေကပါတယ္။ မရွိရင္ေတာ့ prototype board မွာပဲရေအာင္ solder လုပ္ရမွာေပါ့။ ဒါကေတာ့ အလုပ္ကေလး တစ္ခုလုပ္ဖို႔ ကၽြန္ေတာ့ အတြက္လိုအပ္တဲ့ PIC18F85J90 PIM ပါ။ သူက I/ O pin ေတြကို ေနာက္ေက်ာမွာ ထုတ္ေပးထားတဲ့အတြက္ က်န္တဲ့ Device ေတြနဲ႔ I/ O pin ေတြကေနတစ္ဆင့္ ဆက္ေပး႐ံုပါပဲ။ ဒီ Module ကေတာ့ LCD Interface အတြက္အဓိကပါ။

သတိထားရမွာက Interface တစ္ခုခ်င္းစီအတြက္ အဓိကထားၿပီး PIM ေတြက ရွိတတ္ပါတယ္။ ၀ယ္ရင္ေတာ့ ေသခ်ာစစ္ၿပီးမွ ၀ယ္သံုးပါ။

7 Segment LED Vs 7 Segment LCD

7 Segment LED နဲ႔ 7 Segment LCD ရဲ႕ ကြာျခားခ်က္ကို ေျပာခ်င္လို႔ပါ။

7 Segment LED Module က LED base ျဖစ္တဲ့အတြက္ General I/O ေတြသံုးၿပီး Display လုပ္လို႔ရပါတယ္။ Multliplex လည္းလုပ္လို႔ရပါတယ္။

LCD မွာေတာ့ ျပႆနာနဲနဲရွိပါတယ္။ LCD မွာ Dynamic နဲ႔ Static ဆိုၿပီး LCD ၂ မ်ိဳးရွိပါတယ္။ Static ကေတာ့ LED နဲ႔ခပ္ဆင္ဆင္ပါ။ ႐ိုး႐ိုး General I/O နဲ႔အလုပ္
လုပ္လို႔ရပါတယ္။ ဒါေပမယ့္ ေစ်းႀကီးပါတယ္။ Dynamic ကေတာ့ Oscillate လုပ္ေပးမွ Display ဆက္တိုက္ေပၚပါတယ္။ ႏို႔မို႔ဆို Dim ျဖစ္ၿပီး တျဖည္းျဖည္းေပ်ာက္သြားမွာပါ။ အဲဒါေၾကာင့္ Dynamic LCD နဲ႔ software ေရးတဲ့အခါ သံုးတဲ့ MCU ကိုသတိထားေရြးပါ။ LCD support လုပ္တဲ့ MCU ကိုေရြးခ်ယ္ရပါတယ္။ ဥပမာ - PIC ဆိုရင္ PIC16F91X, PIC18F85J90 series ေတြက LCD အတြက္ support လုပ္ပါတယ္။

ရွိၿပီးသား LCD Module (ေအာက္ကပံု) ေတြကိုသံုးရင္ေတာ့ အေပၚကကိစၥေတြ ထည့္စဥ္းစားစရာ မလိုပါဘူး။

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 ကိုခြဲရပါလိမ့္မယ္။




Monday, 20 October 2008

PIC18F4420 Timer Module (8 bit/ 16 bit)

Timer ေတြနဲ႔ပါတ္သတ္တဲ့ ပို႔စ္ေတြေတာ့ တင္ဘူးပါတယ္။ ခုေရးမွာက Datasheet ေတြမွာပါတဲ့ Block Diagram ကိုဖတ္ၿပီး Timer ရဲ႕အလုပ္လုပ္ပံုကို ေလ့လာတဲ့ သေဘာပါ။ ေအာက္မွာ ကၽြန္ေတာ္ျပထားတာက 8 bit နဲ႔ 16 bit Timer ရဲ႕ Diagram ေတြပါ။
ထံုးစံအတိုင္း ဘယ္ကေန ညာကို စဖတ္မယ္ဆိုရင္ -
၁။ Timer ရဲ႕ speed က Oscillator (External) ရဲ႕ ၄ ပံုတစ္ပံု ရွိပါတယ္။ အဲဒါကို Timer interrupt နဲ႔ တစ္ၿပိဳင္နက္ ON ပါတယ္။ Interrupt က Pin (Hardware) ဒါမွမဟုတ္ Software interrupt ရွိပါမယ္။
၂။ Prescaler သံုးရင္ Prescaler အတြက္ Ratio ထည့္တြက္ပါတယ္။
၃။ Internal clock က Timer interval အတြက္ သံုးပါတယ္။ သံုးတဲ့ Register ကေတာ့ datasheet ကေန ထပ္ေလ့လာရပါတယ္။
၄။ TM0L က Tick တန္ဖိုးတစ္ခုပါ။ Tick ေပါင္း 00 FF (256) အထိရပါတယ္။ 8 bit ျဖစ္ေနလို႔ပါ။ TM0H မွာၾကည့္လိုက္ရင္ 16 bit ရတဲ့အတြက္ FF FF (65535) tick အထိ ထည့္ေပးလို႔ရပါတယ္။ ပိုၿပီး interval ရွည္လို႔ရတဲ့ သေဘာေပါ့။
ဒါက PIC18F4420 MCU အတြက္သံုးတဲ့ Timer Routine ပါ။
အထက္က အဆင့္ေတြအတိုင္း ေရးရင္ Timer sub routine ကိုရမွာပါ။ ေရးတာကေတာ့ compiler ေပၚမူတည္ၿပီး လြယ္တာ ခက္တာေတာ့ ရွိပါလိမ့္မယ္။



Thursday, 4 September 2008

Electronics E-Books Series (1)

အရင္ကေတာ့ တစ္ခ်ိဳ႕တစ္၀က္ေတြကို တင္ထားပါေသးတယ္။ Electronic နဲ႔ပါတ္သတ္တဲ့ စာအုပ္ေတြပါပဲ။ လင့္ခ္ေတြ ေသကုန္လို႔ စာရင္းေတြ ျပန္တင္ေပးလိုက္တာပါ။ ထံုးစံအတိုင္း အီးေမးလ္ကေနပဲ ပို႔ေပးပါမယ္။ စီေဘာက္စ္မွာ ေတာင္းခဲ့ၾကပါ။

Monday, 25 August 2008

PIC Microcontrollers Projects Samples

PIC Microcontroller ေတြနဲ႔ပါတ္သတ္တဲ့ နမူနာ Project ကေလးေတြပါတဲ့ Website ေလးပါ။ Source COde, Hardware Assembly ေတြပါထည့္ေရးထားလို႔ အဆင္ေျပမွာပါ။

http://www.micro-examples.com