Friday, 15 February 2008

Accessing Data from AD7715

ADC (Analog to Digital Converter) အေၾကာင္းကို ကၽြန္ေတာ္ Post တစ္ခါေရးဘူးပါတယ္။ ဒါကအဲဒါရဲ႕ေနာက္ဆက္တြဲပါ။ ADC ကေနၿပီးေတာ့ Data ေတြကိုဖတ္တဲ့ ပံုစံပါ။ ဖတ္တဲ့ေနရာမွာ အဓိကအေနနဲ႔ အဆင့္ ၃ ဆင့္ပဲရွိပါတယ္။
၁။ ADC Initialisation
၂။ Send Read Command to ADC
၃။ Read back the Reply Value (Read 2 bytes)
ဆိုၿပီးရွိပါတယ္။ အေသးစိတ္အဆင့္ေတြကို ေအာက္မွာ Flow Chart နဲ႔ျပထားေပးပါတယ္။

သူက MCU နဲ႔ဆက္သြယ္တဲ့ေနရာမွာ SPI Communication Protocol ကိုသံုးပါတယ္။ Clock နဲ႔ Chip Select signal ကို MCU ကေနေပးပါတယ္။ Value ဖတ္တဲ့ေနရာမွာ 16 bit ရွိတဲ့အတြက္ 8-bit Low/High byte ဆိုၿပီးႏွစ္ခါျပန္ဖတ္ရပါတယ္။ ၿပီးမွ 16-bit value အေနနဲ႔ျပန္ေပါင္းေပးၿပီး တန္ဖိုးကို ယူရပါတယ္။ ADC ကို Command ေတြလွမ္းေပးျခင္းအားျဖင့္ အလုပ္လုပ္တာပါ။ Flow Chart မွာ Hexa Command ေတြပါထည့္ေရးထားပါတယ္။


Thursday, 14 February 2008

RF (Radio Frequency) with XBee (ZigBee)

Wireless Device ေတြကို အသံုးျပဳၾကတဲ့ေနရာေတြ အမ်ားႀကီးပါ။ Medium ေတြလည္းအမ်ားႀကီးပါ။ ဥပမာ Infra Red, RF (Radio Frequency) ေတြေပါ့။ ကၽြန္ေတာ္အခုေျပာမွာက RF ပါ။ သူမွာ System ေတြထပ္ရွိပါတယ္။ ေအာက္မွာ ဇယားနဲ႔ ႏႈိင္းယွဥ္ျပထားပါတယ္။ ကၽြန္ေတာ္က အဲဒီထဲကေန ZigBee နဲ႔ပါတ္သတ္တဲ့ Devices, IC ေလးေတြကို ေရးသြားမွာပါ။

XBee
XBee ဆိုတာက RF သံုးလို႔ရတဲ့ IC ပါ။ MaxStream Company’s product ပါ။
သူ႔ကိုတစ္ျခား MCU တစ္ခုနဲတြဲၿပီးသံုးေလ့ရွိပါတယ္ ေအာက္မွာ PIC MCU နဲ႔ XBee ခ်ိတ္ဆက္အသံုးျပဳထားတဲ့ Daughter Board ပံုကိုျပထားပါတယ္။ Computer နဲ႔ဆက္ၿပီးသံုးခ်င္ရင္ XBee Demonstration Board ကိုသံုးရင္လည္းရပါတယ္။ COM (Serial) port ကိုသံုးၿပီးခ်ိတ္ဆက္ပါတယ္။

XBee daughter board

XBee daughter board (layout)

XBee daughter board attached with PIC MCU

XBee Demonstration Board

XBee Development Kit

Internal Data Flow Diagram

Wednesday, 13 February 2008

Hexa Code <-> Assembly Code <-> C Code

