

Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Automação Industrial
Tipologia: Notas de estudo
1 / 2
Esta página não é visível na pré-visualização
Não perca as partes importantes!


#include <16f877.h> // porque vamos usar um PIC16F877 ou PIC16F877A #use delay (clock=4000000) // Importante que o valor do CLOCK esteja correto #define use_portb_lcd true #include <lcd.c>
void main() { long TEMPO_PULSO = 0; // variável que determina tamanho do pulso ligado setup_ccp1(CCP_PWM); // ativa PWM 1 (pino C2) setup_ccp2(CCP_PWM); // ativa PWM 2 (pino C1) setup_timer_2(T2_DIV_BY_4, 250, 1); // O tamanho do ciclo é 4(4/CLOCK)250. lcd_init(); while(1) // laço infinito { set_pwm1_duty(TEMPO_PULSO); // Configura tamanho do pulso set_pwm2_duty(1023 – TEMPO_PULSO); // Configura tamanho do pulso (inversamente proporcional) delay_ms(50); // Tempo de 50 milésimos de segundo if (input(PIN_D0)&&TEMPO_PULSO>0) // Se sinal em D0 e TEMPO_PULSO for superior a ZERO { TEMPO_PULSO --; // Diminui uma unidade da variável TEMPO_PULSO } if (input(PIN_D7)&&TEMPO_PULSO<1023) // Se sinal em D7 e TEMPO_PULSO menor que 1023 { TEMPO_PULSO ++; // Incrementa TEMPO_PULSO em uma unidade } printf(lcd_putc,"\fPWM: %lu", TEMPO_PULSO); // mostra no display o valor de TEMPO_PULSO } }
Obs importante : O exemplo acima terá efeito sobre os pinos do PWM físico, ou seja, pinos C2 (PWM1) e C1 (PWM2). Em outros casos, e para outros pinos, será necessário gerar um PWM via software. Isso quer dizer que seu programa deve ficar ligando e desligando o pino em questão. Veja como seria no exemplo abaixo :
#include <16f877.h> // porque vamos usar um PIC16F877 ou PIC16F877A #use delay (clock=4000000) // Importante que o valor do CLOCK esteja correto #define use_portb_lcd true #include <lcd.c>
void main() { long TEMPO_PULSO = 0; // variável que determina tamanho do pulso ligado while(1) // laço infinito { output_high(PIN_D0); delay_us(TEMPO_PULSO); output_low(PIN_D0); delay_us(1024 – TEMPO_PULSO); if (input(PIN_A1)) TEMPO_PULSO = 0; // Se A1 acionado, tamanho do pulso é zero if (input(PIN_A2)) TEMPO_PULSO = 200; // Se A2 acionado, tamanho do pulso é 200 if (input(PIN_A3)) TEMPO_PULSO = 400; // Se A2 acionado, tamanho do pulso é 400 if (input(PIN_A4)) TEMPO_PULSO = 800; // Se A2 acionado, tamanho do pulso é 800 if (input(PIN_A5)) TEMPO_PULSO = 1023; // Se A2 acionado, tamanho do pulso é 1023 } }
Exercício:
autofalante, conforme gráfico ao lado.