Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

15/10/2010 #1


Problema con PWM inestable
Hola a todos, estoy tratando de hacer funcionar un PWM mediante ADC y desplegar el valor en un LCD. Pero la señal es inestable. Haber si me pueden decir porque.
Adjunto una simulacion en proteus.
Gracias.

#include <16f877a.h>
#device adc=10 /// libreria para el manejo del pic16f877a
#use delay(clock=4000000) /// declara la frecuencia del cristal
#fuses XT,NOWDT,NOPUT,NOLVP,NOBROWNOUT,NOWRT,NOPROTECT
#include <lcd.c>
void main(void)

{
float ct ,bits;
setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
bits=read_adc();
set_adc_channel(0);
set_tris_c(0);
setup_timer_2(T2_DIV_BY_16,207,1);// El periodo de la señal PWM de 3.3 ms.
setup_ccp1(CCP_PWM); // Configura CCP1 en modo PWM

lcd_init();
lcd_gotoxy(6,1);
lcd_putc("PWM");
delay_ms(1000);
lcd_putc("\f");

while(true)
{
set_adc_channel(0);
delay_us(10);
bits=read_adc();
delay_us(10);
set_pwm1_duty(bits);// La anchura del pulso



ct=(bits*100)/1023;
lcd_gotoxy(1,1);
lcd_putc("FREC=300 HZ");
lcd_gotoxy(1,5);
printf(LCD_PUTC,"CICLO T=%4.2f",ct);

}}
15/10/2010 #2

Avatar de narcisolara_21

Respuesta: Problema con PWM inestable
Creo que el Duty del PWM es de 8 Bits y tu estas usando Duty=ADC que es de 10 Bits, lee el ADC con 8 Bits ese debe ser el problema
16/10/2010 #3


Respuesta: Problema con PWM inestable
Gracias por tu ayuda, pero lo cambie y el problema persiste.
16/10/2010 #4

Avatar de narcisolara_21

Respuesta: Problema con PWM inestable
Déjalo como estaba, y divide read_adc/4
16/10/2010 #5


Respuesta: Problema con PWM inestable
Gracias, mejoro muchisimo, aunque ahora a casi a fondo del pòte se descompensa.
16/10/2010 #6

Avatar de narcisolara_21

Respuesta: Problema con PWM inestable
No entiendo como no puedes leer en 8 bits, lo que te dije en el mensaje anterior fue pasar de 10 a 8 Bits 1023/4=255, Bueno casi,casi... jeje por eso cuando pones a fondo el pote por ejemplo read_adc=1023/4=255.75 ese .75 te hace caer a "0" nuevamente, que creo que es lo que esta pasando. Por ejemplo si sumamos .4 a 10 serán 10 pero si le sumamos .5 a 10 serán 11 Bits, bueno creo que me entiendes jeje...
Ya intentaste hacer esto:
#device adc=8
Otra opción sería utilizar bloques if
por ejemplo: si bits >255 bits=255 etc...
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.