ဒီ Post ကေတာ့ နဲနဲမ်က္စိလည္မယ္ထင္ပါတယ္။ ကၽြန္ေတာ္ၾကံဳခဲ့ရတဲ့ အျဖစ္အပ်က္ေလးပါ။ Software တစ္ခုေပါ့ အဲဒါကကၽြန္ေတာ့ဆီမွာရွိတဲ့ ေနာက္ဆံုးဆိုတဲ့ Source Code ကလည္း ေနာက္ဆံုးဟုတ္မဟုတ္ မေသခ်ာတဲ့အခါမွာ Microprocessor ထဲကေန Hexa Codes ကိုျပန္ယူ။ Assembly Code ေျပာင္း ေနာက္ C Code ကိုျပန္ေျပာင္း ေနာက္ၿပီး C Code ကိုျပင္ ၿပီးေတာ့မွ Microprocessor ထဲကိုျပန္ၿပီး Download လုပ္လုိက္ရတဲ့ အေျခအေနပါ။ Hex Code ကိုဖတ္တဲ့ေနရာမွာ ဥပမာေျပာရရင္ 02 04 65 53 က Assembly ဆိုရင္ LJMP 0465H ANL ပါ C ဆိုရင္ #include “GBA.h”။ တစ္ကယ္ေတာ့ Function Call ပါပဲ။ ဒါေပမယ့္အဲဒါ အေသမဟုတ္ပါဘူး။ Complier Type ေပၚမူတည္ၿပီး Code Conversion ေျပာင္းလဲမႈရွိပါတယ္။ နမူနာ Program တစ္ခုကိုအရင္ေျပာင္းၾကည့္ၿပီးမွ တစ္ကယ္ကိုလုပ္မည့္ Software ကိုေျပာင္းမွ အဆင္ေျပမွာပါ။ မွန္ဖို႔ရာခိုင္ႏႈန္း အလြန္းနည္းပါတယ္။ မရႏိုင္ဘူးလို႔ေျပာတာ ပုိေကာင္းပါတယ္။ ကၽြန္ေတာ္ကိုယ္တိုင္လည္း မေသခ်ာလို႔ တစ္ျခားနည္းေျပာင္းသံုးရပါတယ္။

Wednesday, 30 January 2008

DSP (Digital Signal Processing) Reference Book

DSP (Digital Signal Processing) ကိုကၽြန္ေတာ္ေလ့လာေနတုန္းပါ။ အမွန္အတိုင္းေျပာရရင္ အဲဒီအပိုင္းမွာ Theory ပိုင္းေတြအမ်ားႀကီးလိုပါတယ္။ တကယ္ေတာ့ သူကသပ္သပ္ Degree, Diploma တစ္ခုေပးလို႔ရတဲ့ Subject ပါ။ ကၽြန္ေတာ္ကေတာ့ လံုး၀နီးပါးမသိခဲ့လို႔ ခုမွ စေလ့လာတုန္းပါ။ ကၽြန္ေတာ္ဖတ္ေနတဲ့ e-Book ေလးကိုတဆင့္ေ၀မွ်လိုက္ပါတယ္။ အေျခခံကေနစၿပီး ေတာ္ေတာ္ေလး စံုစံုလင္လင္ေရးထားပါတယ္။

ကၽြန္ေတာ့္ကို ဒီစာအုပ္ရွာေဖြေပးတဲ့ “ေမာင္သန္႔” ကိုေက်းဇူးတင္ၾကပါ။

Chapter (1) Chapter (2) Chapter (3) Chapter (4) Chapter (5)
Chapter (6)
Chapter (7) Chapter (8) Chapter (9) Chapter (10)
Chapter (11)
Chapter (12) Chapter (13) Chapter (14) Chapter (15)
Chapter (16)
Chapter (17) Chapter (18) Chapter (19) Chapter (20)
Chapter (21) Chapter (22) Chapter (23) Chapter (24) Chapter (25)
Chapter (26) Chapter (27) Chapter (28) Chapter (29) Chapter (30)
Chapter (31) Chapter (32) Chapter (33) Chapter (34)

Tuesday, 29 January 2008

NEC MCU's Debuggers and Programmers

