Introdução e recursos do microcontrolador PIC16F877A

Tempo de leitura: 10 minutes

O microcontrolador PIC PIC16f877a é um dos microcontroladores mais renomados da indústria. Este microcontrolador é muito conveniente de usar, a codificação ou programação deste controlador também é mais fácil. Uma das principais vantagens é que pode ser escrita e apagada o maior número de vezes possível, pois utiliza a tecnologia de memória FLASH. Tem um número total de 40 pinos e há 33 pinos para entrada e saída. O PIC16F877A é usado em muitos projetos de microcontroladores pic. PIC16F877A também tem muita aplicação em circuitos eletrônicos digitais.

O PIC16f877a encontra suas aplicações em um grande número de dispositivos. É usado em sensores remotos, dispositivos de segurança e proteção, automação residencial e muitos instrumentos industriais. Um EEPROM também é apresentado nele, o que torna possível armazenar algumas das informações permanentemente, como códigos de transmissor e frequências de receptor e alguns outros dados relacionados. O custo deste controlador é baixo e seu manuseio também é fácil. É flexível e pode ser usado em áreas onde os microcontroladores nunca foram usados ​​antes, como em aplicações de microprocessadores e funções de temporizador, etc.

  • Tem um conjunto menor de 35 instruções.
  • Ele pode operar até 20MHz de frequência.
  • A tensão de operação está entre 4,2 volts a 5,5 volts. Se você fornecer tensão superior a 5,5 volts, poderá ser danificado permanentemente.
  • Não possui oscilador interno como outros PIC18F46K22, PIC18F4550.
  • A corrente máxima que cada PORT pode receber ou fonte é de cerca de 100mA. Portanto, o limite de corrente para cada pino GPIO do PIC16F877A é de 10 mili amperes.
  • Está disponível em quatro embalagens IC, como PDIP de 40 pinos PLCC de 44 pinos, TQFP de 44 pinos, QFN de 44 pinos

 

CONFIGURAÇÃO DE PIN E DESCRIÇÃO DO microcontrolador PIC16F877A

