Poner limite al rango HPWM en Proton IDE

Hola. Estoy leyendo un potenciómetro en la entrada AN0, es como un palanca de neutral donde si el potenciómetro está en 2.5 V, el PIC no hace nada, pero si va subiendo hacia 5 V, se prende la señal de frente y empieza a generar un HPWM desde 5 V y hasta cero.
En el caso de que se mueva de 2.5 V hacia cero, se prende la señal de reversa y empieza a generar el mismo HPWM de 5 V hasta cero.

El problema es que en los extremos, por encima de 4.45 V y por debajo de 0.35 V, el rango del HPWM salta y no se mantiene.

Les dejo el código utilizado.
Saludos y gracias de antemano por cualquier ayuda.
Código:
LECTURA:

    vadc=0
    vadc = ADIn 0 
    If vadc > 530 Then
    GoTo adelante
    ElseIf vadc < 490 Then 
    GoTo atras
    Else GoTo inicio
    EndIf

adelante:
       
       vadc = ADIn 0                 
       ciclo = Abs ((vadc/2)-200)
       ciclo=~ciclo
       HPWM 1,ciclo,1600
       If vadc > 530 Then
       GoTo adelante
       Else GoTo LECTURA
       EndIf
     
atras:
       
       vadc=ADIn 0
       ciclo = Abs ((vadc/2)+220)
       HPWM 1,ciclo,1600
       If vadc < 490 Then 
       GoTo atras
       Else GoTo LECTURA                     
        EndIf     

End
 
Última edición por un moderador:
El problema es que en los extremos, por encima de 4.45 V y por debajo de 0.35 V, el rango del HPWM salta y no se mantiene.
Debes cuidar que el rango para el ciclo activo no exceda 255 que es el máximo permitido para HPWM.
El Manual de Proton IDE dijo:
Dutycycle is a variable, constant (0-255), or expression that specifies the on/off (high/low) ratio of the signal.
It ranges from 0 to 255, where 0 is off (low all the time) and 255 is on (high) all the time.
A value of 127 gives a 50% duty cycle (square wave).
Si haces una depuración de los valores, verías lo siguiente: Duty_Cycle_001.jpg
Esto sería cuando la lectura del ADC sea superior a 530.
O sea, en esta parte del programa:
Código:
    If vadc > 530 Then
        GoTo adelante
Y ahora mira los resultados de depuración para una lectura menor a 490: Duty_Cycle_002.jpg
Que viene siendo en esta parte del programa:
Código:
    ElseIf vadc < 490 Then 
        GoTo atras
Como puedes ver, en ambos procedimientos los valores para el ciclo activo superan 255. :cool:

Solución: Trabajar con el ADC a 8 Bits.
 
Última edición:
gracias por la respuesta..Darkbytes,

ya había visto que se excede el rango, y cada ves que pasa de 255 o de Cero empieza de nuevo, y ese es mi problema, como poner los limites para que no salte........actualmente funciona bien hasta los extremos de lectura del pot, en los extremos salta y eso es lo que no quiero que haga.

por cierto , las ventanitas negras con letras verdes,,,de donde salieron??:confused:

Saludos
 
Pues tienes 3 opciones:

  1. Corregir las fórmulas para que no se exceda el valor del ciclo activo a más de 255.
  2. Dividir el resultado de la lectura del ADC / 4
  3. Usar el ADC a 8 Bits.
Yo optaría por la tercera opción. ¿Por qué? Porque a 8 Bits, la máxima lectura es de 255.

Las ventanitas negras son recortes del Virtual Terminal de Proteus.
En los PIC se suelen enviar datos por RS-232 para depurar el programa de forma sencilla.
También se pueden depurar los programas en tiempo real usando ICD (In-Circuit Debugger)
 
Atrás
Arriba