calculator timer untuk PIC 16F877

tidak perlu pusing untuk belajar timer. yang membuat ribet tentang timer yaitu ketika menentukan nilai awal timer. makanya agar tidak ribet solusinya yaitu mencari kalkulatornya.

mikroelektronika memberikan jawaban untuk kalkulator timer. aplikasinya dapat di unduh di link berikut

http://www.mikroe.com/timer-calculator/

berikut tampilan kalkulatornya

timer

 

aplikasi input dan eeprom internal pada pic 16f877

kita akan membuat aplikasi count up dan count down. untuk inputnya berupa push button terhubung ke RB0 dan ke RB1.

Setiap RB1 di tekan nilai counter akan naik kemudian disimpan ke eeprom internal. dan setiap RB1 di tekan nilai counter akan turun kemudian disimpan keeeprom internal. hasil counter akan ditampilkan di 7 segment 3 digit.

untuk setting port sebagai input yaitu dengan memberi nilai 1. berikut contoh SYNTAX untuk RB0 dan RB1 di setting sebagai input

 

TRISB0=1;

TRISB1=1;

 

untuk membaca port RB0 dan RB1 syntaxnya seperti ini

if(RB0==0) //jika RB0 di tekan maka
{

}

//=======================================================================

pada xc8 untuk akses eepeom internal sudah terdapat librarynya.  syntax untuk menulis dan membaca eeprom internal.

temp1=eeprom_read(0); // untuk baca alamat ke 0

eeprom_write(0,temp1); // untuk tulis alamat ke 0 dengan data pada temp1

//==========================================================================

berikut contoh program keseluruhan yang akan kita buat

#include <xc.h>

// CONFIG
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT enabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config CP = OFF // FLASH Program Memory Code Protection bits (Code protection off)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF // Low Voltage In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EE Memory Code Protection (Code Protection off)
#pragma config WRT = ON // FLASH Program Memory Write Enable (Unprotected program memory may be written to by EECON control)
#define _XTAL_FREQ 16000000
#define data_hi PORTD|=(1<<0)
#define data_lo PORTD&=~(1<<0)
#define strobe_hi PORTD|=(1<<2)
#define strobe_lo PORTD&=~(1<<2)
#define clock_hi PORTD|=(1<<1)
#define clock_lo PORTD&=~(1<<1)
unsigned char temp,temp1;
unsigned char i;
unsigned char buff[10];
const unsigned char textdata[] ={
//dot g f e d c b a
0b11000000,
0b11111001,
0b10100100,
0b10110000,
0b10011001,
0b10010010,
0b10000010,
0b11111000,
0b10000000,
0b10010000,
};
//===================================================================
//74595
//=====================================================================
void clock_74595()
{
clock_hi;
__delay_us(1);
clock_lo;
}

void strobe_74595()
{
strobe_hi;
__delay_us(10);
strobe_lo;

}
void kirimbyte74595(unsigned char antrian)
{
unsigned char dataled;
dataled=antrian;
if(dataled&(1<<7))data_hi;else data_lo;
clock_74595();
if(dataled&(1<<6))data_hi;else data_lo;
clock_74595();
if(dataled&(1<<5))data_hi;else data_lo;
clock_74595();
if(dataled&(1<<4))data_hi;else data_lo;
clock_74595();
if(dataled&(1<<3))data_hi;else data_lo;
clock_74595();
if(dataled&(1<<2))data_hi;else data_lo;
clock_74595();
if(dataled&(1<<1))data_hi;else data_lo;
clock_74595();
if(dataled&(1<<0))data_hi;else data_lo;
clock_74595();
}
void tampil()
{
temp=temp1;
buff[2]=(temp/100);
buff[1]=((temp%=100)/10);
buff[0]=(temp%10);
kirimbyte74595(textdata[buff[0]]);
kirimbyte74595(textdata[buff[1]]);
kirimbyte74595(textdata[buff[2]]);
strobe_74595();

}
//=================================================================
int main()
{
__delay_ms(100);
TRISB0=1;
TRISB1=1;

TRISD=0;
PORTD=0;

data_lo;
strobe_lo;
clock_lo;

temp1=eeprom_read(0);
tampil();
__delay_ms(1000);

while(1)
{
if(RB0==0)
{
temp1++;
temp=temp1;
eeprom_write(0,temp1);
tampil();
__delay_ms(500);
}
else if(RB1==0)
{
temp1–;
temp=temp1;
eeprom_write(0,temp1);
tampil();
__delay_ms(500);
}
}
}

 

berikut hasil simulasi proteusnya

 

input

hasil penulisan eeprom di alamat 0

eeprom

 

 

 

 

 

aplikasi menyalakan 3 digit 7 segment dengan mikrokontroler PIC16F877

