Ir ao conteúdo
  • Cadastre-se

tenho que fazer um projeto de um gerador ajustável de pwm com o pic 18f4520 no m


Posts recomendados

o programa consiste em sempre que aperta B1 ele incrementa  e se apera b2 ele decrementa ..

0v  =duty 0%

1v =duty 20%

2v  =duty 40%

3v =duty  60%

4v=duty 80%

5v=duty 100%

não sei muito bem por onde começar alguém ai pode me ajudar fiz um código assim mais ta dando erro .SEGUE ABAIXO MEU CODIGO;

#include <p18f4520.h>     //bibiblioteca do PIC18f4550
       
#include <stdio.h>        //bibilioteca  de entradas e saídas
#include <delays.h>          //Adiciona a bibilioteca de funcões do delay 
#include <adc.h>          //Adiciona a bibilioteca de funções para o conversor A/D
#include <timers.h>       //Adiciona a bibilioteca de funções do timer 
#include "lcd_lib.h"        // lib.lcd

#pragma config OSC = HS      //Oscilador e cristal 20Mhz
#pragma config PWRT = ON     //Power Up Time Enable 
#pragma config BORV = 1         //tensão do BOR é 4,33v
#pragma config WDT = OFF     //Desabilita o Watchdog Timer
#pragma config PBADEN = OFF  //RB0:RB4 I/O Digital
#pragma config LVP = OFF     //ICSP. Low power programming Digital
#pragma config LPT1OSC = ON  //programado pra operar no modo Low-power
char lcd[17];

#define B1 PORTBbits.RB0
#define B2 PORTCbits.RC0

int duty1 = 5;
char cont=0;

unsigned  char conta_100ms =0;
void ISR_alta_prioridade(void); //Protótipo da função de interrupção
#pragma code int_alta=0x08      //Vetor de interrupção de alta prioridade 
void int_alta(void)
{
    _asm goto ISR_alta_prioridade _endasm  //Desvia o programa para a função ISR_alta_prioridade

#pragma code 
#pragma interrupt ISR_alta_prioridade
void ISR_alta_prioridade(void)
{
    WriteTimer1(40535);
    if(PIR1bits.TMR1IF){
     cont++;
      PIR1bits.TMR1IF = 0;
    
    if(cont==0x05){
       cont=0x00;
    if (!B1){
        duty1++;
    }
    if(!B2){
      duty1--;
    }
    if(duty1>500){
       duty1=0;
    }
    if(duty1<0){
       duty1=500;
    
    }
    }
    }
}

void main(void){
    CMCON = 0x07;

    OpenTimer0(    TIMER_INT_ON
                &T0_8BIT
                &T0_SOURCE_INT
                &T0_PS_1_128);

    INTCONbits.GIE = 1;
    INTCONbits.PEIE=1;
    INTCONbits.TMR0IE=1;
    INTCONbits.TMR0IF=0;

    TRISB=0x01;
    TRISC=0x01;
    TRISD=0x00;
    ADCON1=0x0F;
    PORTD=0;

    while(1){
        
              OpenPWM1(5);    
              SetDCPWM1(500);        
            ComandoLCD(0xC0);  
            sprintf(lcd,"Duty = %0.2lu %  "cont);    
            putsLCD(lcd);
    }
}            

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...