Ir ao conteúdo
  • Cadastre-se

Problema com uso de PWM para 16F877A Proteus em CCS


Posts recomendados

Fala galera, 

 

Eu estou tendo problemas na hora de usar o PWM de um pic 16f877a no Proteus.

 

Eu uso muito o Proteus, é um programa maravilhoso e que ja me ajudou muito, mas agora estou tendo problemas para usar o PWM do PIC e não sei se é problema do código ou algum problema no Proteus.

 

Eu já mexi varias vezes no código, já peguei código pronto na internet e nada funcionou.

 

Vou mandar algumas imagens do código e do circuito no proteus, se alguém puder me ajudar fico grato.

 

Pelo que eu vi sobre PWM, não era para ser tão complicado assim usar, é bem simples, mas...

 

#include "main.h"
#include "mod_lcd.c"
 
void main()
{
   setup_adc_ports(A_ANALOG);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4);
   setup_timer_1(T1_DISABLED);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   setup_timer_2 (T2_DIV_BY_4,249,1);
   setup_ccp1(ccp_pwm);
   
   delay_us(10);
   lcd_ini(); // Inicializa o LCD
   lcd_escreve ('\f'); // limpa o display  
   
   int16 Val1;                      
   float Resis1;
   
   while (true)   
   {
      set_adc_channel(1);
      delay_us(50);
      Val1 = read_adc();
      Resis1 = Val1*1.0;
      lcd_pos_xy (1,1);
      printf(lcd_escreve,"%f", Resis1);
      
      delay_ms(1);
      
      set_pwm1_duty(Resis1);
   }
}
 
e o main.h é:
 
#include <16F877A.h>
#device adc=8
 
#FUSES NOWDT    
#FUSES HS      
#FUSES PUT     
#FUSES NOPROTECT 
#FUSES NODEBUG  
#FUSES BROWNOUT
#FUSES NOLVP     
#FUSES NOCPD     
#FUSES NOWRT     
 
#use delay(clock=12000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=5)
 
e vou mandar umas imagens do circuito.
Sem%20tiacutetulo_zps5th5lx7p.png

 

Sem%20tiacutetulo2_zpssegfrcar.png

 

Mexo no potenciometro mas não tem nada na saída ccp1

 

 

Minha versão do Proteus é a 7.6 SP0

 

Não estou vendo nenhum erro tanto no código como no circuito.

 

Agradeço desde já quem puder ajudar.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
Coisas pra mim estranhas
float Resis1; // float definido depois de executar funções
Resis1 = Val1*1.0; //sem sentido

set_pwm1_duty(Resis1); //o argumento desta função pode ser float? Confira no help

Tente

-setar o pwm com valor constante tipo 1/4, 1/2 pra ver o resultado

-usar unsigned int em tudo

-verificar o TRIS do pino pwm

 

ccs&eu=FALSE;

Link para o comentário
Compartilhar em outros sites

o float definido depois de executar função nao tem nada a ver

o resis1 = val1*1.0 é para aparecer no display, pois essa biblioteca que peguei do display tem alguns erros.

eu vi varios códigos com o argumento sendo float, mas já testei com int e nada

 

ja tentei setar o valor com um valor constante e nada.

 

 

não sei se essa versao do Proteus tem algum bug, vi alguma coisa sobre isso na net.

Link para o comentário
Compartilhar em outros sites

Consegui, o problema é realmente o Proteus versão 7.06. Essa versão não funciona o PWM, não sei se é para qualquer pic ou só para o 16f877a. Vi na internet uma outra pessoa falando sobre esse problema no proteus versão 7.06, e agora acabei de confirmar, instalei a 7.08 e esta funcionando perfeitamente agora. 

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...