NEC Microcontroller ေတြနဲ႔ ေရးတဲ့အခါၾကံဳရတဲ့ Problem ေလးေတြပါ။ ကၽြန္ေတာ္သံုးဘူးတာ Programmer ႏွစ္မ်ိဳးရွိပါတယ္။ PG-FPL3 နဲ႔ MiniCUBE2 ပါ။ MiniCUBE2 က Debugging လုပ္လို႔ရၿပီး FPL3 က Debugging မရပါဘူး။ Target speed 8MHz, 16MHz ရွိတဲ့ MCU ေတြေပၚမူတည္ၿပီး Hardware (Programmer) မွာ switch ကိုေျပာင္းေပးရပါတယ္။ Software မွာလည္း Setting ျပန္ျပင္ေပးရပါတယ္။ အဲဒီလိုမလုပ္ရင္ သံုးလို႔မရပါဘူး။ ေနာက္တစ္ခုက Port (USB-Serial) မွာ Driver လိုပါတယ္။ Install & Setting လုပ္ေပးရပါတယ္။ ေအာက္မွာ Setting လုပ္တဲ့ နမူနာျပထားပါတယ္။ PRM (Parameter File) ကိုလည္း Install လုပ္ရပါတယ္။ Software, driver အားလံုးကို NEC ရဲ႕ Website မွာ free download လုပ္လုိ႔ရပါတယ္။ FPL3 အတြက္ဆိုရင္ FPL3 Software ကိုသံုးပါတယ္။

MiniCUBE2 and AccessoriesPG-FPL3FPL3 setup screen

Friday, 25 January 2008

KENWOOD AG-204D Oscillator

Frequency Generator အတြက္ပဲသံုးတာပါ။ အခုသံုးေနတာေပါ့။ သူက Frequency 1 MHz အထိအမ်ားဆံုးရတယ္။ Amplitude က 24V (Peak to Peak) အထိရတယ္။ ၿပီးေတာ့ Sine Wave form နဲ႔ Square Wave form ႏွစ္မ်ိဳးထုတ္လို႔ရတယ္။ ေမ့သြားမွာစိုးလို႔ တင္ထားတာပါ။


Mojo with TI MSP430 Microprocessor

အဓိကသံုးတာကေတာ့ Digital Filter အျဖစ္သံုးတာပါ။ Slave Device (Co-processor) အျဖစ္ပဲသံုးလို႔ရပါတယ္။ I/O Ports အေရအတြက္နည္းလို႔ပါ။ သူ႔မွာ Digital or Analog Receiver Channel ၄ ခုပါပါတယ္။ အျမန္ႏႈန္းကေတာ့ 1MHz, 8MHz, 12MHz, 16MHz ဆိုၿပီး ႀကိဳက္တဲ့ Clock ကိုေရြးသံုးႏိုင္ပါတယ္။ Clock Divider 1, 2, 3 , 4, 8, 16, 48 Software ကေန Setting လုပ္ေပး႐ံုပါပဲ။ သူနဲ႔အတူ တြဲသံုးရတဲ့ Debugger ကေတာ့ eZ430 Development Tool ပါ။ ၀င္လာတဲ့ Signal ေတြကို Filter လုပ္ၿပီး Result တန္ဖိုးေတြကို သူူနဲ႔ဆက္ထားတဲ့ Master (Main Processor) ကို I2C or SPI Communication နဲ႔ျပန္ပို႔ေပးရပါတယ္။ အေကာင္ေသးသေလာက္ အသံုး၀င္ပါတယ္။

eZ430 and Texas Instruments MSP430x Proecssor

eZ430 and MSP Mojo Target Board

RS232 Hacking Cable with PC Card

RS232C ကို အသံုးျပဳၿပီး Electronics Device အခ်င္းခ်င္းျဖစ္ဆက္သြယ္ၿပီး အလုပ္လုပ္တဲ့အခါမွာ သူတို႔အခ်င္းခ်င္းၾကားမွာ ဆက္သြယ္တဲ့ Data Communication ေတြကိုသိခ်င္တဲ့အခါမွာ သံုးပါတယ္။ Software တစ္မ်ိဳးေတာ့လိုပါတယ္။ တစ္နည္းအားျဖင့္ Hacking လုပ္တဲ့ သေဘာေပါ့။ မူရင္း Reference ေတြေပ်ာက္သြားတဲ့အတြက္ ကၽြန္ေတာ္သံုးဘူးတာပါ။ Device ႏွစ္ခုရဲ႕ Transmit & Receive Data ေတြကိုၾကည့္လို႔ရတာေပါ့။ အဲဒီလိုၾကည့္ၿပီး Software ကိုျပန္ျပင္လို႔ရႏိုင္ပါတယ္။

PC card အမ်ိဳးအစားေပၚမူတည္ၿပီး Port အေရအတြက္ကြာပါတယ္။


Wednesday, 31 October 2007

Installing MySQL

