0% acharam este documento útil (0 voto)
6 visualizações26 páginas

Configuração PWM e UART no PIC16F877A

O documento aborda a configuração de PWM e UART no microcontrolador PIC16F877A, destacando suas aplicações em controle de dispositivos e comunicação serial. Ele apresenta objetivos práticos, como a modulação de largura de pulso para motores e LEDs, além de detalhar as bibliotecas MikroC utilizadas para simplificar a implementação. Exemplos de código e configurações são fornecidos para ilustrar a utilização dessas funcionalidades.

Enviado por

Douglas André
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PPTX, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
6 visualizações26 páginas

Configuração PWM e UART no PIC16F877A

O documento aborda a configuração de PWM e UART no microcontrolador PIC16F877A, destacando suas aplicações em controle de dispositivos e comunicação serial. Ele apresenta objetivos práticos, como a modulação de largura de pulso para motores e LEDs, além de detalhar as bibliotecas MikroC utilizadas para simplificar a implementação. Exemplos de código e configurações são fornecidos para ilustrar a utilização dessas funcionalidades.

Enviado por

Douglas André
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PPTX, PDF, TXT ou leia on-line no Scribd

Escola Superior de Ciências

Náuticas
Configuração PWM e UART: Uso das bibliotecas

Aplicações de Microprocessadores I
Docente: Eng. Elso Guilengue  Douglas André
Depart. De Rádio. 3R  Milton Cuambe
 Neyla Mussá
 Palmira Chavana
 Toní Manjate
Maputo, Maio de 2025
Configuração PWM
01
Uso Da Biblioteca PWm
02

00 03
Exemplos PWM
Introdução

Configuração UART
04
Biblioteca UART + Exemplos
05
Introdução

• O PIC16F877A é um microcontrolador de 8 bits amplamente utilizado


em projetos educacionais e industriais.
• Possui módulos internos para controle PWM (Pulse Width
Modulation) e comunicação UART (Universal Asynchronous Receiver
Transmitter).
• A capacidade de controlar sinais de saída com precisão e comunicar-
se com dispositivos externos torna esse microcontrolador
extremamente versátil.
• Este trabalho explora as configurações, códigos e simulações práticas
utilizando as ferramentas MikroC e Proteus.
Objectivos

• Demonstrar o uso prático da modulação por largura de pulso (PWM)


para controle de dispositivos como motores e LEDs.
• Explicar a comunicação serial assíncrona utilizando a interface UART.
• Apresentar como integrar leitura analógica (ADC) ao controle PWM
para aplicações dinâmicas.
• Implementar e validar a recepção de dados via UART utilizando
interrupções para melhorar a eficiência.
Configuração PWM

• PWM é uma técnica de controle que simula sinais analógicos utilizando


pulsos digitais de largura variável.
• Duty Cycle define a razão entre o tempo ligado (nível alto) e o tempo total
do ciclo:
• 0%: sinal sempre desligado
• 50%: metade do tempo ligado
• 100%: sinal sempre ligado
• É amplamente utilizada para controlar intensidade luminosa, velocidade de
motores, e potência em cargas resistivas.
Configuração PWM

• Ciclo de Trabalho e Tensão Média (PWM)


• Sinal com pico de 10 V e período de 1 s:
• Ciclo de 50%: ligado 0,5 s / desligado 0,5 s → Saída média: 5 V
• Ciclo de 75%: ligado 0,75 s / desligado 0,25 s → Saída média: 7,5 V
• No PIC16F877A, o ciclo de trabalho é ajustado por meio de registros
específicos de PWM.
Figura 1:Exemplo de PWM
Configuração PWM

Frequência e Módulo PWM no PIC16F877A


•Frequência (f) = 1 / Período (T)
• Ex: 1 Hz → LED visivelmente pisca
• Ex: 1 kHz → LED parece com brilho constante (sem cintilação)
• Frequência alta garante controle suave da intensidade de luz
• PWM no PIC16F877A
• 2 módulos CCP independentes: CCP1 e CCP2
• Cada módulo pode funcionar como:
• Captura de 16 bits
• Comparação de 16 bits
• PWM de 10 bits:
• PWM de 10 bits:8 bits no registo CCPxL
• 2 bits no registo CCPxCON
Configuração PWM

• O microcontrolador possui dois módulos CCP (Capture/Compare/PWM): CCP1