Como foi mencionado antes, existem 40 pinos deste microcontrolador IC. Consiste em dois temporizadores de 8 bits e um de 16 bits. Módulos de captura e comparação, portas seriais, portas paralelas e cinco portas de entrada/saída também estão presentes nele. Esta imagem mostra o diagrama de pinagem do PIC16F877A.

  • Pino 1: MCLR: O primeiro pino é o pino limpo principal deste IC. Ele redefine o microcontrolador e está ativo baixo, o que significa que deve receber constantemente uma tensão de 5V e se 0 V forem fornecidos, o controlador será redefinido. A redefinição do controlador o trará de volta à primeira linha do programa que foi queimada no IC.

  • Um botão de pressão e um resistor são conectados ao pino. O pino já está sendo alimentado por 5V constantes. Quando queremos redefinir o IC, basta pressionar o botão que trará o pino MCLR para 0 potencial, redefinindo o controlador.
  • Pino 2: RA0/AN0:PORTA consiste em 6 pinos, do pino 2 ao pino 7, todos eles são pinos de entrada/saída bidirecionais. O pino 2 é o primeiro pino desta porta. Este pino também pode ser usado como um pino analógico AN0. É construído em conversor analógico para digital.
  • Pino 3: RA1/AN1: Esta pode ser a entrada analógica 1.
  • Pino 4: RA2/AN2/Vref- :Também pode atuar como entrada analógica2. Ou tensão de referência analógica negativa pode ser dada a ele.
  • Pino 5: RA3/AN3/Vref+: Pode atuar como entrada analógica 3. Ou pode atuar como tensão de referência positiva analógica.
  • Pino 6: RA0/T0CKI: Para timer0 este pino pode atuar como pino de entrada do relógio, o tipo de saída é dreno aberto.
  • Pino 7: RA5/SS/AN4: Esta pode ser a entrada analógica 4. Existe uma porta serial síncrona no controlador também e este pino pode ser usado como a seleção de escravo para aquela porta.
  • Pino 8: RE0/RD/AN5: PORTE começa do pino 8 ao pino 10 e esta também é uma porta de saída de entrada bidirecional. Pode ser a entrada analógica 5 ou para a porta paralela escrava pode atuar como um pino de ‘controle de leitura’ que estará ativo baixo.
  • Pino 9: RE1/WR/AN6: Pode ser a entrada analógica 6. e para a porta de escravo paralelo, ele pode atuar como o ‘controle de gravação’ que estará ativo baixo.
  • Pino 10: RE2/CS/A7: Pode ser a entrada analógica 7, ou para a porta de escravo paralelo, ele pode atuar como o ‘controle de seleção’, que também estará ativo, assim como os pinos de controle de leitura e gravação.
  • Pino 11 e 32: VDD: Esses dois pinos são a oferta positiva para os pinos de entrada/saída e lógica. Ambos devem estar conectados a 5V.
  • Pino 12 e 31: VSS: Esses pinos são a referência do solo para entrada/saída e pinos lógicos. Eles devem estar conectados ao potencial 0.
  • Pino 13: OSC1/CLIN: Esta é a entrada do oscilador ou o pino de entrada do relógio externo.
  • Pino 14: OSC2/CLKOUT: Este é o pino de saída do oscilador. Um ressonador de cristal está conectado entre os pinos 13 e 14 para fornecer relógio externo ao microcontrolador. ¼ da frequência de OSC1 é emitido por OSC2 no caso do modo RC. Isso indica a taxa de ciclo de instrução.

  • Pino 15: RC0/T1OCO/T1CKI: O PORTC consiste em 8 pinos. É também uma porta de saída de entrada bidirecional. Deles, o pino 15 é o primeiro. Pode ser a entrada do relógio do Timer 1 ou a saída do oscilador do Timer 2.
  • Pino 16: RC1/T1OSI/CCP2: Pode ser a entrada do oscilador do Timer 1 ou a saída Capture 2 Input/Compare 2 Saída/PWM 2.
  • Pino 17: RC2/CCP1: Pode ser a captura 1 entrada/comparar 1 saída/PWM 1 saída.
  • Pino 18: RC3/SCK/SCL: Pode ser a saída para os modos SPI ou I2C e pode ser a entrada/saída para o relógio serial síncrono.
  • Pino 23: RC4/SDI/SDA: Pode ser o dado SPI no pino. Ou no modo I2C pode ser pino de entrada/saída de dados.
  • Pino 24: RC5/SDO: Pode ser os dados fora do SPI no modo SPI.
  • Pino 25: RC6/TX/CK: Pode ser o clock síncrono ou o pino de transmissão assíncrono USART.
  • Pino 26: RC7/RX/DT: Pode ser o pino de dados síncrono ou o pino de recepção USART.
  • Pino 19,20,21,22,27,28,29,30: Todos esses pinos pertencem a PORTD, que é novamente uma porta de entrada e saída bidirecional. Quando o barramento do microprocessador deve ser interfaceado, ele pode atuar como a porta escrava paralela.
  • Pino 33-40: PORT B: Todos esses pinos pertencem ao PORTB. Dos quais RB0 pode ser usado como pino de interrupção externo e RB6 e RB7 podem ser usados como pinos de depuração no circuito.

Nota: Todos os pinos possuem múltiplas funcionalidades. Como os pinos PORTC podem ser usados como pinos de entrada digital, pinos de saída digital, para comunicação UART, comunicação I2C. Mas podemos usar uma função de cada porta de cada vez ou você deve programá-la de forma inteligente para poder alternar entre diferentes funcionalidades. Como quando você precisa de um pino para ler o sinal analógico, defina-o para fins analógicos e depois mude para outras funções, como saída digital, etc. Para iniciantes, sugerimos usar um pino para funcionalidade única e você pode usar o modo multifuncional, uma vez que você torne-se um especialista em programação.

COMO PROGRAMAR AS PORTAS DE ENTRADA E SAÍDA

  • Como estudamos 5 portas de entrada e saída, nomeadamente PORTA, PORTB, PORTC, PORTD e PORTE, que podem ser digitais e analógicas.
  • Vamos configurá-los de acordo com nossos requisitos. Mas no caso do modo analógico, os pinos ou as portas só podem atuar como entradas. Há um conversor A para D embutido que é usado em tais casos. Circuitos multiplexadores também são usados.
  • Mas no modo digital, não há restrição. Podemos configurar as portas como saída ou como entrada. Isso é feito por meio de programação. Para PIC, o compilador preferível é o mikro C pro, que pode ser baixado de seu site.
  • Existe um registrador chamado ‘TRIS’ que controla a direção das portas. Para diferentes portas existem diferentes registradores como TRISA, TRISB etc.
  • Se definirmos um bit do registrador TRIS para 0, o bit da porta correspondente atuará como a saída digital.
  • Se definirmos um bit do registrador TRIS para 1, o bit da porta correspondente atuará como a entrada digital.
  • Por exemplo, para definir todo o portb como saída, podemos escrever a instrução do programa como:
