Manual

do

Maker

.

com

Introdução ao PIC12F675

Introdução ao PIC12F675

Essa é uma introdução ao PIC, dessa vez um dos menores em recursos e pinos. O PIC12F675 é um PIC de 8 pinos, dos quais 6 podem ser utilizados para I/O. Ele é um MCU de 8 bits e possui 1 conversor A/D de 4 canais. Ele pode ser ligado a um cristal externo de até 20Mhz, mas ele possui um oscilador interno de 4Mhz e para projetos muito simples que não necessitem velocidade pode ser o ideal.

Ele não possui módulo CCP, portanto não possui portas PWM, o que seria excelente para controlar um LED RGB de 4 pernas. De qualquer forma, há um LED RGB de 2 pernas cujo as cores não podem ser controladas e alternam por intervalos de tempo.

Apesar do hardware minimalístico, existem muitas possibilidades para ele. O primeiro exemplo será (obviamente):

Acender um LED

O esquema é o seguinte:

pic12f675-300x111.webp

O desenho está em uma protoboard full porque a partir desse modelo vamos expandir um pouco o projeto.

Programar para PIC como escrevi em outro post, não é tão simples quanto programar em Arduino.
Para poder imaginar aplicações para o modelo de PIC escolhido, é necessário conhecer seus recursos. Já nesse pequeno hardware, pode ser necessário conhecer também alguns truques, como multiplexar. Isso será visto em outro post.

Como sempre, utilizando a IDE MikroC para desenvolver, descreverei previamente os recursos dos quais faremos uso no exemplo de código adiante.

Registrador TRISIO

O TRISIO é o registrador que configura os pinos como entrada ou saída. Com 0 os pinos ficam em OUTPUT, com 1 os pinos são configurados como INPUT. Claro, os pinos podem ser configurados individualmente em bits, hexa ou deslocamento de bits. Darei os 3 exemplos nesse post mais adiante.

Registrador GPIO

O GPIO configura os pinos como HIGH (1) ou LOW (0). Em grandes PICs, GPIO é chamado PORT. Os bits podem ser setados de duas maneiras; GPIO.Bx para setar o bit x ou ajustando o valor do bit correspondente através dos modos explicados mais adiante.

Para deixar claro; quando o PINO estiver em OUTPUT e HIGH, o LED se acenderá. Muitos recomendam utilizar o pino do PIC para fazer aterramento, então o pino deveria ser configurado para INPUT e LOW e o LED seria aterrado nesse pino.

Configurando pinos

Existem 4 modos de configurar um pino, utilizando o pino 5 como exemplo:


//Seta o bit do pino 5 para HIGH diretamente.
GPIO.B2 = 1;

//Em hexa, ajustando o valor do bit correspondente
GPIO = 0x04;

//Em binário
GPIO = 0b00000100;

//Deslocamento de bits
GPIO = (1<<2);

Particularmente, deslocar os bits me parece o mais prático dos modos depois de apontar o bit diretamente na variável do pino. Para melhor entendimento, o que esse deslocamento faz é pegar o 1 e deslocá-lo para a esquerda 2 vezes. Se fosse (1<<0), então o primeiro dos 8 bits receberia o valor 1, ficando 00000001. Deslocando 2 para a esquerda ficará 00000100.

Nesse datasheet41190g.pdf pode-se ver que o pino 5 corresponde à porta 2 (GP2), utilizado no exemplo desse post.

O código de funcionamento de um blink com o LED é o seguinte:


void doPorts(void){
 TRISIO = 0; //OUTPUT
}

void main(){
 doPorts();
 
 while(1){
 GPIO = 0x04; //0b0000100; //(1<<2);
 Delay_ms(200);
 GPIO = 0;
 Delay_ms(200);

O regulador de tensão quebrou um bom galho também, porque peguei uma fonte de 9v para alimentar o PIC com 5v, desse modo:

p12f-300x208.webp

No esquema lá em cima você pode ver melhor a forma de conectar. Basicamente, olhando o regulador de frente:
1 - Entrada (até 19V nesse modelo)
2 - Terra (comum para o circuito e fonte)
3 - Saida 5v.

Farei outros posts com o P12F675 para mostrar um pouco mais do que se pode fazer com um hardware pequeno como esse.

Esse post não merece um video, não é mesmo? :-)

Sugiro também que veja esse artigo sobre controle de LEDs utilizando um shift register 74HC595.

Se gostou, não deixe de compartilhar; dê seu like no video e inscreva-se no nosso canal Manual do Maker Brasil no YouTube.

Próximo post a caminho!

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.