antarmuka 7 segment banyak caranya, yang sering di pakai ketika saya dulu pertama belajar mikrokontroler yaitu dengan teknik scaning, dan kelemahannya yaitu program harus terus menerus update tampilan. nah ketika program meninggalkan layanan update tampilan. maka dengan seketika 7 segment akan berkedip.

nah tulisan ini akan menceritakan antarmuka 7 segment dengan teknik shift register dan latching. jadi kita cuma update tampilan 1 kali. sesudah itu program bisa meninggalkan update tampilan.

keuntungan antarmuka 7 segment dengan shift register dan latching (74595)

1. cuma membutuhkan 3 port untuk mengendalikan n x 7 segment

2. update tampilan cuma 1 kali jika ada perubahan saja.

untuk hardwarenya

pin RD0 Terhubung ke data 74595

pin RD1 Terhubung ke clock 74595

pin RD2 Terhubung ke strobe 74595

 

 

 

Berikut contoh source code menggunnakan mpab x ide+ xc 8

#include <xc.h>

// CONFIG
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT enabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config CP = OFF // FLASH Program Memory Code Protection bits (Code protection off)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF // Low Voltage In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF // Data EE Memory Code Protection (Code Protection off)
#pragma config WRT = ON // FLASH Program Memory Write Enable (Unprotected program memory may be written to by EECON control)
#define _XTAL_FREQ 16000000
#define data_hi PORTD|=(1<<0)
#define data_lo PORTD&=~(1<<0)
#define strobe_hi PORTD|=(1<<2)
#define strobe_lo PORTD&=~(1<<2)
#define clock_hi PORTD|=(1<<1)
#define clock_lo PORTD&=~(1<<1)

unsigned char i;
const unsigned char textdata[] ={
//dot g f e d c b a
0b11000000,
0b11111001,
0b10100100,
0b10110000,
0b10011001,
0b10010010,
0b10000010,
0b11111000,
0b10000000,
0b10010000,
};
//===================================================================
//74595
//=====================================================================
void clock_74595()
{
clock_hi;
__delay_us(1);
clock_lo;
}

void strobe_74595()
{
strobe_hi;
__delay_us(10);
strobe_lo;

}
void kirimbyte74595(unsigned char antrian)
{
unsigned char dataled;
dataled=antrian;
if(dataled&(1<<7))data_hi;else data_lo;
clock_74595();
if(dataled&(1<<6))data_hi;else data_lo;
clock_74595();
if(dataled&(1<<5))data_hi;else data_lo;
clock_74595();
if(dataled&(1<<4))data_hi;else data_lo;
clock_74595();
if(dataled&(1<<3))data_hi;else data_lo;
clock_74595();
if(dataled&(1<<2))data_hi;else data_lo;
clock_74595();
if(dataled&(1<<1))data_hi;else data_lo;
clock_74595();
if(dataled&(1<<0))data_hi;else data_lo;
clock_74595();
}
//=================================================================
int main()
{
__delay_ms(100);

TRISD=0;
PORTD=0;

data_lo;
strobe_lo;
clock_lo;
kirimbyte74595(0b10111111);
kirimbyte74595(0b10111111);
kirimbyte74595(0b10111111);
strobe_74595();
__delay_ms(1000);

while(1)
{
for(i=0;i<10;i++)
{
kirimbyte74595(textdata[i]);
strobe_74595();
__delay_ms(1000);
}
}
}

 

simulasi diproteus

shift

 

 

penggunaan array pic16f877

pada aplikasi ini,kita mencoba untuk menyalakan 7 segment (simulasi proteus), tujuan dari aplikasi ini yaitu untuk mengetahui syntax penggunaan array.

berikut contoh penggunaan array.

const unsigned char data_segment[]=
{
//dot g f e d c b a
0b01000000,
0b01111001,
0b00100100,
0b00110000,
0b00011001,
0b00010010,
0b00000010,
0b01111000,
0b00000000,
0b00010000,
};

 

syntaxnya sama seperti  kita menggunakan avr studio atau code vision, untuk memanggil arraynya kita tinggal menuliskan syntax

PORTD=data_segment[i]; // 

 

berikut contoh program keseluruhan untuk menyalakan 7 segment menampilkan angka0-9

#include <xc.h>
#define _XTAL_FREQ 16000000

#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config CP = OFF // FLASH Program Memory Code Protection bits (Code protection off)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = ON // Low Voltage In-Circuit Serial Programming Enable bit (RB3/PGM pin has PGM function; low-voltage programming enabled)
#pragma config CPD = OFF // Data EE Memory Code Protection (Code Protection off)
#pragma config WRT = ON // FLASH Program Memory Write Enable (Unprotected program memory may be written to by EECON control)
unsigned char i;
const unsigned char data_segment[]=
{
//dot g f e d c b a
0b01000000,
0b01111001,
0b00100100,
0b00110000,
0b00011001,
0b00010010,
0b00000010,
0b01111000,
0b00000000,
0b00010000,
};

