Keistimewaan 16F88
16F88 mempunyai pin yang kompatibel dengan 16F84 akan tetapi 16F88
memiliki fasilitas osilator internal yang tidak dipunyai oleh 16F84, sehingga pin
yang seharusnya dipakai sebagai oscilator eksternal dapat difungsikan sebagai I/O
(Input/Output). Osilator internal dapat dijalankan dari 125kHz sampai 8MHz
(menggunakan postscaler) atau 31.25kHz (clock internal terpisah). Clock
31.25KHz memungkinkan berjalan pada daya rendah jika diperlukan.16F88
memiliki enam internal peripheral utama termasuk timer, UART dan
comparator analog. Fitur-fitur ini cocok digunakan untuk bahasa tingkat tinggi
karena 16F88 memiliki RAM yang cukup besar.
Flash memory
Flash memory adalah salah satu bagian yang paling penting dari
mikrokontroler dalam menyimpan program C terkompilasi (diprogram ke
dalam mikrokontroler menggunakan file hex yang dihasilkan oleh kompiler).
Manfaat dari Flash memory adalah Anda dapat tetap memrogramnya kembali
setidaknya ribuan kali. untuk jenis mikrokontroller baru bahkan bisa sampai
ratusan ribu kali (16F88 - 100.000 siklus pemrograman).
Memori flash bersifat non-volatile (tidak mudah berubah) yang berarti bahwa
memory flash akan tetap isinya walaupun power dimatikan.
Salah satu manfaat tambahan adalah antarmuka ICSP (In Circuit Serial
Programming) yang memungkinkan Anda untuk memrogram kembali
peralatan saat masih dalam sirkuit Anda.
RAM memory
Bagian-bagian internal
• Tiga timer
• ADC
• Comparator analog
• CCP (PWM)
• SSP (I2C, SPI)
• USART
Kursus ini menggunakan dua perangkat yang tersedia yaitu PWM (Pulse Width
Modulator) dan USART (untuk berkomunikasi melalui RS232 ke PC).
Video
Sebelum Anda mulai menggunakan kompiler, berikut ini adalah demo video
pendek yang menunjukkan kepada Anda bagaimana untuk:
http://www.youtube.com/watch?v=2r2Hy5XUu78
MenggunakanICPROGpemrograman
1.1 m
perangkat lunak
Ports
Mikrokontroler PIC memiliki beberapa 8 bit port tergantung pada jumlah PIN
yang tersedia dan mereka biasanya diberi label mulai dari A yaitu port input
dan output.
Jadi port pertama diberi label PORTA dan Anda dapat menggunakan nama ini
dalam program C untuk merujuk ke port tersebut. Jika Anda melihat gambar
mikrokontroler di atas, Anda akan melihat pin pada chip dilabelkan dengan
RA0 sampai RA7 yang mewakili semua bit untuk PORTA.
Perhatikan bahwa terdapat kata-kata port input dan output. Ini karena port
dapat menjadi port input atau port output dan tidak hanya itu, masing-
masing pin dalam port juga dapat menjadi input atau output.
Hal ini membuat port sangat fleksibel karena Anda dapat menetapkan satu
pin untuk membaca sebuah tombol, sementara pin yang lain (pada port yang
sama) sebagai pin output yang mengontrol nyala LED, kipas angin, dll.
Aspek penting lain adalah bahwa Anda juga dapat mengubah pin input atau
output dengan cepat yaitu ketika program sedang berjalan. misalnya
berkomunikasi dengan perangkat 1 wire atau menggunakan I2C. tetapi ini
akan dibahas pada modul selanjutnya.
Kompiler C menggunakan label port yang sama dengan yang Anda temukan
dalam lembar datasheet PIC 16F88 sehingga untuk PIC 16F88 ada dua port 8
bit berlabel PORTA dan PORTB.
Dalam gambar di atas, bit PORTA dilabeli RA0 sampai RA7 dan bit PORTB
dilabeli RB0 sampai RB7). Label lain adalah pin alternatif yang berfungsi
untuk perangkat internal.
RX dan TX input dan output –nya terhubung ke pin 8 dan 11 dan multiplexed
dengan RB2 dan RB5 (PORTB bit 2 dan 5).
Jika Anda ingin menggunakan port secara normal I/O maka Anda
menonaktifkan UART (kondisi default).
Untuk saat ini kita hanya akan menganggap konfigurasi sederhana (kondisi
default) yaitu tidak menggunakan perangkat internal.
//////////////////////////////////////////////////////////
//
// File: prog01-16F88-port-flash.c
//
// Compiler: mikroC, mikroElektronika C Kompilator
// untuk microchip PIC microcontrollers
// Versi: 6.2.0.0
//
// Diuji pada PIC 16F88
// Clock: 4 MHz (internal)
//
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
/ / Mulai di sini
//
void {main (void)
/ * Setup 16F88 * /
OSCCON = 0X60; / * b64 = 110 = 4 MHz * /
ANSEL = 0; / * semua ADC pin untuk digital I/O * /
PORTB = 0XFF;
delay_ms(500);
PORTB = 0;
delay_ms(500);
}
}
Anda perlu mengetahui tentang kontrol internal dan eksternal karena ini
adalah kontrol yang memungkinkan mikrokontroler bekerja sesuai dengan
cara yang Anda inginkan.
Berikut adalah sedikit detail tentang mengapa ada nilai tertentu dalam
register ANSEL dan OSCCON pada program diatas.
Kontrol internal
... digunakan untuk setup 16F88. 16F88 memiliki banyak perangkat internal
dan sebagian besar (pada kondisi default) adalah off, tetapi ADC tidak begitu,
Anda harus mematikan ADC untuk menggunakan pin-pin sebagai I/O digital
normal, yaitu menggunakan ANSEL = 0.
OSCCON register
ANSEL adalah register analog select control yang default-nya adalah on,
sehingga semua pin ditetapkan untuk menerima sinyal analog. Untuk proyek
awal, Anda membutuhkan mereka diatur ke digital I/O yaitu tidak
menggunakan ADC.
ANSEL = 0X00;
... diterjemahkan nilai biner 0000 0000 - karena setiap bit adalah nol, yang
dapat Anda lihat dari tabel di atas, maka tiap-tiap pin kini difungsikan sebagai
digital I/O.
Jika Anda melihat pada gambar PIC 16F88, pin yang dapat berfungsi sebagai
input analog adalah semua pin yang berlabel ANn di mana n adalah 0 sampai
6 – semua ini ada pada PORTA. semua pin-pin ini sekarang adalah digital I/O
yaitu beroperasi tanpa ADC.
Kontrol-kontrol eksternal
• _EXTRC_CLKOUT
• _EXTRC_IO
• _INTRC_CLKOUT
• _INTRC_IO
• _EXTCLK
• _HS_OSC
• _XT_OSC
• _LP_OSC
Ini adalah semua opsi osilator dan disinilah osilator internal dipilih dan pin
clock diatur untuk digunakan sebagai pin I/O normal. Untuk kristal eksternal
pada 4 MHz, pilih _HS_OSC dan matikan yang lain.
BODEN_OFF
Brown out detect off - jika ‘brown out’ dibiarkan dalam posisi on maka saat
‘brown out’ mendeteksi terjadinya sedikit penurunan pada power supply,
mikrokontroler tidak berhenti beroperasi tetapi yang mungkin terjadi adalah
perubahan (corruption) data misalnya nilai RAM yang ditetapkan berubah
karena penurunan power.
Untuk proyek-proyek non-produksi dan non-kritis matikan saja kontrol ini jika
tidak mikrokontroler akan secara otomatis me-reset on 'brown out'.
MCLR_OFF
Master Clear Control (atau master reset input). Input ini terdapat pada semua
perangkat PIC dan memungkinkan Anda me-reset prosesor menggunakan
tegangan input eksternal dengan cara menahannya untuk sementara dalam
kondisi low (di ground).
WDT_OFF
Watch Dog Timer adalah timer internal independen yang mana Anda harus
tetap me-reset *menggunakan software) agar WDT tidak kehabisan waktu.
Itu adalah pelindung modul software dan jika WDT kehabisan waktu, prosesor
akan me-reset.
10 Konfigurasi register yang harus anda centang pada panel “Edit Project”
adalah sebagai berikut:
• _CP_OFF
• _CCP1_RB0
• _DEBUG_OFF
• _WRT_ENABLE_OFF
• _CPD_OFF
• _LVP_OFF
• _BODEN_OFF
• _MCLR_OFF
• _WDT_OFF
• _INTRC_IO
Catatan: Anda dapat melihat makna dari semua kontrol lainnya pada
datasheet 16F88.
Ini adalah titik awal program yang dinyatakan sebagai fungsi. Fungsi-fungsi
yang digunakan di seluruh pemrograman C adalah untuk mendefinisikan
tindakan dari sepotong kode dibawahnya dan nama fungsi dalam kasus ini
adalah main. Secara umum Anda dapat menentukan nama Anda sendiri untuk
fungsi-fungsi lain yang Anda nyatakan, tapi 'main' adalah kata kunci dan
fungsi 'main' harus ada dan ini memberitahu compiler dimana program mulai
diakses.
Kata-kata kunci 'void' Anda akan kembali lagi ketika Anda melihat deklarasi
fungsi secara lebih rinci.
Braces digunakan untuk mendefinisikan isi dari fungsi atau blok pernyataan.
fungsi main memiliki sebuah brace awalan dan akhiran yang mendefinisikan
isinya.
Dalam program ini ada dua braces tertutup, satu untuk fungsi main dan satu
untuk pernyataan while.
Catatan: Setiap pembuka brace '{' harus diikuti dengan penutup brace '}'.
Arah port
Pernyataan...
Kata TRISB didefinisikan untuk Anda dalam file setup kompiler. TRISB adalah
alamat di memori PIC SFR (Special Function Register).
Catatan: Register TRIS mungkin diberi label setelah istilah teknik elektronik
'tristate atau three state' di mana chip-chip (misalnya 74HC125) memiliki pin
kontrol tristate yang active low. Ketika low output diaktifkan (enabled).
Sebenarnya ini adalah kebalikan dari cara di mana kebanyakan
microcontrollers lainnya bekerja.
Untuk mengatur port sebagai input, Anda akan menulis:
TRISB = 0XFF;
while(1) {
pernyataan...
...yang perlu Anda ketahui tentang hal itu sekarang adalah bahwa loop terus-
menerus mengeksekusi pernyataan yang diapit oleh brace (tanda kurung
kurawal) sampai power dimatikan.
Setiap pernyataan dalam brace adalah dieksekusi satu demi satu sampai akhir
brace dan kemudian eksekusi dilanjutkan lagi setelah brace pembuka.
Anda dapat menggunakan gaya apapun yang Anda suka dan beberapa orang
menulis seperti ini :
while(1)
{
pernyataan...
Jadi kode bit yang menarik - yang benar-benar melakukan sesuatu yang
berguna adalah:
PORTB = 0XFF;
delay_ms(500);
PORTB = 0;
delay_ms(500);
Semua pin PORTB ditetapkan high kemudian menunggu selama 500 milidetik
(0.5 detik) lalu semua pin PORTB ditetapkan low lalu menunggu selama 500
milidetik. Hal ini terjadi berulang-ulang sehingga apabila PORTB di koneksikan
dengan LED, maka LED akan hidup mati (berkedip) seterusnya.
Atau Anda bisa meletakkan lebih dari satu titik koma. mendefinisikan
pernyataan pada baris membuatnya lebih mudah untuk membaca kode.
Misalnya Anda bisa juga menulis:
if (a== 10)
c = 20;
else
c = 0;
Catatan: Blok pernyataan tidak perlu tanda titik koma untuk menyelesaikan
definisi sehingga tidak ada titik koma setelah penutupan brace '}'.
PORTB = 0XFF;
delay_ms(500);
PORTB = 0;
delay_ms(500);
PORTB=0xff;delay_ms(500);PORTB=0;delay_ms(500);
Keduanya akan dilihat oleh kompiler sebagai C yang benar, Anda dapat
melihat yang mana yang lebih mudah untuk dibaca.
Sirkuit
Program 1: latihan
Pertama, Ubahlah hanya source code dan lalu compile ulang. Kedua, ubahlah
sumber kode dan kecepatan clock di kompiler 'Edit project' pengaturan yang
ditunjukkan di atas. perbedaan yang Anda lihat adalah bahwa kompiler
menggunakan setting kecepatan clock untuk menghitung operasi delay_ms
yang diperlukan.