Autor Tema: Modulo PWM con LCD  (Leído 119 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Electronikz

  • PIC10
  • *
  • Mensajes: 2
Modulo PWM con LCD
« en: 20 de Noviembre de 2020, 23:36:16 »
Buen día a todos en la comunidad, soy nuevo en este foro y quisiera que me pudieran ayudar por favor en explicarme como podría o de que manera puedo pasar valores del modulo PWM en porcentaje que vaya de 1% hasta el 100% en un display LCD, esto con el objetivo de controlar la velocidad de un motor DC, todo esto claro en lenguaje ensamblador, la verdad seria de gran ayuda

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7944
Re:Modulo PWM con LCD
« Respuesta #1 en: 21 de Noviembre de 2020, 09:38:09 »
El Valor que cargas en el registro que te da el duty * 100 y luego lo dividis por el valor que tiene el registro que da el periodo.

Supongamos que tenes un PIC16F887:

CCPRxL rotado 2 veces a la izquierda sumarle los bits CCPxCON<5:4> , asi formas los 10 bits del duty
Multiplicalo por 100
Dividilo por PR2 rotado dos veces a la izquierda


O si queres hacerlo mas sencillo. solo
CCPRxL * 100 / PR2

El resultado que te quede de eso es tu porcentaje.

La division la podes hacer con sucesivas restas. La multiplicacion por ahi es mas sencillo hacerla haciendo shift ya que 100 tiene 3 bits en 1 nomas.
Si vas a mantener el valor de PR fijo, podrias simplemente calcular el valor por el cual multiplicar y hacerlo solo con una multiplicacion.
« Última modificación: 21 de Noviembre de 2020, 09:46:34 por KILLERJC »

Desconectado Electronikz

  • PIC10
  • *
  • Mensajes: 2
Re:Modulo PWM con LCD
« Respuesta #2 en: 24 de Noviembre de 2020, 05:34:37 »
Perdon por la demora KILLERJC mi lap se daño, mas bien mi disco duro se daño y perdi varia informacion de el.
bueno mas que todo lo que proponen realizar es lo siguiente

Se controlará la velocidad de un motor utilizando el potenciómetro. El
porcentaje del ancho de pulso se desplegará en una pantalla LCD y
deberá incluir una resolución hasta décimas de porcentaje. El
porcentaje del ancho de pulso irá desde 0.0% hasta 100.0%. Cuando el
motor esté trabajando se deberá encender también un LED.

Cuando el porcentaje del ancho de pulso esté entre 0% y 30% se
desplegará la leyenda “Baja Velocidad”, cuando esté entre 30% y 70%
se presentará la leyendo “Velocidad Media” y, cuando esté entre 70% y
100% se desplegará la leyenda “Alta Velocidad”.

tengo una ligera idea como iniciar pero aun así tengo varias dudas
esto es el código que tengo hasta el momento, si podrían orientarme o explicarme por favor seria de gran ayuda, es algo complicado ensamblador pero aun así es entretenido je. Por cierto la librería de LCD.inc del libro de palacios quería implementarla para el manejo del LCD, le cambie unas cosas pero no me funciono.

bueno aquí el codigo:

;************** Control de motor con potenciómetro y pantalla LCD **************
;   
; PERIODO DE PWM A 4096 uS o 4.098 mS
; Tpwm= (255+1)4*0.25*16 = 4096
; Ancho de pulso = (CCPR1L:CCP1CON<5:4>)*Tosc*(Preescales TMR2)
; (CCPR1L:CCP1CON<5:4>)= 4096/(.25*16)= 1024 uS o 1 mS
;   
;*******************************************************************************   
  LIST P = 18f45k50
  #include<p18f45k50.inc>
   
  CONFIG WDTEN = OFF ; Disables the Watchdog
  CONFIG MCLRE = ON ; Enables MCLEAR
  CONFIG DEBUG = OFF ; Disables Debug mode
  CONFIG LVP = OFF ; Disables Low-Voltage programming
  CONFIG FOSC = INTOSCIO ; Enables internal oscillator
 
Delay1 EQU 0x00 ; reserves 1 byte for variable Delay1
Delay2 EQU 0x01 ; reserves 1 byte for variable Delay2

  ORG 0              ; guarda direccion en 0x00
                     ; PERIODO PWM = [(PR2)+1]*4*TOSC*(TMR PRESCALE VALUE)
  movlb 0x0F
  clrf ANSELA,1
  clrf ANSELC,1      ; TODOS LOS PINES DE PORTC COMO DIGITALES
  clrf TRISC         ; PINES DEL PUERTO PORTC COMO SALIDAS DIGITALES
  bsf  TRISA,0
  bsf  ANSELA,0
;*************************** CONF. Oscilador *********************************** 
  movlw b'01010010'
  movwf OSCCON       ; Osccilador interno de 4MHz
;***************************** CONF. ADC ***************************************
  movlw b'00000001'
  movwf ADCON0       ; Habilita convertidor ADC y selecciona pin AN0
  movlw 0x00
  movwf ADCON1       ; Se define Vref+ y Vref-
  movlw b'00010100'
  movwf ADCON2       ; Se define ACQT=4TAD y TAD de 1 microS
;***************************** CONF. PWM ***************************************   
  movlw d'255'         
  movwf PR2          ; carga valor en PR2
  movlw b'00001111' 
  movwf CCP1CON      ; Modo PWM activo y LSBs del ciclo de trabajo a 0
  movlw b'00000110'         
  movwf T2CON        ; Postscaler to 1:1 and prescaler to 1:16
  movlw 0xFF
  movwf CCPR1L
;**************************** Menu principal ***********************************
         
inicio
  bsf ADCON0,1       ; Comienza la conversion
conv
  btfsc ADCON0,1     ; Verifica si GO/DONE se ha limppiado
  goto conv          ; En caso contrario, regresa a etiqueta conv
  MOVF ADRESH,W      ; Mueve el resultado a W
  MOVWF CCPR1L       ; Valor de W a CCR1LL
  call retardo       ; Retardo
  goto inicio        ; Bucle      

;***************************** Subrutina Retardo *******************************
retardo
  decfsz Delay1,1
  goto retardo
  ;;decfsz Delay2,1
  ;goto retardo
  return
  END

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7944
Re:Modulo PWM con LCD
« Respuesta #3 en: 24 de Noviembre de 2020, 08:16:44 »
El problema de ASM, es que necesitas conocer como funcionan los modulos.

Tu codigo tiene poco y nada realizado.

Citar
Se controlará la velocidad de un motor utilizando el potenciómetro.
Obviamente necesitas leer con el ADC el valor. veo que o haces y esta bien...

Citar
Por cierto la librería de LCD.inc del libro de palacios quería implementarla para el manejo del LCD, le cambie unas cosas pero no me funciono.
Necesitas si o si una libreria para el LCD, no creo que quieras hacerla de cero, ya que implica conocer como funciona el driver del LCD y eso es leerse varias hojas de su datasheet.

Citar
tengo una ligera idea como iniciar pero aun así tengo varias dudas
¿Cuales son tus dudas?


Teniendo el PR2 en 0xFF (255) es genial, porque te facilita las cosas, aunque esto signifique que el periodo no sea tan facil de controlar, pero para cumplir con los objetivos es valido.

Lo que te faltaria es:

-Calcular el porcentaje.
Sabes que el PR2 es 255, por lo tanto vamos a simplificar nuestra operacion
CCPRxL * 100 / 255
CCPRxL * 100 / 255
CCPRxL *  20 / 51
CCPRxL * 0.3921568627

La multiplicacion, la podes hacer con el multiplicador de 8x8, o haces la multiplicacion por 20, y luego dividis (que podes multiplicarlo por su reciproco) o directamente, haces la multiplicacion del ultimo. Donde.... el CCPRxL sea expresado en formado Q8.0 es decir 8 enteros, 0 fraccionarios, y el numero 0,39... sea expresado como Q0.8 (0 enteros y todos decimales) de esa forma al multiplicarlos el resultado te queda en Q8.8, es decir 8 enteros ubicados en PRODH y los 8 decimales en PRODL. Un solo paso!.

- Escribirlo en el LCD
Observar si es mayor o menor a ciertos valores en simple... Directamente haces:
- Es menor a 30?
- Es menor a 70?
Y lo que queda si no es ninguna de esas 2 es que sea mayor...
Pero en este caso si o si necesitamos de esa libreria, Los textos van a estar guardados en la FLASH seguramente. Y gracias a que tenes un PIC18, podes acceder a ellos de dos formas distintas, mediante tablas (ver el datasheet) o saltos GOTO (esto no tiene sentido en ese PIC)


 

anything