MySQL ကိုကၽြန္ေတာ္ မသံုးဘူးေသးပါဘူး။ အခုလဲ Install ပဲလုပ္ရေသးတာပါ။ ဒါေၾကာင့္ အားသာ၊ အားနည္းခ်က္ကိုလည္း မသိေသးပါဘူး။ ပထမဆံုးေတာ့ ကၽြန္္ေတာ္ MySQL ကို MySQL website ကေန download လုပ္တာပါပဲ။ ၿပီးေတာ့ Install လုပ္တယ္။ အဲဒါက Database သက္သက္ပါ။ သံုးလုိ႔မရေသးပါဘူး။ ေနာက္ Database Viewer ကို Download ထပ္လုပ္ပါတယ္။ ကၽြန္ေတာ္သိသေလာက္ေတာ့ Viewer (yog) ေတြအမ်ားႀကီးရွိမယ္ထင္တယ္။ ကၽြန္ေတာ္သံုးတာက SQLyog ပါ။ SQLyog ကို Download လုပ္ၿပီးတဲ့အခါ test connection ၾကည့္ရင္ “Connection Error” ဆိုၿပီးလာျပပါတယ္။ အဲဒါဆိုခဏ ပိတ္။ SQL server ရဲ႕ Configuration ကို လုပ္။ ဒီအဆင့္ကေတာ့ သူေျပာတာေလးေတြဖတ္ၿပီး step-by-step လုပ္လုိက္တာပါပဲ။ ၿပီးရင္ SQLyog ကိုျပန္ဖြင့္ connection အသစ္ လုပ္၊ ၿပီးရင္ ပံုမွန္ SQL Server (Enterprise Manager) ကိုသံုးသလုိပဲ Create Database, Create Table ေတြလုပ္လုိ႔ရပါၿပီ။ ဆက္ေရးပါဦးမယ္။

MySQL Configuration

SQLyog create connection

Download MySQL

Monday, 29 October 2007

Reading Datashets

DataSheets ေတြကို ဖတ္ရတဲ့အခါ အရမ္းပ်င္းစရာေကာင္းပါတယ္။ ကၽြန္ေတာ္ကေတာ့ အခုေျပာမည့္ ေခါင္းစဥ္ေတြပဲဖတ္တယ္။ အဓိကကေတာ့ Software ပိုင္းနဲ႔ဆိုင္တာေတြပဲ ဆိုပါေတာ့။
၁။ Overview, Features
အဲဒီအပိုင္းမွာ Timer, Oscillators, CPU speed, Memory (Program, RAM, EEPROM), Interrupt, Peripheral devices ေတြနဲ႔ဆိုင္တဲ့ အေၾကာင္းအရာေလးေတြ၊ ဒီ CPU ရဲ႕အထူးလုပ္ေဆာင္ခ်က္ေတြ ပါလို႔ပါ။

၂။ I/O ports
ကေတာ့ ဘယ္ Ports ကို ဘာ Function အတြက္သံုးရင္ ေကာင္းမလဲလုိ႔ သတ္မွတ္လို႔ ရေအာင္လို႔ပါ။

၃။ Register file Summary (Table)
ဒါကေတာ့ header file (Register Address, Name, Bits) ေတြေရးလုိ႔ရေအာင္လုိ႔ပါ။ ေရးၿပီးသား header file ေတြရွိရင္လည္း ပိုနားလည္ႏိုင္တာေပါ့။ ေကာင္းတာကေတာ့ ဒီ header file နဲ႔ Table မွာပါတဲ့ register address ေတြကို တိုက္ဆိုင္စစ္ေဆးၿပီး မွန္တယ္ဆိုမွ အဲဒီ header file ကိုသံုးပါ။

၄။ I/O Timing
အလုပ္လုပ္တဲ့ အခ်ိန္ Trigger interval (Raising, Falling Edges) ေတြကိုသိရေအာင္လုိ႔ပါ။ Timing Requirements ေတြကိုလည္းသိထားမွ ဘယ္ Oscillator (frequency) ကိုသံုးရင္ အဆင္ေျပမလဲဆိုတာ သတ္မွတ္လို႔ရမွာပါ။

Wednesday, 24 October 2007

RTC (Real Time Clock)