TRISB=0;
  • Agora a porta atuará como a porta de saída e podemos enviar qualquer valor na saída, como
PORTB=0XFF;
  • FF representa todos os 1s em binário, ou seja, FF=11111111, agora todos os pinos da porta b estão altos. Se conectarmos LEDs em todos os pinos, todos eles começarão a brilhar nessa condição.
  • Se quisermos negar os valores da porta b, podemos usar a instrução:
PORTB=~PORTB;
  • Agora todos os pinos da porta b estarão baixos.

 

Compilador para microcontrolador PIC16F877A

  • Três compiladores populares que são usados para programar microcontroladores pic são MPLAB XC8, Mikro C for pic, compilador PIC CCS e compilador Hi-Tech.
  • O compilador oficial é o compilador MPLAB XC8 que é desenvolvido pelos fabricantes de PIC16F877A.
  • Geralmente, recomendamos o Mikro C para compilador de pic para iniciantes e o compilador MPLAB XC8 para aqueles que desejam aprender programação de microcontroladores de pic a partir de conceitos bare metal de nível de registro.
  • Você pode consultar nosso artigo de compiladores de microcontroladores de fotos de lista para obter mais detalhes.

Principais características do microcontrolador PIC16F877A

Como todos os outros microcontroladores, o PIC16F877A também fornece recursos úteis integrados, conforme mencionado nesta lista:

  • Módulo conversor analógico para digital: Possui módulo ADC de 8 bits que consiste em 8 canais. Podemos usar 8 sensores analógicos com este microcontrolador.,
  • Temporizadores: Fornece três temporizadores timer0, timer1 e timer2. Todos esses temporizadores podem ser usados ​​no modo de temporizador ou no modo de contador. Esses temporizadores são usados ​​para gerar atrasos, modulação de largura de pulso, contagem de eventos externos e interrupções de temporizador. TIMER0 é um temporizador de 8 bits e pode operar com frequência de clock interna ou externa. Quando usamos Timer0 no modo timer, normalmente o operamos com frequência interna e no modo contador, acionamos com fonte de clock externa. Da mesma forma, TIMER1 é um temporizador de 16 bits e também pode operar em ambos os modos. TIMER2 também é de 8 bits. É usado com PWM como base de tempo para o módulo CCP.
  • EEPROM: Também possui memória interna somente leitura apagável eletricamente 256 x 8 bytes que pode ser usada para armazenar dados permanentemente, mesmo que o microcontrolador esteja desligado, os dados permanecerão lá. Geralmente é usado com projetos relacionados a fechaduras eletrônicas.
  • Módulos PWM: Também fornece 2 módulos CCP. CCP significa captura comparar módulos PWM. Podemos facilmente gerar dois sinais PWM com este microcontrolador. A resolução máxima que ele suporta é de 10 bits. você pode ler o PWM usando o tutorial do microcontrolador PIC16F877A para obter mais informações e programação.
  • Pinos de comunicação serial ou UART: Suporta um canal UART. Os pinos UART são usados ​​para comunicação serial entre dispositivos digitais. O pino RC7 é um pino transmissor ou RX que é o pino número 26. RC6 é um pino receptor ou Tx que é o pino número 25. Para mais detalhes, consulte este guia completo sobre comunicação serial usando o microcontrolador pic16f877a.
  • Comunicação I2C: O PIC16F877A também suporta comunicação I2C e possui um módulo para comunicação I2C. Os pinos 18/RC3 e 23/RC4 são pinos SCL e SDA, respectivamente. SCL é uma linha de relógio serial e SDA é uma linha de dados serial. O tutorial de comunicação I2C ajudará você a entender melhor.
  • Interrupções: As interrupções têm aplicações maravilhosas no campo de sistemas embarcados. Se você não sabe sobre interrupções, sugiro que você compreenda completamente sobre elas, você não obterá comando sobre a programação incorporada delas. O microcontrolador PIC16F877A fornece 8 tipos de interrupções: Interrupções externas, interrupções de temporizador, interrupções de mudança de estado PORT, interrupção UART, I2C, interrupções PWM. você pode ler este guia sobre interrupções do microcontrolador pic para obter informações adicionais.
  • Módulo comparador: Possui um módulo comparador composto por dois comparadores. Eles são usados ​​para comparação de sinais analógicos semelhantes aos comparadores em circuitos eletrônicos. Os pinos de entrada para esses comparadores são RA0, RA1, RA2 e RA3 e a saída pode ser medida através de RA4 e RA5.
  • Watchdog timer: WDT é um oscilador separado no chip que funciona livremente. É um oscilador separado do OSC1/CLKI. O WDT também funcionará mesmo se o dispositivo estiver no modo de suspensão. Ele é usado para acordar o dispositivo do modo de suspensão e também para gerar a reinicialização do temporizador do watchdog.
  • Modo de suspensão: PIC16F877A também fornece operação em modo de suspensão. Neste modo, o dispositivo opera com potência muito baixa. Todos os periféricos consomem uma quantidade mínima de corrente. Acorde do modo de suspensão a partir de recursos de interrupções como interrupção de timer1, interrupção de uart, operação de conclusão de gravação de EEPROM e muitos outros.
  • Detecção de brown out: Também possui um circuito de detecção de brown out que detecta a queda significativa na tensão da fonte de alimentação. Se a tensão de alimentação cair de um certo limite, ele irá gerar um sinal de interrupção. Este bit de configuração (BODEN) é usado para desabilitar ou habilitar este circuito.
  • Reinicialização de brown out: Esta opção reinicializa o dispositivo após a detecção de sinal de interrupção de brown out do sinal BODEN. se a tensão de alimentação ficar abaixo do limite por mais de 100 microssegundos.
  • Proteção de código programável, reset Brown out ocorrerá e o dispositivo permanecerá resetado até que a tensão suba para seu valor nominal. O dispositivo verifica a voltagem a cada 72ms.

