Setelah mengikuti seminar sehari yang diadakan Microchip, akhirnya proyek awal kecil-kecilan terealisasi juga. Rencananya ingin menggunakan demo board PICOne yang dibeli di seminar tersebut, namun ternyata teman memiliki beberapa _sample _mikrokontroler PIC. Saya pikir ini lebih mudah dan lebih fleksibel.

Mikrokontroler yang saya gunakan di sini adalah PIC18F14K50 DIP-20 dengan spesifikasi sebagai berikut:

  • Flash 16kb
  • RAM 768 bytes
  • EEPROM 256 bytes
  • Jumlah pin 20
  • 15 I/O
  • 9 channel 10-bit ADC
  • EUSART, I2C, SPI
  • 2 analog comparator
  • 8-bit timer 1 buah, 16-bit timer 3 buah
  • USB

Wow IC kecil yang kaya dengan fitur.

Ok, saya menggunakan _prototype _PCB buatan sendiri, dengan ukuran minimalis 5x5cm namun memiliki lubang khusus untuk konektor USB dan RJ-11/RJ-45. Kemudian _header _6-pin dipasang khusus untuk mengunggah program ke IC. _Programmer _yang saya gunakan adalah PICkit 3 yang dibeli bersamaan dengan demo board PICOne dengan harga cukup murah :D

Untuk IDE saya gunakan MPLAB X yaitu IDE dari Microchip generasi terbaru. _Compiler _yang saya gunakan adalah XC8 Free Edition tanpa optimasi kode. Baik IDE maupun compiler ini tersedia untuk beberapa platform, Windows, Linux, dan Mac. Di sini saya menggunakan versi Windows karena laptop yang saya gunakan adalah milik kantor yang sistem operasinya menggunakan Windows 7.

Seperti biasa program perkenalan yang biasa kita buat pertama kali adalah “Hello World”, dan tentunya hello world untuk mikrokontroler adalah antarmuka LED L-)

Berikut skematik rangkaian: (gambar menyusul)

Dan berikut kode sumbernya:

main.c

/******************************************************************************/
/* Files to Include                                                           */
/******************************************************************************/

#include <htc.h>           /* Global Header File */
#include <stdint.h>        /* For uint8_t definition */
#include <stdbool.h>       /* For true/false definition */

#include "system.h"        /* System funct/params, like osc/peripheral config */
#include "user.h"          /* User funct/params, such as InitApp */

#pragma config FOSC = IRC   /* Internal RC oscillator */

#define _XTAL_FREQ 1000000  /* Use default internal oscillator (1MHz) */

/******************************************************************************/
/* User Global Variable Declaration                                           */
/******************************************************************************/

void delay(int second);

/******************************************************************************/
/* Main Program                                                               */
/******************************************************************************/

uint8_t main(void)
{
    /* Configure the oscillator for the device */
    ConfigureOscillator();

    /* Initialize I/O and Peripherals for application */
    InitApp();

    /* TODO <INSERT USER APPLICATION CODE HERE> */

    while(1)
    {
        PORTB = PORTB & 0x7F;
        PORTC = PORTC | 0x10;
        delay(1);
        PORTB = PORTB & 0x7F;
        PORTC = PORTC & 0xEF;
        PORTC = PORTC | 0x40;
        delay(1);
        PORTB = PORTB | 0x80;
        PORTC = PORTC & 0xAF;
        delay(1);
    }
}

void delay(int second)
{
    int counter;
    for (counter = 0; counter < (1000 * second); counter++)
    {
        __delay_ms(1);
    }
}

user.c

/******************************************************************************/
/* Files to Include                                                           */
/******************************************************************************/

#include <htc.h>            /* HiTech General Includes */
#include <stdint.h>         /* For uint8_t definition */
#include <stdbool.h>        /* For true/false definition */

#include "user.h"

/******************************************************************************/
/* User Functions                                                             */
/******************************************************************************/

/* <Initialize variables in user.h and insert code for user algorithms.> */

void InitApp(void)
{
    /* TODO Initialize User Ports/Peripherals/Project here */
    TRISB = 0x00;
    TRISC = 0x00;

    /* Setup analog functionality and port direction */

    /* Initialize peripherals */

    /* Configure the IPEN bit (1=on) in RCON to turn on/off int priorities */

    /* Enable interrupts */
}

Hasilnya adalah nyala LED yang bergantian dengan jeda 1 detik.