RTC (Real Time Clock) ကို Timer အစားသံုးလို႔ရပါတယ္။ သူက IC တစ္မ်ိဳးပါ။ တိက်တဲ့ အခ်ိန္တစ္ခုကို သတ္မွတ္တဲ့ေနရာမွာ သံုးပါတယ္။ RTC က Main System ရဲ႕ Timer ကိစၥေတြ၊ Coding ေတြ ကိုသက္သာေစပါတယ္။ ၿပီးေတာ့ ပိုၿပီးတိက်တဲ့ အခ်ိန္ကို ရပါတယ္။ ေတြမွာသံုးပါတယ္။ Maxim, Philips, Dallas Semiconductor, Texas Instruments and STMicroelectronics ကုမၸဏီေတြက RTC IC ထုတ္လုပ္ ၾကပါတယ္။ RTC ကို Microcontroller ေတြထဲမွာလည္း Build-in အျဖစ္ေတြ႕ႏိုင္ပါတယ္။ RTC မွာ (32.768 kHz) Oscillator ပါတတ္ပါတယ္။ Computer မွာေတာ့ SouthBridge Chip မွာပါပါတယ္။

RTC IC ရဲ႕ပံုပါ။

SouthBridge မွာပါတဲ့ RTC နဲ႔ဆက္စပ္ပံု။

RTC Block Diagram

Monday, 22 October 2007

Interrupt (IRQ) handling for Timers

Interrupt မွာ ၂ မ်ိဳးရွိပါတယ္။ Hardware IRQ နဲ႔ Software IRQ ပါ။ Hardware မွာ Port IRQs, Key IRQs, Display IRQs ေတြပါၿပီးေတာ့၊ Software မွာ Timer IRQs, DMA IRQs ေတြပါတယ္လို႔ ခြဲလို႔ရပါတယ္။ Hardware, Automation, Machine ေတြကို Accurate Timing နဲ႔ အလုပ္လုပ္ခ်င္တဲ့အခါ သံုးၾကတာပါ။ Embedded Software ေတြမွာ အဓိကသံုးပါတယ္။ Interrupt မွာသံုးတဲ့ Register ေတြကေတာ့ REG_INTERUPT, REG_IME, REG_IE, REG_IF ေတြပါ။
REG_INTERUPT က interrupt handler ပါ။ interrupt ျဖစ္တဲ့အခါ လုပ္လုိက္တဲ့ Action ကို မွတ္တဲ့ register ပါ။
REG_IME က master interrupt ပါ။ Interrupt ေတြကို အဖြင့္အပိတ္ (Enable, Disable) လုပ္ေပးတဲ့ register ပါ။
REG_IE က interrupt enable ပါ။ ဘယ္ interrupt ကို လုပ္မယ္ဆိုတာ သတ္မွတ္ေပးတာပါ။ REG_IME နဲ႔ကြာတဲ့အခ်က္ကေတာ့ က interrupt တစ္ခုခ်င္းစီအတြက္ (Enable, Disable) လုပ္တာပါ။
REG_IF က လက္ရွိေရာက္ေနတဲ့ interrupt ကို စစ္ေဆးတာပါ။ ဥပမာ - Timer0 overflow interrupt ကိုေရာက္သြားၿပီဆိုရင္ REG_IF မွာ Timer0 ရဲ႕ bit pattern ေရာက္သြားပါတယ္။ REG_IE bit pattern နဲ႔ အတူတူပါပဲ။ ေအာက္က နမူနာ program ကိုၾကည့္ရင္ ရွင္းပါလိမ့္မယ္။

//.......................INTERRUPT Routine
void enableTimerInterrupt()
{
REG_IE |= INT_TIMER0; // Enable Timer interrupt detection
REG_TM0CNT |= TIME_IRQ_ENABLE; // Make Timer generate IRQ
}

void interruptHandler(void)
{
REG_IME = 0; //disable interrupts
if(REG_IF==INT_TIMER0)
{
if(stateflag==0){SCLO();stateflag=1;}
else if(stateflag==1){SCHI();stateflag=0;}
}
REG_IF = REG_IF; // Tell GBA that interrupt has been handled
REG_IME = 1; //enable interrupts
}

void setupInterrupts(void)
{
REG_IME = 0x0; //disable interrupts
REG_INTERUPT = (u32)interruptHandler; //set int handler
enableTimerInterrupt();
REG_IME = 0x1; //enable interrupts
}

setupInterrupt() ဆိုတဲ့ function ကိုေခၚၿပီး သံုးရပါတယ္။

