Neste post vamos aprender como programar as entradas e saídas do microcontrolador PIC16F628A utilizado no placa CLP PIC Wantronics.
No vídeo a seguir são mostrados os passos para configuração e alguns detalhes importantes que devem ser levados em consideração na hora da programação do microcontrolador.
Código
Abaixo é apresentado o código que foi gravado no CLP PIC Wantronics.
/*
* File: pic_teste.c
* Author: Wandery
*
* CLP PIC Wantronics
* Created on 18 de Outubro de 2023
*/
// PIC16F628A Configuration Bit Settings
// 'C' source line config statements
// CONFIG
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT enabled)
#pragma config MCLRE = ON // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR)
#pragma config BOREN = ON // Brown-out Detect Enable bit (BOD enabled)
#pragma config LVP = OFF // Low-Voltage Programming Enable bit (RB4/PGM pin has PGM function, low-voltage programming enabled)
#pragma config CPD = OFF // Data EE Memory Code Protection bit (Data memory code protection off)
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
#include <xc.h>
#define _XTAL_FREQ 4000000
void main(void) {
const int tempo = 150;
CMCON = 0x07; // Desliga os comparadores de tensão do PIC16F628A
TRISA = 0x3F;
TRISB = 0x0A;
PORTA = 0x00;
PORTB = 0x00;
PORTBbits.RB0 = 1;
__delay_ms (250);
PORTBbits.RB0 = 0;
__delay_ms (250);
PORTBbits.RB0 = 1;
while (1) {
// Input 1
if (PORTBbits.RB3 == 1) {
PORTBbits.RB4 = 1;
__delay_ms (tempo);
}
else {
PORTBbits.RB4 = 0;
__delay_ms (tempo);
}
// Input 2
if (PORTAbits.RA4 == 1) {
PORTBbits.RB5 = 1;
__delay_ms (tempo);
}
else {
PORTBbits.RB5 = 0;
__delay_ms (tempo);
}
// Input 3
if (PORTAbits.RA3 == 1) {
PORTBbits.RB6 = 1;
__delay_ms (tempo);
}
else {
PORTBbits.RB6 = 0;
__delay_ms (tempo);
}
// Input 4
if (PORTAbits.RA2 == 1) {
PORTBbits.RB7 = 1;
__delay_ms (tempo);
}
else {
PORTBbits.RB7 = 0;
__delay_ms (tempo);
}
}
}
Para configurar o CLP PIC Wantronics é necessário conhecer onde estão conectados cada terminal do microcontrolador em cada entrada e saída. Na tabela abaixo são mostrados a localização de cada terminal.
Essa tabela é válida para última versão do CLP PIC Wantronics, com cristal oscilador e barramento para gravação do microcontrolador.
Com isso podemos configurar os registradores TRISA e TRISB, que são registradores responsáveis por configurar se um terminal do microcontrolador vai funcionar como entrada ou como saída. Para configurar como entrada, o terminal deve ser setado como 1 (Input = 1), caso seja necessário usar como saída deve ser setado como 0( Output = 0).
Na figura a seguir é mostrado uma tabela que ajuda a converter o valor binário em hexadecimal.
Em TRISA temos RA7 = RA6 = 0 e RA5 = RA4 = 1, e se converter para hexadecimal obteremos o valor de 3, e RA0 =RA1 = RA2 = RA3 = 1, que se convertido para hexadecimal será igual a F, com isso obtemos o valor 0x3F.
Também podemos escrever o código utilizando notação binária, como mostrado no exemplo a seguir:
void main(void) {
const int tempo = 150;
CMCON = 0x07; // Desliga os comparadores de tensão do PIC16F628A
TRISA = 0b00111111;
TRISB = 0b00001010;
PORTA = 0x00;
PORTB = 0x00;
PORTBbits.RB0 = 1;
__delay_ms (250);
PORTBbits.RB0 = 0;
__delay_ms (250);
PORTBbits.RB0 = 1;
...
Outro detalhe importante na hora de escrever o código é desligar os comparadores de tensão interno do microcontrolador, pois caso os mesmos estejam, ligados isso pode fazer com que o circuito não funcione adequadamente, gerando leitura das entradas de forma incorreta.
O registrador responsável por desligar os comparadores de tensão do microcontrolador PIC16F628A é mostrado na figura a seguir:
Conclusão
Neste post vimos como programar as entradas e saídas do microcontrolador PIC16F628A. Esse tutorial também serve de referência para quem for trabalhar apenas com o microcontrolador em um protoboard e até mesmo para outro microcontrolador da mesma família, como por exemplo o PIC16F887. Todos os detalhes de configuração e de como utilizar o microcontrolador devem ser consultados no datasheet do componente.
Isso é tudo pessoal, e até o próximo post.