Modul Exp UC Nuvoton-V1.0 [PDF]

  • 0 0 0
  • Suka dengan makalah ini dan mengunduhnya? Anda bisa menerbitkan file PDF Anda sendiri secara online secara gratis dalam beberapa menit saja! Sign Up
File loading please wait...
Citation preview

Putra, A.E. dan Antony, C.A, 2012, Petunjuk Praktikum Nuvoton NUC140 ARM Cortex M0, AAERG – ELINS, UGM



Modul 1: Konsep I/O pada NUC1XX series Tujuan Memahami konsep Luaran/Masukan (I/O) pada mikrokontroler ARM Cortex M0 NuMicro 1XX Series (NUC140VE3CN)



Pendahuluan NUC1XX series adalah ARM ® Cortex ™-mikrokontroler dengan M0 core didalamnya yang cocok digunakan untuk kontrol industri dan aplikasi yang membutuhkan fungsi komunikasi khusus. Cortex ™-M0 adalah prosesor ARM terbaru dengan kinerja 32-bit dengan biaya yang setara dengan mikrokontroler 8-bit. NuMicro Seri NUC100 memiliki inti ARM Cortex M0 yang tertanam dengan kecepatan hingga 50 MHz, dilengkapi dengan memori flash untuk program 32K/64K/128Kbyte., SRAM sebesar 4K/8K/16K-byte dan memori flash loader untuk ISP (In System Programming) sebesar 4K-byte. Selain itu juga dilengkapi dengan berbagai macam periferal, seperti GPIO, Timer, Watchdog Timer, RTC, PDMA, UART, SPI/MICROWIRE, I2C, I2S, PWM, LIN, CAN, PS2, USB 2.0 FS Device, ADC 12-bit, komparator analog, Low Voltage Reset dan Brown-out Detector. Gambar 1 menunjukkan diagram blok dari NuMicro NUC130/140 Series.



Gambar 1. Diagram Blok NuMicro NUC130/140 Series



NUC140 Learning Board Board ini menggunakan catudaya 5V, yang dapat diperoleh dari konektor USB ataupun melalui konektor catudaya adaptor. Tegangan ini langsung menjadi VDD untuk chip



Putra, A.E. dan Antony, C.A, 2012, Petunjuk Praktikum Nuvoton NUC140 ARM Cortex M0, AAERG – ELINS, UGM



NUC140VE3CN, sehingga perlu diperhatikan tegangan input ini maksimal adalah 5.5V (menurut datasheet NUC140). Pada board terdapat juga catudaya teregulasi 3.3V menggunakan chip LM1117. Tipe chip regulator ini tidak dinyatakan dalam skematik. Tegangan dari Powerjack 3 pin dan konektor USB dilewatkan melalui dioda sehingga aman dari kesalahan polaritas pemasangan, namun tidak melindungi dari kerusakan jika tegangan masuk melebihi 5.5V. Gambar 1 menunjukkan layout NUC140 Learning Board. Sedangkan Tabel 1 menunjukkan penggunaan pin pada Learning Board tsb.



Gambar 1. Layout NUC140 Learning Board dari Nuvoton Tabel 1. Konfigurasi Sistem pada NuMicro 1XX series Development Board Blok ICE Bridge Nu-Link UART Pushbutton GPB15 CAN



Pin ICE_CLK ICE_DATA GPB0 GPB1 GPB15 GPD6 GPD7 GPB12-13



Fungsi Antarmuka SWD Rx UART0 Tx UART0 INT0 Rx CAN0 Tx CAN0 CAN transceiver speed



Putra, A.E. dan Antony, C.A, 2012, Petunjuk Praktikum Nuvoton NUC140 ARM Cortex M0, AAERG – ELINS, UGM



Blok WAU8822 Codec



LIN



7-Seg LED LCD Panel Dot Matrix



Potensiometer Buzzer Keypad matrix Reset EEPROM Slot SD card



Flash



LED



Pin GPC0 GPC1 GPC2 GPC3 GPA15 GPA8 GPA9 GPE14 GPE15 GPB4 GPB5 GPB6 GPB7 GPE0-7 GPC4-7 GPD8 GPD9 GPD10 GPD11 GPD14 GPA7 GPB11 GPA0-5 RESET GPA10 GPA11 GPD12 GPD13 GPC8-11 GPD0 GPD1 GPD2 GPD3 GPD4 GPD5 GPA12 GPA13 GPA14 GPC12-15