Cascading Timers

Timer ေတြကို Cascade လုပ္တယ္ဆိုတာကေတာ့ Timer တစ္ခု Overflow (သတ္မွတ္ထားတဲ့ ကိုေရာက္တဲ့အခါ) ေနာက္ Timer ကို On (Enable) လိုက္ျခင္းကို cascade လုပ္တယ္လုိ႔ေျပာတာပါ။ အထူးသျဖင့္ Automation အပိုင္းေတြမွာ သံုးေလ့ရွိပါတယ္။ ဥပမာ - 1s ေရာက္ဖို႔ဆိုရင္ 1000 ms ေပါ့။ အဲဒီေတာ့ Timer1 ကို အႀကိမ္ ၁၀၀၀ looping (while, for) ပတ္ရမည့္ သေဘာပါ။ အဲဒီလို looping ပတ္တဲ့အခါ အခ်ိန္က Accurate မျဖစ္ေတာ့ပါဘူး။ ဘာလုိ႔လဲဆိုေတာ့ looping ရဲ႕ instruction cycle အခ်ိန္ကို ထည့္တြက္လို႔ပါ။ အဲဒီအခါမ်ိဳးမွာ Cascading ဒါမွမဟုတ္ Interrupt ကိုသံုးရပါတယ္။ Timer1 နဲ႔ Timer2 ကို Cascade ခ်ိတ္ထားျခင္းျဖင့္ အႀကိမ္ 1000 ေရာက္ မေရာက္ကို Timer2 နဲ႔စစ္ေဆးပါတယ္။ ေအာက္မွာ Coding ေရးထားပါတယ္။

REG_TM1CNT= TM_ENABLE | TM_FREQ_SYSTEM | TM_IRQ;
REG_TM1D = - 0x4000;
REG_TM2CNT= TM_ENABLE | TM_FREQ_SYSTEM | TM_IRQ | TM_CASCADE;

while(REG_2 != 1000){}
REG_TM1CNT &= ~TM_ENABLE;
REG_TM2CNT &= ~TM_ENABLE;

Timer2 ကိုသံုးတဲ့အခါမွာ Cascade လို႔ေျပာလိုက္တာနဲ႔ သူ႔အေရွ႕က Timer1 ကို Cascade လုပ္ရမယ္လုိ႔ အလိုလိုသိပါတယ္။ Cascade ကို Overflow လို႔လဲ ေရးေလ့ရွိပါတယ္။

Timer for Embedded Programming

Timer ဆိုတာကိုေတာ့ သံုးဘူးၾကမွာပါ။ ဒီ Post က Hardware နဲ႔ဆက္စပ္တဲ့ Timer ပါ။ ARM9/ 10/ 11 CPU နဲ႔ Gameboy Hardware ကိုအေျခခံၿပီးရွင္းျပသြားပါမယ္။ Case Study သေဘာေပါ့။ ကၽြန္ေတာ္က ARM9 ကိုအသံုးျပဳၿပီး Gameboy ကေန Frequency အမ်ိဳးမ်ိဳးထုတ္ေပးႏိုင္တဲ့ Program ေရးတာပါ။ Frequency ထုတ္တာကေတာ့ Signal ကို low/ high ေတြ တစ္လွည့္စီေပးၿပီး အဲဒီ signal ေတြၾကားမွာ time interval ေလးေတြျခားေပးျခင္းအားျဖင့္ frequency ထုတ္တာပါပဲ။ Pseudo frequency သေဘာပါပဲ။ Oscilloscope နဲ႔တိုင္းတာၿပီးစစ္ေဆးလုိ႔ ရေအာင္လုိ႔ပါ။
အဲဒီအခါမွာ time interval က အလြန္တိက်ဖို႔ လိုအပ္လာပါတယ္။ ဒါေၾကာင့္ Timer နဲ႔ Interrupt ကို အသံုးျပဳၿပီး ေရးတာပါ။ ဒီ Post မွာေတာ့ Interrupt အေၾကာင္းမပါေသးပါဘူး။
ARM ရဲ႕Timer မွာ Frequency ၄ မ်ိဳးပါပါတယ္။ Frequency ေပၚမူတည္ၿပီး interval ေတြ ကြာျခားပါတယ္။ ဥပမာ - 16.384 kHz ဆိုရင္ ရဲ႕တန္ဖိုးကို တစ္ႀကိမ္မွာ 61.04
μs ႏႈန္းနဲ႔ တိုးေပးတာပါ။ Frequency ေတြကေတာ့ ဒီလိုေတြ ရွိပါတယ္။