(pino RC2) e CCP2 (pino RC1).
• Utiliza o Timer2 como base de tempo para definir a frequência do sinal PWM.
• Duty Cycle é configurado nos registradores CCPR1L e nos bits menos
significativos de CCP1CON.
• A frequência é determinada pelo valor de PR2 em conjunto com o clock do
sistema.
• O MikroC oferece uma biblioteca que simplifica essa configuração, com funções
prontas como PWM1_Init(), PWM1_Set_Duty(), PWM1_Start() e
PWM1_Stop().
Configuração PWM

• Para inicializar o PWM neste microcontrolador, temos primeiro de analisar todos os


registos necessários para o configurar

Registos Descriçãp TMR2ON: bit de ativação do Timer2

T2CON Registo de controlo do Timer2, para definir o prescaler, 1 = Timer2 está ligado
o postscaler e ligar/desligar o Timer2.
0 = Timer2 está desligado
PR2 Registo de período Timer2, para definir o valor máximo
do contador.
T2CKPS1:T2CKPS0: Bits de seleção de
CCP1CON Este registo controla as operações do CCP1
prescaler do relógio do Timer2
TRISC Este registo é utilizado para definir PORTC como E/S 00 = Prescaler é 1
01 = Prescaler é 4
1x = Prescaler é 16
Configuração PWM

CCPxM3:CCPxM0: bits de seleção do modo CCPx


0000 = Captura/Comparação/PWM desativado (repõe o módulo CCPx)
0100 = Modo de captura, cada flanco descendente
0101 = Modo de captura, cada flanco ascendente
0110 = Modo de captura, a cada 4º flanco ascendente
0111 = Modo de captura, a cada 16º flanco ascendente
1000 = Modo de comparação, definir saída na correspondência (bit CCPxIF
definido)
1001 = Modo de comparação, limpar saída na correspondência (bit CCPxIF
definido)
1010 = Modo de comparação, gera interrupção de software na correspondência
(bit CCPxIF definido, o pino CCPx não é afetado)
1011 = Modo de comparação, aciona evento especial (bit CCPxIF definido, o pin
CCPx não é afetado); CCP1 reinicia TMR1; O CCP2 reinicia o TMR1 e inicia
uma conversão A/D (se o módulo A/D estiver activado)
11xx = modo PWM
01 Biblioteca PWM
• O MikroC PRO for PIC oferece uma biblioteca que simplifica totalmente a configuração do
PWM. Com apenas algumas funções, o módulo PWM pode ser inicializado e utilizado com
precisão.
• Principais funções:
• Função Descrição
• PWM1_Init(frequency); Inicializa o PWM1 com a frequência desejada em Hz
• PWM1_Set_Duty(duty); Define o duty cycle entre 0 e 255 (0–100%)
• PWM1_Start(); Inicia a geração do sinal PWM
• PWM1_Stop(); Interrompe o sinal PWM
U1
13 33
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1
35
RB2
2 36
void main() { 3
RA0/AN0 RB3/PGM
37
RA1/AN1 RB4
TRISC.F2 = 0; // Configura RC2 (CCP1) como 4
RA2/AN2/VREF-/CVREF RB5
38
5 39
saída 6
RA3/AN3/VREF+ RB6/PGC
40
RA4/T0CKI/C1OUT RB7/PGD
PWM1_Init(5000); // Inicializa PWM1 com 7
RA5/AN4/SS/C2OUT
15
frequência de 5 kHz 8
RE0/AN5/RD
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
16
PWM1_Start(); // Inicia o sinal PWM R2 9
RE1/AN6/WR RC2/CCP1
17
330R 10 18
RE2/AN7/CS RC3/SCK/SCL
PWM1_Set_Duty(127); // Define duty cycle em RC4/SDI/SDA
23
50% (127 de 255) 1
MCLR/Vpp/THV RC5/SDO
24 D1
25 LED-BLUE
RC6/TX/CK
26
RC7/RX/DT
while(1) { 19
RD0/PSP0
// O PWM está ativo automaticamente por RD1/PSP1
20

hardware RD2/PSP2
21 R1
22 330R
RD3/PSP3
} RD4/PSP4
27
28
RD5/PSP5
} RD6/PSP6
29
30
RD7/PSP7
PIC16F877A
while(1)
{
#define butt1 RB1_bit
if(!butt1)
#define butt2 RB2_bit
{
#define butt3 RB3_bit
delay_ms(40);
#define butt4 RB4_bit
duty1++;
CMCON = 0x07; PWM1_Set_Duty(duty1);
unsigned short duty1, duty2;
TRISB = 0xFF; }
TRISC = 0x00;
void main()
PORTB = 0xFF; if(!butt2)
{ PORTC = 0x00; {
delay_ms(40);
CMCON = 0x07; PWM1_Init(5000); duty1--;
TRISB = 0xFF; PWM2_Init(5000); PWM1_Set_Duty(duty1);
TRISC = 0x00; }
PORTB = 0xFF; duty1 = 127;
PORTC = 0x00; duty2 = 127; if(!butt3)
{
PWM1_Init(5000); PWM1_Start(); delay_ms(40);
PWM2_Init(5000); PWM2_Start(); duty2++;
PWM2_Set_Duty(duty2);
duty1 = 127; PWM1_Set_Duty(duty1); }
duty2 = 127; PWM2_Set_Duty(duty2);
if(!butt4)
PWM1_Start(); {
PWM2_Start(); delay_ms(40);
duty2--;
PWM1_Set_Duty(duty1); PWM2_Set_Duty(duty2);
PWM2_Set_Duty(duty2); }

}
Exemplo Avançado: PWM com ADC

void main() { while (1) {

ADCON1 = 0x80; // AN0 como analógico, Vref = Vdd adc_value = ADC_Read(0); // Valor ADC de 0 a

TRISA.F0 = 1; // RA0 (AN0) como entrada 1023 (10 bits)

TRISC.F2 = 0; // RC2 como saída (PWM1) pwm_value = adc_value; // PWM de 0 a 1023

// Configuração do PWM // Escreve os 8 MSBs em CCPR1L

T2CON = 0x04; // Timer2 ligado, prescaler = 1 CCPR1L = pwm_value >> 2;

PR2 = 124; // Período PWM (~5kHz para Fosc = 8 // Escreve os 2 LSBs em CCP1CON<5:4>

MHz) CCP1CON.B5 = (pwm_value >> 1) & 0x01;

CCP1CON = 0x0C; // Modo PWM (1100) CCP1CON.B4 = pwm_value & 0x01;

CCPR1L = 0; delay_ms(10); // Atraso pequeno

CCP1CON.B5 = 0; }

CCP1CON.B4 = 0; }
Exemplo Avançado: PWM com ADC