Fungsi I2SLRCLK I2SBCLK I2SDI I2SDO I2SMCLK I2C0 SDA I2C0 SCL Line out Enable/Disable Line in Enable/Disable Rx UART1 Tx UART1 LIN transceiver wakeup LIN transc. Enable/Disable Baris Kolom SPI3 SS30 SPI3 SPCLK SPI3 MISO0 SPI3 MOSI0 Lampu latar LCD Antarmuka ADC PWM4 GPIO Reset I2C1 SDA I2C1 SCL Catudaya SD card Deteksi SD card Antarmuka SD card SPI2 SS20 SPI2 SPCLK SPI2 MISO0 SPI2 MOSI0 SPI2 MISO1 SPI2 MOSI1 PWM0 PWM1 PWM2 GPIO



Perangkat Lunak Kompilasi Untuk membuat sebuah proyek aplikasi menggunakan ARM® Cortex™-M0 dari NuMicro Nuvoton NUC1XX series, dapat digunakan CooCox IDE. Berikut langkah yang digunakan dalam membuat sebuah project baru dengan menggunakan CooCox IDE:



Putra, A.E. dan Antony, C.A, 2012, Petunjuk Praktikum Nuvoton NUC140 ARM Cortex M0, AAERG – ELINS, UGM



1. Klik menu Project  New Project lalu tulis nama proyek aplikasi yang akan dibuat dan tentukan lokasi penyimpanan project tersebut. Setelah itu klik finish; 2. Lalu klik Nuvoton dan pilih jenis mikrokontroler NUC140VE3CN; 3. Kemudian akan muncul jendela repository. Pada bagian ini dapat dipilih pustaka components yang akan digunakan; 4. Kemudian buka file main.c pada bagian jendela project. Pada main.c inilah dapat ditulis kode program yang akan digunakan pada mikrokontroler Nuvoton; 5. Untuk mengkompile program klik menu Project  build atau tekan F7; 6. Untuk mendownload program yang telah ditulis, klik Flash  Program Download.



Latihan 1. Menyalakan LED Pada NuMicro Development Board tersedia LED yang terhubung pada GPCC12 sampai GPC15. Pada program untuk menyalakan LED digunakan fungsi DrvGPIO_SetPortBits untuk membuat port GPIO bernilai HIGH dan LOW tertentu pada bit-bitnya. Untuk membuat program, klik panel repository lalu pilih M0 Cmsis Core, Cmsis Boot, System definition, SYS, dan GPIO. Lalu ketik listing program berikut: #include "DrvSYS.h" #include "DrvGPIO.h" void delay_loop(void) { uint32_t i,j; for(i=0;iADCR.DIFFEN = 0; //single end input ADC->ADCR.ADMD = 0; //single mode



Putra, A.E. dan Antony, C.A, 2012, Petunjuk Praktikum Nuvoton NUC140 ARM Cortex M0, AAERG – ELINS, UGM /* Step 4. Select ADC channel */ ADC->ADCHER.CHEN = 0x80; /* Step 5. Enable ADC interrupt */ ADC->ADSR.ADF =1; //clear the A/D interrupt flags for safe ADC->ADCR.ADIE = 1; // NVIC_EnableIRQ(ADC_IRQn); /* Step 6. Enable WDT module */ ADC->ADCR.ADST=1; }



Untuk mendapatkan nilai ADC pada port tertentu, bias digunakan instruksi ADDR[namaport].RSLT



Misal untuk mendapatkan nilai ADC pada Port GPA7, digunakan instruksi: ADC->ADDR[7].RSLT