void main(void)
{
__delay_ms(100);
TRISD=0;
PORTD=0;
for(;;)
{
for(i=0;i<10;i++)
{
PORTD=data_segment[i];
__delay_ms(1000);
}
}
return;
}

 

simulasi proteus

array

 

untuk aplikasi selanjutnya yaitu aplikasi menyalakan 3 digit 7 segment dengan menggunakan ic shift register74594

Mengenal IC mikrokontroler 16F877

PIC 16F877 adalah salah satu mikrokontroler dari Microchip. IC ini  sangat ideal untuk aplikasi seperti aplikasi kontrol mesin, aplikasi pengukuran, tujuan penelitian, dan aplikasi industri.

untuk membeli PIC 16F877 klo dijakarta bisa di beli di “toko beng” kawasan LTC Glodok,

berikut penampakan ic 16f877

16F877

 

Fitur PIC 16F877

o   RISC CPU.

o   kecepatan maximal 20Mhz.

o   RAM 368BYTE , EEPROM 256 BYTE, FLASH 8k×14 .

o   Pin out compatible to PIC 16C74B, PIC 16C76, PIC 16C77.

o   memiliki 14 sumber interupsi

o   Power on Reset (POR).

o   Low power- high speed CMOS flash/EEPROM.

o   tegangan kerja IC (2.0 – 5.56)volts.

o   High sink/source current (25mA).

o   Commercial, industrial and extended temperature ranges.

o   5 ports.

o   3 timers.

o   2 CCP modules.

o   2 serial communication ports (MSSP, USART).

o   PSP parallel communication port

o   10bit A/D module (8 channels)

o   Analog comparator module.

o   Brown out detector

o   Watchdog.

 

PINOUT PIC16F877 kemasan DIP

PINOUT

Pin-pin untuk I/O sebanyak 33 pin, yang terdiri atas 6 pada Port A, 8 pada Port B, 8 pada Port C, 8 pada Port D, 3 pada Port E.

PINOUT1

selain sebagai port input output tiap pin juga memiliki fungsi lain

o    (AN0 TO AN7) untuk ADC.

o   TX and RX Untuk uart serial.

o   SCK: clock spi.

o   SCL: these pins act as an output for both SPI and I2C modes.

o   DT: these are synchronous data terminals.

o   CK: synchronous clock input.

o   SD0: SPI data output (SPI Mode).

o   SD1: SPI Data input (SPI mode).

o   SDA: data input/output in I2C Mode.

o   CCP1 and CCP2: these are capture/compare/PWM modules.

o   OSC1: oscillator input/external clock.

o   OSC2: oscillator output/clock out.

o   MCLR: master clear pin (Active low reset).

o   Vpp: programming voltage input.

o   THV: High voltage test mode controlling.

o   Vref (+/-): reference voltage.

o   SS: Slave select for the synchronous serial port.

o   T0CK1: clock input to TIMER 0.

o   T1OSO: Timer 1 oscillator output.

o   T1OS1: Timer 1 oscillator input.

o   T1CK1: clock input to Timer 1.

o   PGD: Serial programming data.

o   PGC: serial programming clock.

o   PGM: Low Voltage Programming input.

o   INT: external interrupt.

o   RD: Read control for parallel slave port.

o   CS: Select control for parallel slave.

o   PSP0 to PSP7: Parallel slave port.

o   VDD: positive supply.

o   VSS: Ground

Mengenal PIC KIT sebagai downloader mikrokontroler PIC

donwloader PIC yang lumayan terkenal yaitu PIC KIT. untuk downloadernya dapat dibeli diteman saya “andra risciawan silahkan kunjungi webnya http://www.brontoseno.com/”

berikut penampakanPIC KIT. untuk yang terbaru sudah sampai seri 3.

pic2

 

untuk softwarenya memakai “PIC KIT Programmer”

PICprogrammer

 

PIN OUT Pic Kit

pickit2-pinout

tampilan PIC KIT 2 ketika sudah connect

connect

 

 

MENGENAL MPLAB X IDE + XC8

awal mula keinginan untuk memakai PIC karena merasa bingung dengan mikrokontroler yang dijual di pasaran dan karena ada tujuan untuk merepair alat alat buatan negara luar.

