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

 

Iklan

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