Latihan: Tulis program utama berikut pada program utama yang telah anda buat: int main (void) { //Enable 12Mhz and set HCLK->12Mhz char adc_value1[15]="ADC Value:"; char adc_value2[15]="ADC Volt :"; UNLOCKREG(); SYSCLK->PWRCON.XTL12M_EN = 1; SYSCLK->CLKSEL0.HCLK_S = 0; LOCKREG(); InitADC(); Initial_pannel(); clr_all_pannal();



//call initial pannel function



/* Synch field transmission & Request Identifier Field transmission*/ double volt; while(1) { while(ADC->ADSR.ADF==0); ADC->ADSR.ADF=1; Show_Word(0,11,' '); Show_Word(0,12,' '); Show_Word(0,13,' '); volt = ((ADC->ADDR[7].RSLT)/4095); // 12bit ADC resolution, Vref=5volt sprintf(adc_value1+10,"%d",ADC->ADDR[7].RSLT); sprintf(adc_value2+10,"%3.2f",volt); print_lcd(0, adc_value1); print_lcd(1, adc_value2); Delay(20000); ADC->ADCR.ADST=1; } }



Putra, A.E. dan Antony, C.A, 2012, Petunjuk Praktikum Nuvoton NUC140 ARM Cortex M0, AAERG – ELINS, UGM



MODUL 6: I2C Tujuan -



Praktikan memahami penggunaan I2C pada NuMicro 1XX Series Development Board dengan menggunakan CoCoox IDE



Pendahuluan I2C (Inter-Integrated Circuit) bus merupakan antarmuka 2 wire serial yang dikembangkan oleh Philips. Dikembangkan untuk aplikasi 8 bit dan banyak digunakan pada consumer electronics, automotive dan indistri. I2C bus ini berfungsi sebagai antarmuka jaringan multimaster, multi-slave dengan deteksi tabrakan data. Jaringan dapat dipasangkan hingga 128 titik dalam jarak 10 meter. Setiap titik dalam jaringan dapat mengirim dan menerima data. Setiap titik dalam jaringan harus memiliki alamat yang unik. Seiring berkembangnya waktu, I2C menjadi sebuah standar komunikasi yang banyak digunakan dalam aplikasi embedded system. Pada NuMicro 1XX series ini memiliki fitur I2C sebagai berikut:  Up to two I2C controllers.  Compatible with Philips I2C standard.  Support Master/Slave mode  Support 7 bit addressing mode  Built-in a 14-bit time-out counter to avoid the  I2C bus hang-up.5  Features (2/2)  Multiple address recognition Pada praktikum kali ini akan dicoba menuliskan flash memori pada 24LC64 EEPROM dengan menggunakan I2C pada NuMicro. 24AA64/24LC64 (24XX64 *) adalah 64 Kbit Electrically Erasable PROM. Perangkat ini disusun sebagai delapan blok dari 1K x 8-bit memori dengan antarmuka 2-wire serial. Berikut diagram blok dari 24LC64 EEPROM:



Gambar 3. Diagram blok 24LC64 EEPROM



Putra, A.E. dan Antony, C.A, 2012, Petunjuk Praktikum Nuvoton NUC140 ARM Cortex M0, AAERG – ELINS, UGM



Untuk menggunakan fungsi I2C pada EEPROM 24LC64 yang tersedia pada NuMicro development Board, dapat digunakan library EEPROM_24LC64.h dan Driver\DrvI2C.h. Tuliskan listing program berikut: #include #include "NUC1xx.h" #include "Driver\DrvSYS.h" void delay_loop(void) { uint32_t i,j; for(i=0;iTCSR.PRESCALE=0; // Set Prescale [0~255] TIMER0->TCMPR = 1000000; // Set TICR(TCMP) [0~16777215] //(1/22118400)*(0+1)*(2765)= 125.01usec or 7999.42Hz /* Step 4. Enable interrupt */ TIMER0->TCSR.IE = 1; TIMER0->TISR.TIF = 1; //Write 1 to clear for safty NVIC_EnableIRQ(TMR0_IRQn); //Enable Timer0 Interrupt /* Step 5. Enable Timer module */ TIMER0->TCSR.CRST = 1; //Reset up counter TIMER0->TCSR.CEN = 1; //Enable Timer0 TIMER0->TCSR.TDR_EN=1; }



// Enable TDR function



Putra, A.E. dan Antony, C.A, 2012, Petunjuk Praktikum Nuvoton NUC140 ARM Cortex M0, AAERG – ELINS, UGM



Saat terjadi overflow, maka mikrokontroler akan mengeksekusi program yang terdapat pada fungsi void TMR0_IRQHandler(void) // Timer0 interrupt subroutine { -masukkan program interupsi-



} Berikut contoh program saat terjadi interupsi: /*--------------------------------------------------------------------------Interrupt subroutine ---------------------------------------------------------------------------*/ static unsigned char count=0; static unsigned char loop=12; void TMR0_IRQHandler(void) // Timer0 interrupt subroutine { unsigned char i=0; TIMER0->TISR.TIF =1; count++; if(count==5) { DrvGPIO_ClrBit(E_GPC,loop); loop++; count=0; if(loop==17) { for(i=12;iTCSR.MODE=1; //Select periodic mode for operation mode /* Step 3. Select Time out period = (Period of timer clock input) * (8-bit Prescale + 1) * (24-bit TCMP)*/ TIMER0->TCSR.PRESCALE=0; // Set Prescale [0~255] TIMER0->TCMPR = 1000000; // Set TICR(TCMP) [0~16777215] // (1/22118400)*(0+1)*(2765)= 125.01usec or 7999.42Hz /* Step 4. Enable interrupt */ TIMER0->TCSR.IE = 1; TIMER0->TISR.TIF = 1; //Write 1 to clear for safty NVIC_EnableIRQ(TMR0_IRQn); //Enable Timer0 Interrupt /* Step 5. Enable Timer module */ TIMER0->TCSR.CRST = 1; //Reset up counter TIMER0->TCSR.CEN = 1; //Enable Timer0 TIMER0->TCSR.TDR_EN=1;



// Enable TDR function



} int main(void) { int i=0,j=0; /* Unlock the protected registers */ UNLOCKREG(); /* Enable the 12MHz oscillator oscillation */ DrvSYS_SetOscCtrl(E_SYS_XTL12M, 1); /* Waiting for 12M Xtal stalble */ SysTimerDelay(5000); /* HCLK clock source. 0: external 12MHz; 4:internal 22MHz RC oscillator */ DrvSYS_SelectHCLKSource(0); /*lock the protected registers */ LOCKREG();



Putra, A.E. dan Antony, C.A, 2012, Petunjuk Praktikum Nuvoton NUC140 ARM Cortex M0, AAERG – ELINS, UGM DrvSYS_SetClockDivider(E_SYS_HCLK_DIV, 0); /* HCLK clock frequency = HCLK clock source / (HCLK_N + 1) */ for(i=12;iCLKSEL1.PWM01_S = 3;//Select 22.1184Mhz for PWM clock source PWMA->PPR.CP01=1; //Prescaler 0~255, Setting 0 to stop output clock PWMA->CSR.CSR0=0; // PWM clock = clock source/(Prescaler + 1)/divider /* Step 3. Select PWM Operation mode */ //PWM0 PWMA->PCR.CH0MOD=1; //0:One-shot mode, 1:Auto-load mode //CNR and CMR will be auto-cleared after setting CH0MOD form 0 to 1. PWMA->CNR0=0xFFFF; PWMA->CMR0=0xFFFF;



Putra, A.E. dan Antony, C.A, 2012, Petunjuk Praktikum Nuvoton NUC140 ARM Cortex M0, AAERG – ELINS, UGM PWMA->PCR.CH0INV=0; PWMA->PCR.CH0EN=1; PWMA->POE.PWM0=1;



//Inverter->0:off, 1:on //PWM function->0:Disable, 1:Enable //Output to pin->0:Diasble, 1:Enable



}



Fungsi diatas digunakan untuk melakukan setting PORT PWM0 dengan mode operasi autoload mode. Berikut ini contoh program penggunaan PWM. while(ADC->ADSR.ADF==0); ADC->ADSR.ADF=1; PWMA->CMR0=ADC->ADDR[7].RSLTADCR.ADST=1;



Pada program diatas, akan digunakan pengontrolan lebar pulsa PWM dengan memanfaatkan nilai ADC pada address 7 yang masuk pada input variabel resistor



Putra, A.E. dan Antony, C.A, 2012, Petunjuk Praktikum Nuvoton NUC140 ARM Cortex M0, AAERG – ELINS, UGM



MODUL 9: SPI – Serial Peripheral Interface Tujuan -



Praktikan memahami penggunaan Serial Peripheral Interface (SPI) pada NuMicro 1XX Series Development Board dengan menggunakan CoCoox IDE



SPI (serial peripheral interface) merupakan port komunikasi serial sinkron. Pada development board NuMicro 1XX series terdapat fitur SPI sebagai berikut:        



Up to four SPI controllers Each SPI controller can drive up to two slave devices in master mode Support master/slave mode operation Support 1-channel or 2-channel serial data IN/OUT Configurable data length Provide burst mode operation



Berikut blok diagram kerja SPI pada NuMicro Development Board 1XX



1bit SPI+SPI Flash+PDMA Connection



Putra, A.E. dan Antony, C.A, 2012, Petunjuk Praktikum Nuvoton NUC140 ARM Cortex M0, AAERG – ELINS, UGM



Condition: Master mode One channel data in/out SPI clock rate 1MHz Transmit data at negative edge Receive data at positive edge Disable the auto slave select Slave select is active low SPICLK2 SPI-Flash0_CLK MISO20 SPI-Flash0_DO MOSI20 SPI-Flash0_DI SPISS20 SPI-Flash0_/CS Pada NuMicro 1XX series Development board, terdapat flash memory eksternal W25Q16BV yang memiliki konfigurasi sebagai berikut:



Putra, A.E. dan Antony, C.A, 2012, Petunjuk Praktikum Nuvoton NUC140 ARM Cortex M0, AAERG – ELINS, UGM



Berikut contoh pemrograman flash memory eksternal W25Q16BV dengan menggunakan SPI #define TEST_NUMBER 1 /* page numbers */ //void SPI0_Callback(uint32_t u32UserData); //volatile uint32_t SPI0_INT_Flag; void SpiFlashx2_ReadMidDid(void); void SpiFlashx2_ChipErase(void); uint32_t SpiFlash2_ReadStatusReg1(void); uint32_t SpiFlash2_ReadStatusReg2(void); void SpiFlashx2_WaitReady(void); void SpiFlashx2_PageProgram(uint8_t *, uint32_t, uint32_t); void SpiFlashx2_ReadData(uint8_t *, uint8_t *, uint32_t, uint32_t); void Initial_pannel(void); void clr_all_pannal(void); void print_lcd(unsigned char, char *); void SysTimerDelay(uint32_t); void delay(void) { int j; for(j=0; j