U1
13 33
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1
35
RB2
2 36
RA0/AN0 RB3/PGM
3 37
RA1/AN1 RB4
4 38
RA2/AN2/VREF-/CVREF RB5
5 39
RA3/AN3/VREF+ RB6/PGC
6 40
RA4/T0CKI/C1OUT RB7/PGD
7
RA5/AN4/SS/C2OUT
R2 RC0/T1OSO/T1CKI
15
RV1
10k 8 16
RE0/AN5/RD RC1/T1OSI/CCP2
9 17
RE1/AN6/WR RC2/CCP1
10 18
RE2/AN7/CS RC3/SCK/SCL
23

50%
RC4/SDI/SDA
1
MCLR/Vpp/THV RC5/SDO
24 D1
25 LED-GREEN
RC6/TX/CK
26
RC7/RX/DT
1k
19
RD0/PSP0
RD1/PSP1
20 R1
21 220R
RD2/PSP2
22
RD3/PSP3
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7
PIC16F877A
Configuração UART
01
UART (Universal Asynchronous Receiver/Transmitter) é uma interface de comunicação serial
assíncrona utilizada para transmitir e receber dados digitais entre dois dispositivos, bit a bit, por
meio de apenas duas linhas:
•TX (Transmissão)
•RX (Recepção)
Diferentemente da comunicação síncrona, a UART não utiliza sinal de clock externo, pois
transmissor e receptor operam com base em uma taxa de transmissão (baud rate) pré-definida e
igual para ambos.
Recursos internos da UART no PIC16F877A
Registradores de controle:
TXSTA: Transmit Status and Control Register
RCSTA: Receive Status and Control Register
SPBRG: Baud Rate Generator (define velocidade)
Registradores de dados:
TXREG: Envia dados
RCREG: Recebe dados
Registo Descrição

TXSTA Transmitir o estado e o registo de controle

RCSTA Receber o estado e o registo de controle

SPBRG Gerador de taxa de transmissão USART

TXREG Registo de Transmissão USART. Contém os dados a


