PIC12F675 con Entrada Analógica y PWM

D@rkbytes

Moderador
La señal obtenida con el set_timer0 (217) con pre de 1:2 es de 30ms de periodo.
¿Cómo puedo calcularla para otra frecuencia? ¿Cuál es el rango de frecuencias para hacer PWM por este método?
El desborde para el Timer 0 con un valor de 217, prescaler 1:2 @ 4 MHz. Es de 0.078 ms. (78 us.)
Con este método no se pueden alcanzar frecuencias muy altas a 4 MHz.
Esto es porque el periodo se establece por medio de un conteo y el Timer se usa para realizar el evento cuando ocurre el desborde.
Con este método, a lo mucho se podrá alcanzar una frecuencia de 65 Hz. @ 4MHz.
Para altas frecuencias de PWM es más conveniente usar un PIC con módulo CCP. Por ejemplo, el PIC12F683
Hola a todos. He leído este interesante articulo, y al descargar el archivo con Timer Calc, quería probarlo y me dice que hay problema de dependencia con el file .ocx
¿Alguien me podría gentilmente ayudar? Muchas Gracias.
Registra el control ActiveX incluido (BCTSlider.ocx) con el programa REGSVR32.exe
Este programa ejecutable se encuentra en la carpeta de sistema de Windows.
Ver: Cómo registrar manualmente un control ActiveX (.ocx)
 
Gracias por responder. "TRILO-BYTE & D@rkbytes". Les mando mis saludos.
 
Última edición por un moderador:
hola a todos, estamos pasando un mal momento con este virus espero que todos estén bien, estuve leyendo este post y quiero preguntar que modificación tendría que hacer para poder mover el pwm de 1 hz a 120 hz

#include <12f675.H>
#fuses NOMCLR
#use delay(internal = 4MHz)

#define pin_pwm PIN_A4
#define timer_max 0:LOL:9

int8 ciclo_activo = 1;


#INT_TIMER0
void timer0_isr()
{
int8 contador;

set_timer0(timer_max); // Recargar el Timer 0

if(--contador == 0) // Si al ir bajando "contador" llega a 0...
{
contador = 0xFF; // Se regresa "contador" a 255
output_low(pin_pwm); // Se pone en bajo el pin de salida PWM
}

if(contador == ciclo_activo) // Si "contador" es igual a "ciclo_activo"...
{
output_high(pin_pwm); // Se pone en alto el pin de salida PWM
}
}


void main()
{
setup_timer_0(T0_INTERNAL|T0_DIV_2);
enable_interrupts(INT_TIMER0);
set_timer0(timer_max);
enable_interrupts(GLOBAL);

setup_adc_ports(sAN0);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
delay_us(50);

while(true)
{
// Se ajusta el ciclo activo conforme a la lectura del ADC (Max = 255 a 8 bits)
ciclo_activo = read_adc(); // Leer el canal ADC (Canal 0)
delay_us(50); // Esperar conversión.
}
}
 
hola a todos, estamos pasando un mal momento con este virus espero que todos estén bien, estuve leyendo este post y quiero preguntar que modificación tendría que hacer para poder mover el pwm de 1 hz a 120 hz

Deberías leer todo el post mas detenidamente :LOL::

El desborde para el Timer 0 con un valor de 217, prescaler 1:2 @ 4 MHz. Es de 0.078 ms. (78 us.)
Con este método no se pueden alcanzar frecuencias muy altas a 4 MHz.
Esto es porque el periodo se establece por medio de un conteo y el Timer se usa para realizar el evento cuando ocurre el desborde.
Con este método, a lo mucho se podrá alcanzar una frecuencia de 65 Hz. @ 4MHz.
Para altas frecuencias de PWM es más conveniente usar un PIC con módulo CCP. Por ejemplo, el PIC12F683

Registra el control ActiveX incluido (BCTSlider.ocx) con el programa REGSVR32.exe
Este programa ejecutable se encuentra en la carpeta de sistema de Windows.
Ver: Cómo registrar manualmente un control ActiveX (.ocx)
 
Si ya lo leí y no pude instalar, para calcular otra frecuencia, se que esta aproximadamente en 68hz máximo en 4mhz, si pongo un cristal de 8 mhz duplicaría a 120 hz ?

Yo quiero variar la frecuencia de 1hz a 120hz y en ese programa esta fija la frecuencia, cuando lo simuló en proteus me da 67hz y varia el duty tendrá que ser al revés
 
Pues mira hay herramientas en internet para hacer el cálculo del timer del micro en este caso el valor lo pusieron en
timer_max

Cambiando el valor en esa directiva obtendrás otro valor y por obviedad la frecuencia del PWM
 

D@rkbytes

Moderador
Sin cambiar el prescaler, usando un cristal de 20 MHz y estableciendo timer_max en 192, se obtienen 120 Hz aprox.
Yo quiero variar la frecuencia de 1hz a 120hz
Eso es más complicado aún con módulo CCP, pero no imposible.
La frecuencia siempre suele ser fija y lo que varía es el ancho del pulso.
Por eso su nombre lo dice. (PWM = Pulse Width Modulation o Modulación por Ancho de Pulso, en castellano)
 
Si entiendo, quería controlar una solenoide, que uso para dar pulsos sobre metales blandos, para que de pulsos cortos 1 cada segundo o muchos muy rápido, así puedo grabar el metal, la bobina tiene una resistencia de 25 ohm y se usa una tensión de 7 a 12 volt, que se varia dependiendo la fuerza del golpe que necesitas y la frecuencia seria la velocidad.
 
Dudo que en este caso (al menos por lo que nos has informado hasta ahora) si no te funciona el 555 lo puedas cambiar si lo sustituyes por un microcontrolador.

Si lo que calienta es la bobina la cambias por una adecuada que no caliente o veras como implementar un sistema de refrigeración adecuado para que no supere cierta temperatura "aceptable".

Usar un sistema PWM (frecuencia fija y ancho del pulso/ciclo variable) variando la frecuencia es como usar un tenedor para tomar sopa.

Saludos.
 
Ahí lo hice con el 555, ahora como veo en Proteus las frecuencias? Quiero lograr 1 Hz a 120 Hz, después voy a probar con el pic.
 

Adjuntos

  • Nueva carpeta (2).rar
    28.2 KB · Visitas: 3

D@rkbytes

Moderador

Adjuntos

  • 555 Frec Calc.rar
    6 KB · Visitas: 3
Fíjate que PWM no es lo mismo de lo que armaste(astable)

pw.JPG
Ente otras diferencias la frecuencia de uno es constante en el tiempo y la del otro no y el ancho de cada ciclo es variable en uno mientras que en el otro no.
Mi versión Proteus es mas moderna que la tuya por lo que si te subo lo de la captura, no lo podrás abrir hasta no actualizarlo.
 
Arriba