Alguns outros recursos importantes estão listados abaixo:

  • Energia na redefinição
  • Grupo de osciladores múltiplos
  • Depurador do circuito no circuito
  • Programação em série no circuito
  • Programação de ICSP de baixa tensão

CÓDIGO PARA ACENDER UM ÚNICO LED/LED PISCANDO

Este é um tutorial simples sobre como piscar um LED com o microcontrolador PIC16F877A. Usamos o compilador Mikro C for pic para escrever este código. Se você está apenas começando com a programação de microcontroladores pic, você pode verificar este tutorial no Mikro C para pic:

  • Escrevendo seu primeiro programa usando Mikro C para compilador de imagens
  • Programação de microcontrolador Pic em c usando Mikro c para pic
void main()
 {

      TRISB.F0 = 0  // the direction of RB0 is set as output

                 //or TRISB = 0xFE (0xFE = 11111110)

      do // setting the infinite loop

      {

        PORTB.F0 = 1; // setting the RB0 pin to high

        Delay_ms(500); // delay of 500 milli seconds

        PORTB.F0 = 0; // setting the RB0 pin to low

        Delay_ms(500); // again a delay of 500 milli seconds

     }while(1);

 }

Este código é usado para alternar o número do pino PORTC zero com o atraso de quinhentos milissegundos. Dentro da função main esta linha inicializa o RB0 como pino de saída digital.

TRISB.F0 = 0

Depois disso, o loop é usado, porque queremos alternar o LED repetidamente. Dentro do loop, essas linhas tornam o RB0 Digital High por 500ms.

PORTB.F0 = 1; // setting the RB0 pin to high
Delay_ms(500); // delay of 500 milli seconds

E da mesma forma essas linhas, desligue o LED por 500ms.

PORTB.F0 = 0; // setting the RB0 pin to low
Delay_ms(500); // again a delay of 500 milli seconds

 

Diagrama de circuito para piscar LED COM PIC16F877A

  • Projete este circuito no proteus. Conecte os pinos com a fonte, terra e oscilador conforme explicado na seção de descrição dos pinos.
  • Conecte o oscilador de 8 MHz com OSCI e OSC2 através de dois capacitores de 22 pico farad.
  • Forneça 5 volts ao pino de reset através do resistor de 10k ohm. O resistor não é mostrado na simulação, mas você deve conectar o resistor enquanto faz o circuito praticamente.
  • Um LED é conectado no pino 33 RB0, um resistor é usado para limitar a corrente e evitar que o LED queime. Escreva e compile o programa em mikro C pro.
  • Grave o microcontrolador com o arquivo hexadecimal clicando duas vezes no controlador no proteus e execute o circuito com sucesso. melhor maneira de aprender qualquer microcontrolador é verificar sua folha de dados.
  • Pic kit3 é um programador famoso usado para fazer upload de código para chips de microchip, Como programar usando Pic kit3 é uma boa fonte para ler.

<Download do DataSheet PIC16F877A>