transmitir na UART

RCREG Registo de Transmissão USART. Contém os dados


recebidos da UART
Configuração UART
01
TXSTA
TXEN: Bit de Habilitação de Transmissão
1 = Transmissão ativada
7 6 5 4 3 2 1 0
0 = Transmissão desativada
CSRC TX9 TXEN SYNC - BRGH TRMT TX9D SYNC: Bit de Seleção do Modo USART
1 = Modo síncrono
CSRC: Bit de Seleção da Fonte de Relógio 0 = Modo assíncrono
Modo assíncrono: Não importa. BRGH: Bit de Seleção de Alta Taxa de Transmissão
1 = Alta velocidade
TX9: Bit de Habilitação de Transmissão de 9 bits 0 = Baixa velocidade
1 = Seleciona a transmissão de 9 bits TRMT: Bit de Estado do Registador de Deslocamento de Transm
0 = Seleciona transmissão de 8 bits 1 = TSR vazio
0 = TSR cheio
TX9D: 9º bit de Dados de Transmissão, pode ser bit de Paridade
• TRANSMISSÃO
• CSRC: Clock Source Select.
Para modo Assíncrono.
• TX9: Habilitar transmissão com 9 bits.
• TXEN: Transmit Enable Bit
• Para habilitar a transmissão de dados.
• SYNC: USART Mode Select Bit
Escolher comunicação Síncrona (1) ou Assíncrona (0).
• BRGH: High Baud Rate Select Bit
Para modo Assíncrono: Alta velocidade (1).
• TRMT: Transmit Shift Register Status Bit
Ele indica se o registador esta cheio ou não. Empty (1)
• RECEPÇÃO
• SPEN: Serial Port Enable Bit.
1 = Habilita o UART habilitando os pinos(RC7 e RC6).
• RX9: 9-bit Receive Enable bit.
• SREN: Habilitar Recepção Única.
• CREN: Habilitar Recepção continua.
• ADDEN: Habilita detecção de endereço (caso esteja em uso o nono bit)
• FERR: Framing error bit
1 = Erro de quadro
• OERR: Overrun error bit
Quando comunicação e muito rápida e há sobreposição de bits
1: Erro de sobreposição.
Configuração No MikroC

Biblioteca UART no MikroC


•MikroC fornece funções integradas para facilitar o uso da UART:
•UART1_Init(9600); inicializa a UART com baud rate de 9600
•UART1_Write('A'); envia um caractere
•UART1_Write_Text("Mensagem"); envia uma string completa
•UART1_Data_Ready(); verifica se há dado recebido
•UART1_Read(); lê o dado recebido
•Ideal para implementar menus interativos, comandos remotos ou feedback serial.
Configuração No MikroC -
Exemplos
Recepção UART por Interrupção:
Conceito e Implementação com
Exemplo
• A UART pode ser usada com interrupção para evitar o uso de polling
contínuo.
• O microcontrolador interrompe seu fluxo normal ao detectar
recepção.
• void interrupt()
• { if ([Link])
• { char c = UART1_Read();
• UART1_Write(c); }}
Recepção UART por Interrupção:
Conceito e Implementação com
Exemplo
C5

22pF

U4
X3 13
OSC1/CLKIN RB0/INT
33
CRYSTAL 14 34
OSC2/CLKOUT RB1
35
C6 2
RB2
36
RA0/AN0 RB3/PGM
3 37
RA1/AN1 RB4
4 38
RA2/AN2/VREF-/CVREF RB5
22pF 5 39
RA3/AN3/VREF+ RB6/PGC
6 40
RA4/T0CKI/C1OUT RB7/PGD
7
RA5/AN4/SS/C2OUT
15
RC0/T1OSO/T1CKI
8 16
RE0/AN5/RD RC1/T1OSI/CCP2 RXD
9 17
RE1/AN6/WR RC2/CCP1
10 18
RE2/AN7/CS RC3/SCK/SCL TXD
23
RC4/SDI/SDA
1 24
MCLR/Vpp/THV RC5/SDO RTS
25
RC6/TX/CK
26
RC7/RX/DT CTS

R6 RD0/PSP0
19
10k 20
RD1/PSP1
21
RD2/PSP2
22
RD3/PSP3
27
RD4/PSP4
28
RD5/PSP5
29
RD6/PSP6
30
RD7/PSP7
PIC16F877A

Você também pode gostar