pengguna mikrokontroler PIC di indonesia masih bisa terhitung, beda dengan pengguna ATMEL,sangat banyak sekali. saya pun ikut ikutan memakai ic buatan ATMEL, mungkin karena kakak  kelas dan para pengajar lebih merekomendasikan ic tersebut, di tambah lagi dengan buku buku mikro kebanyakan lebih menjelaskan ic buatan atmel.

tidak perlu dimasalahkan pemakaian ic mikrokontroler, yang penting kita bisa membuat alat dengan mikrokontroler. kalo kata saya mah “ALAT UING KUMAHA UING”

software untuk membuat source code mikrokontroler PIC, banyak pilihannya. ada yang memakai bahasa C,bahasa basic dan bahasa assembly. terus ada pula yang gratis ada pula yang bayar.

saya sebagai seseorang yang menghargai karya orang lain mengajak para newbie dan para dedengkot untuk memakai MPLAB X IDE + XC 8 dipastikan gratis.

untuk memulai project ikuti langkah langkah sebagai berikut

xc801

pilih new project

xc802

pilih microchip – standalone project

xc803

pilih ic mikro yang dipakai

xc804

pilih simulator

xc805

pilih XC8

xc806

buat nama project dan simpan pada folder yang diinginkan

xc807

membuat program main, klik kanan pada source file

xc808

 

buat nama file dengan ekstensi .c

xc809

 

berikut tampilan kerangka awal

xc810

 

sekarang kita akan membuat program  kenalan yaitu led blinking.port yang dipakai yaitu RD0. kalo sudah terbiasa dengan avr studio+ gcc pasti akan sangat menyenangkan.  berikut program untuk led blinking pada port RD0

 

#include <xc.h>
#define _XTAL_FREQ 16000000

#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config CP = OFF // FLASH Program Memory Code Protection bits (Code protection off)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = ON // Low Voltage In-Circuit Serial Programming Enable bit (RB3/PGM pin has PGM function; low-voltage programming enabled)
#pragma config CPD = OFF // Data EE Memory Code Protection (Code Protection off)
#pragma config WRT = ON // FLASH Program Memory Write Enable (Unprotected program memory may be written to by EECON control)
void main(void)
{
__delay_ms(100);
TRISD=0;
PORTD=0;
for(;;)
{
RD0=1;
__delay_ms(1000);
RD0=0;
__delay_ms(1000);

}

return;
}

 

setelah itu save all kemudian compile

xc811

 

sedikit penjelasan dari newbie.

pada program banyak sekali tulisan #pragma config, klo pada avr itu sama dengan mengatur fusebit. pada pic pengaturan configuration fuse di ketikan pada program.

kita tidak harus mengetikan dari awal,karena pada compiler mplab x ide+ xc 8 sudah ada generatornya. kita tinggal masuk ke  menu window-PIC memory views-configuration bits

xc812

 

kemudian aturlah configuration bits dan pilih generation source file

xc813

kemudian hasil pengaturan disisipkan pada program

//==================================================================

berikut source untuk pengaturan port sebagai output

void main(void)
{
__delay_ms(100);
TRISD=0; // sebagai output.

untuk pengaturan input output port agak berbeda dengan AVR. pada PIC klo PORT diisi dengan 0 maka port diatur sebagai output,jika 1 maka sebagai input. register untuk pengaturan yaitu TRIS.

//===================================================================

library delay juga sudah tersedia. syntaxnya seperti di bawah ini

 

__delay_ms(1000);

//======================================================================

untuk hasil cocmpile yaitu berupa file hex.berada difolder dist\production

\proyekan pic 16f877\modul pic02 OUTPUT\TESTOUTPUT.X\dist\default\production

//======================================================================

sekian dulu untuk pengenalan mplab x ide + xc 8.

 

mohon maaf jika banyak kata yang kurang berkenan.

 

DISPLAY DOWN TIME PABRIK

Down Time adalah jumlah waktu dimana suatu equipment tidak dapat beroperasi disebabkan adanya kerusakan (failure).

fitur

– power supply 24 VDC

– input untuk failure berupa wet contact dari mesin (24 VDC)

– timer failure untuk mesin bisa di setting

-timer repair setelah di perbaiki bisa di setting,

– display 6 digit jam:menit:detik

-ukuran display 2.3inch

– warna display merah

– dilengkapi buzzer jika terjadi failure

– di lengkapi kunci on off untuk buzzer (jika teknisi merasa bising ketika memperbaiki mesin. buzzer bisa dimatikan)

-handheld untuk setting timer failure dan timer repair.

berikut contoh display down time produk KCM yang telah di pasang

downtime

display down time yang berwarna merah 6 digit (paling atas)

k003

contoh handheld untuk setting timerfailure dan repair

jika membutuhkan display down time. dapat di pesan ke dhan_t46@yahoo.com atau 085228292473.

http://www.keiciptamandiri.com