Conversor A/D + PWM

Bueno tengo una duda, la verdad que llevo un tiempo trabajando en ella y no se como sacarla adelante. El PIC usado es el 16F88 y mi duda es la siguiente.

Quisiera usar el conver A/D del Pic para que me mostrase un valor (pongamos 5) y ese valor usarlo como el tiempo en nivel alto de la señal PWM.

¿Es posible hacer eso?
 
Si que es posible; lees el conversor y copias el dato en el registro del pwm adecuadamente adaptado.
 
si se puede yo lo hice para un servo motor y leo el dato que se convierte de la siguiente manera

Frec=GetAD(0); // hago el llamado a la funcion que ya hice para leer el dato convertido del canal 0 y lo asigno a una variable

CCPR1L=Frec;Despues solo le asigno el valor a el tiempo en bajo del PWM
 
Última edición:
Yo tengo un ejemplo para el PIC16F876:

Código:
//El módulo conversor ADC. Variando la anchura del pulso en una señal de salida
//
//Los dispositivos PIC16F87X disponen de un convertidor A/D de 10 bits de resolución y 5 u 8 
//canales de entrada analógica. La tensión de referencia determina la resolución por bit:
//(Res. = Vref/1024). Con 5 Vref=4.8 mV/Bit; con 2.5 Vref=2.4 mV/Bit
//
//Se propone realizar una modulación de anchura de pulsos (PWM) mediante el módulo CCP1 y con
//salida de señal por la línea RC2/CCP1. Se establece un periodo fijo de 3200uS
//
//El TMR2 trabajando con un preescaler de 1:16 y a una frecuencia de 4 MHz evoluciona cada 16 uS
//
//Un osciloscopio conectado en RC2/CCP1 permitirá visualizar las variaciones del ancho de pulso de la señal
//de salida según la tensión analógica aplicada por RA0/AN0
	
#include <16f876A.h>

//Ajusta los valores de la palabra de configuración durante el ensamblaje:
//Protección de código y datos=OFF, LVP=OFF, WDT=OFF y OSC=XT

#fuses NOPROTECT,NOCPD,NOLVP,NOWDT,XT

// Con estas directivas las funciones "input" y "output_bit" no reprograman
// el pin de la puerta cada vez que son utilizadas. Si no se indica el
// modo fast_io se asume por defecto standard_io el cual reprograma el pin
// siempre antes de ser utilizadas estas funciones.

#use fast_io (A)
#use fast_io (B)
#use fast_io (C)
#use delay(clock=4000000)

int	periodo=200;		//Periodo de 3200uS (200*16*1)
int resultado;		//Variable para el resultado de la conversión AD

main()
{  	
	set_tris_c(0b11111011);	//RC2 salida
	setup_adc_ports(AN0);	//RA0 entrada analógica

//El TMR2 trabaja con un preescaler 1:16 por lo que con una frecuencia de 4MHz evoluciona
//cada 16uS ((4*Tosc)*16)

	setup_timer_2(T2_DIV_BY_16,periodo-1,1);	//Carga el periodo y TMR2 en ON	

//El módulo CCP1 actúa en el modo PWM con salida de señal por RC2/CCP1

	setup_ccp1(CCP_PWM);			//Modo PWM para el CCP1
	setup_adc(adc_clock_div_32);	//Ajusta frecuencia de muestreo del ADC

	while(1)
	{	

//Se activa el ADC y se selecciona el canal RA0/AN0.
	
		set_adc_channel(0);		//Selección del canal 0 (RA0)
		CCP_1_LOW=read_adc();	//Inicia la conversión y carga la anchura del pulso	
	}
}
 
Muchas gracias, aunque yo a día de hoy solo se trabajar en assambler, por cierto. ¿Alguién sabe donde o como se puede sacar la palabra de configuración de los PIC, para meter la configuración de los fuses dentro del programa?
 
Atrás
Arriba