၁။ 1 Cycle, 16.78 MHz Frequency, 59.59 ns Interval
၂။ 64 Cycle, 262.21 kHz Frequency, 3.815
μs Interval
၃။ 256 Cycle, 65.536 kHz Frequency, 15.26 μs Interval
၄။ 1024 Cycle, 16.384 kHz Frequency, 61.04 μs Interval

တစ္ျခား CPU ေတြမွာလည္း ဒီလိုသေဘာမ်ိဳးပါပဲ။ ဥပမာ - ကၽြန္ေတာ္က 1 ms ကို အတိအက် လုိခ်င္တယ္ ဆိုပါေတာ့။ C Language နဲ႔ဆိုရင္ ဒီလိုေရးရပါတယ္။

// Control Register ထဲမွာ Timer ကို အသံုးျပဳမယ္။ Timer ရဲ႕ Frequency က 16.78 Mhz ပါ (တစ္ႀကိမ္ကို ၁ စီတိုး)။ Interrupt ကိုအသံုးျပဳမယ္။
REG_TM1CNT= TM_ENABLE | TM_FREQ_SYSTEM | TM_IRQ;

// Data register ထဲမွာ Timer တန္ဖိုး ကိုထည့္ပါမယ္။ hex 4000 ရဲ႕ value က 16384 ျဖစ္လုိ႔ပါ။ (“-” ထည္ေပးတာကေတာ့ Timer က “0” အထိေရာက္ေအာင္ တိုးလုိ႔ပါ)။ တိုက္႐ိုက္တန္ဖိုး ၁၆၃၈၄ လည္းထည့္လုိ႔ရပါတယ္။
REG_TM1D = - 0x4000;

// ၿပီးရင္ Timer ကို ျပန္ပိတ္ေပးပါ။
REG_TM1CNT &= ~TM_ENABLE;

ဒါဆိုရင္ Timer1 control code ရပါၿပီ။ အဲဒီ Code ေတြကို Function တစ္ခုအျဖစ္ ခြဲထားၿပီး ယူသံုးႏိုင္ပါတယ္။
Gameboy (ARM9) မွာ Timer ၄ ခုပါပါတယ္ REG_TM0CNT, REG_TM1CNT, REG_TM2CNT, REG_TM3CNT ေတြပါ။ Timer ေတြကို Cascade ခ်ိတ္ၿပီးလည္းသံုးႏုိင္ပါတယ္။ ေနာက္ ပိုစ့္မွာ ဆက္ေျပာပါမယ္။

Gameboy Hardware Schematics

Gameboy ကို အသံုးျပဳလုိ႔ရတဲ့ Application ေနရာေတြကေတာ္ေတာ္မ်ားပါတယ္။ သူ႕မွာ ARM9/ 10/ 11 family series ကိုအသံုးျပဳထားတဲ့အတြက္ Micro-p PCB သပ္သပ္ ထပ္လုပ္စရာမလိုပဲ သံုးလုိ႔ရပါတယ္။ ဂ်ပန္္၊ ထိုင္၀မ္၊ ဥေရာပႏိုင္ငံ (အထူးသျဖင့္ ဂ်ာမနီ)၊ ယူအက္စ္ ေတြမွာသံုးတာမ်ားပါတယ္။ Gameboy Programmer ရာထူးဆိုၿပီးေတာင္ ရွိပါတယ္။ LCD Display, RAM, IO ports (RS-232, General IOs), Audio, Video ports, Buttons (10 Keys), External Oscillator ေတြပါတဲ့အတြက္ အဆင္ေျပပါတယ္။ တစ္ျခား ဆက္စပ္ Devices (Wireless, USB, NIC, SPI) ေတြနဲ႔ တြဲၿပီးသံုးရင္လည္းရပါတယ္။ ေအာက္မွာ Gameboy ရဲ႕ Schematics ကို ေပးထားပါတယ္။ဒါက Gameboy နဲ႔ RS-232 ကို ခ်ိတ္ဆက္တဲ့ Schematics ပါ။