Ir ao conteúdo
  • Cadastre-se

Controlando PWM pelo canal AD


arh

Posts recomendados

boa tarde, to tentando fazer um codigo aqui, que le o canal ad e "converta" para o PWM.

o problema é que o duty nao da certo. quando o canal marca 5v, o dute nao chega prox dos 100%.

segue o codigo:

 #include <16f877a.h>
#device adc = 10

#fuses xt, wdt
#use delay (clock = 10000000)

#use fast_io (a)
#use fast_io (
#use fast_io (c)
#use fast_io (d)

#byte porta = 0x05
#byte portb = 0x06
#byte portc = 0x07
#byte portd = 0x08

#include <lcd.c>


float x;
int16 y;

/*-------------leitura do canal AD ---------------------*/
float leitura_ad()
{
restart_wdt();
set_adc_channel (0);
delay_us (40);
x = read_adc(); // x recebe valor do canal
x = (x*5.0)/1023.0; // converte para 0 a 5 V.

return (x);
}

/*-------------envia resultado para o lcd----------------*/
void envio_lcd()
{
restart_wdt();
lcd_putc("\f");

if (x >2.5 && x < 2.6 )
{printf (lcd_putc,"centro \nvalor = %.3f",x );}


if (x<2.5)
{printf (lcd_putc,"\fesquerda \nvalor %.3f",x);}


if (x>2.6)
{printf (lcd_putc,"\fdireita \nvalor %.3f",x);}

delay_ms(500);
}

/*---------------------saida PWM---------------------------*/
void pwm()
{
y = x;
y = y*50; // a ideia aqui é por ex. pegar (2V *50)/250 = 40%
set_pwm1_duty(y);
}


void main ()
{
set_tris_a (0xff);
set_tris_b (0x00);
set_tris_c (0xf0);
set_tris_d (0xff);
porta = 0;
portb = 0;
portc = 0;
portd = 0;
setup_timer_2(t2_Div_by_4,20,1);

setup_adc_ports (AN0_AN1_AN2_AN3_AN4);
setup_adc (adc_clock_div_32);
setup_ccp1 (ccp_pwm);


lcd_init ();
delay_ms(100);
restart_wdt();
lcd_gotoxy (1,1);
lcd_putc ("iniciar");
lcd_gotoxy(1,2);
lcd_putc ("programa");
delay_ms(10);

while(1)
{
leitura_ad();
envio_lcd();
pwm();
}
}

Link para o comentário
Compartilhar em outros sites

Olá.

O problema é saber qual o valor inserir em set_pwm1_duty(); que te dará os 100%.

A forma mais simples de saber isso é realizar o PIC wizard, configurar clock, configurar o PWM de acordo com o teu projeto, ajustar o ciclo de trabalho para 100% e clocar na aba código gerado. Daí você verá o valor que te dá os 100%.

Depois podes cancelar e abrir o seu projeto pra fazer as alterações necessárias pra que se alcance os 100%.

Os links abaixo tem duas imagens que acho que devem ajudar:

http://www.4shared.com/photo/L9ddMMU0/PWM_Configurao_PIC_WIZARD_.html?

http://www.4shared.com/photo/numbSeow/PWM_Configurao_Cdigo_gerado.html?

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Arquivado

Este tópico foi arquivado e está fechado para 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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!