Autor Tema: Programa corte de suministro Lipo 2S por corte de tension minima usando el ADC  (Leído 2511 veces)

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

Desconectado JoseLuis2801

  • PIC16
  • ***
  • Mensajes: 168
Buenas de nuevo,

Como no me queda claro con el Datasheet del 12F617, os pregunto, en ese convertidor ADC de un solo canal, cual es el tiempo de delay que tengo que programar ántes de iniciar la conversion ?

El valor del TAD son 16us.



Código: ASM
  1. w               EQU             0h
  2.         f               EQU             1h
  3.  
  4.         LIST            P=12F617
  5.         INCLUDE     <P12F617.INC>
  6.  
  7. ;;;;; 4 Mhz
  8.  
  9.  
  10.         RES.ALTO        EQU     21H
  11.         RES.BAJO        EQU     0XA0
  12.         RET1    EQU     22H
  13.         RET2    EQU     23H
  14.         RET3    EQU     24H
  15.  
  16.  
  17.        
  18.                         ORG             00H
  19.                         GOTO    INICIALIZACION
  20.                         ORG     05H
  21.        
  22.  
  23. ;;;;;;;         INICIALIZACION
  24.  
  25. INICIALIZACION  NOP
  26.        
  27.                         BANKSEL TRISIO
  28.                         BSF             TRISIO,4                               
  29.                        
  30.                         MOVLW   68H    ; FREC.CONVERSION Y BIT AN3 ANALOGICO
  31.                         MOVWF   ANSEL           ; 16.uS CONVERSION
  32.                        
  33.                         BANKSEL ADCON0
  34.                         MOVLW   0X8D            ;
  35.                         MOVWF   ADCON0
  36.                        
  37.                         CLRF    GPIO
  38.  
  39.                         CALL    DELAY
  40.                         BANKSEL ADCON0
  41. START.D         BSF             ADCON0,1
  42. S                       BTFSC   ADCON0,1       
  43.                         GOTO    S
  44.  
  45.                         BANKSEL ADRESL
  46.                         MOVF    ADRESL,W
  47.                         MOVWF   RES.BAJO
  48.                         BANKSEL ADRESH
  49.                         MOVF    ADRESH,W
  50.                         MOVWF   RES.ALTO
  51.  
  52.                        
  53.                         GOTO    INIC
  54.  
  55. DELAY           NOP
  56.                         RETURN
  57.  
  58. INIC            NOP
  59.  
  60. FIN                     NOP
  61.                         END



Gracias

un saludo
« Última modificación: 01 de Octubre de 2014, 18:53:01 por JoseLuis2801 »

Desconectado JoseLuis2801

  • PIC16
  • ***
  • Mensajes: 168
Re: Demora antes de empezar la conversion ADC
« Respuesta #1 en: 30 de Septiembre de 2014, 15:09:52 »
bueno, he visto en un libro de Pics un ejempo, y ponen 256us. de delay, asi que pondré lo mismo, digo yo uqe será suficiente.

un saludo

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Demora antes de empezar la conversion ADC
« Respuesta #2 en: 30 de Septiembre de 2014, 15:30:52 »
Citar
El valor del TAD son 16us.

Hace algun tiempo que no uso el ADC, pero para conversiones a 8bits erian 16*8=128uS y a 10bits 16*10=160uS, estos son los tiempos minimos, mejor darles un poco mas para asegurarse, el TAD varia segun la frecuencia de trabajo, creo recordar.

Desconectado JoseLuis2801

  • PIC16
  • ***
  • Mensajes: 168
Re: Demora antes de empezar la conversion ADC
« Respuesta #3 en: 30 de Septiembre de 2014, 15:53:09 »
ok, PERFECTO, YA LE HE PUESTO LOS 256us.  (Al final)

Código: ASM
  1. w               EQU             0h
  2.         f               EQU             1h
  3.  
  4.         LIST            P=12F617
  5.         INCLUDE     <P12F617.INC>
  6.  
  7. ;;;;; 4 Mhz
  8.  
  9.  
  10.         RES.ALTO        EQU     21H
  11.         RES.BAJO        EQU     0XA0
  12.         RET1    EQU     22H
  13.         RET2    EQU     23H
  14.         RET3    EQU     24H
  15.  
  16.  
  17.        
  18.                         ORG             00H
  19.                         GOTO    INICIALIZACION
  20.                         ORG     05H
  21.        
  22.  
  23. ;;;;;;;         INICIALIZACION
  24.  
  25. INICIALIZACION  NOP
  26.                         BANKSEL GPIO
  27.                         CLRF    GPIO
  28.                         BANKSEL TRISIO
  29.                         BSF             TRISIO,4                               
  30.                        
  31.                         MOVLW   68H    ; FREC.CONVERSION Y BIT AN3 ANALOGICO
  32.                         MOVWF   ANSEL           ; 16.uS CONVERSION
  33.                        
  34.                         BANKSEL ADCON0
  35.                         MOVLW   0X8D            ;
  36.                         MOVWF   ADCON0
  37.                        
  38.                        
  39.  
  40.                         CALL    DELAY
  41.                         BANKSEL ADCON0
  42. START.D         BSF             ADCON0,1
  43. S                       BTFSC   ADCON0,1       
  44.                         GOTO    S
  45.  
  46.                         BANKSEL ADRESL
  47.                         MOVF    ADRESL,W
  48.                         MOVWF   RES.BAJO
  49.                         BANKSEL ADRESH
  50.                         MOVF    ADRESH,W
  51.                         MOVWF   RES.ALTO
  52.  
  53.                        
  54.                         GOTO    INIC
  55.  
  56. DELAY           MOVLW   55H             ;  DELAY 256us.
  57.                         MOVWF   RET1
  58.                        
  59. DEC1            DECFSZ  RET1  
  60.                         GOTO    DEC1
  61.                         RETURN
  62.  
  63. INIC            NOP
  64.  
  65. FIN                     NOP
  66.                         END

Si Tapi8 , es que yo tengo una tabla en el datasheet, y a 4Mhz, y con un valor determinado en los bits 6:4 de reg. ANSEL, el TAD  son 16us.

Gracias

Seguimos..........

un saludo

PS. Adjunto la tabla citada.
« Última modificación: 30 de Septiembre de 2014, 19:14:31 por JoseLuis2801 »

Desconectado JoseLuis2801

  • PIC16
  • ***
  • Mensajes: 168
Re: Demora antes de empezar la conversion ADC
« Respuesta #4 en: 01 de Octubre de 2014, 18:26:48 »
Ya tengo el programa entero, o eso creo.

La lipo se desconectará del circuito cuando llegue una tension minima de unos 6,25V, lo hara sacando 0Vpor la patita GPIO,0 , que es la que está conectada a la puertade un mosfet, éste sera el elemento de control que abrira o cerrara circuito en función de la tension de salida de la patita citada. Además, hay un led indicador en la patita GPIO,2.

Bueno 1º pongo la parte del programa que se encarga de la polarizacion de dicha patita. Recordando de cuando etudié el tema del redes y las mascaras de red, he utilizado  2 instrucciones AND para hacer el corte en el valor 640 , que correspondería a  3,125V, la mitad de 6,25V.

De 640 hacia un valor mas alto el mosfet estará polarizado y cerrará circuito, de 639 hacia abajo el mosfet dejará de estarlo, ya que Vgs=0V.

Código: Text
  1. INIC         GOTO       CDEL
  2.  
  3. ON              BSF             GPIO,0   ; Vgs mosfet = Vcc
  4.                 BSF             GPIO,2   ; LED ON
  5.  
  6. CDEL            CALL    DELAY
  7.                         BANKSEL ADCON0
  8. START.D         BSF             ADCON0,1
  9. S1                      BTFSC   ADCON0,1       
  10.                         GOTO    S1
  11.  
  12. COND.1          MOVLW   60H
  13.                         ANDWF   ADRESH
  14.                         BTFSC   STATUS,2
  15.                         GOTO    COND.2
  16.                         GOTO    LIPOOFF
  17. COND.2          MOVLW   80H
  18.                         ANDWF   ADRESH
  19.                         BTFSC   STATUS,2
  20.                         GOTO    VgsON
  21.                        
  22.  
  23. LIPOOFF         BCF             GPIO,0   ; Vgs mosfet = 0V
  24.                         BCF             GPIO,2   ; LED OFF     
  25.                         GOTO    CDEL

Creo que está bien, pero bueno mañana lo comprobaré.

El esquema en la patita de entrada al ADC:


« Última modificación: 01 de Octubre de 2014, 18:34:45 por JoseLuis2801 »

Desconectado JoseLuis2801

  • PIC16
  • ***
  • Mensajes: 168
Programa corte de suministro Lipo 2S por corte de tension minima usando el ADC
« Respuesta #5 en: 01 de Octubre de 2014, 18:37:24 »
Y el programa entero:

Código: ASM
  1. w               EQU             0h
  2.         f               EQU             1h
  3.  
  4.         LIST            P=12F617
  5.         INCLUDE     <P12F617.INC>
  6.  
  7. ;;;;; 4 Mhz
  8.  
  9.  
  10.         RES.ALTO        EQU     21H
  11.        
  12.         RET1    EQU     22H
  13.        
  14.        
  15.  
  16.  
  17.        
  18.                         ORG             00H
  19.                         GOTO    INICIALIZACION
  20.                         ORG     05H
  21.        
  22.  
  23. ;;;;;;;         INICIALIZACION
  24.  
  25. INICIALIZACION  NOP
  26.                         BANKSEL GPIO
  27.                         CLRF    GPIO
  28.                         BANKSEL TRISIO
  29.                         BSF             TRISIO,4                               
  30.                        
  31.                         MOVLW   68H    ; FREC.CONVERSION Y BIT AN3 ANALOGICO
  32.                         MOVWF   ANSEL           ; 16.uS CONVERSION
  33.                        
  34.                         BANKSEL ADCON0
  35.                         MOVLW   0X0D            ;
  36.                         MOVWF   ADCON0
  37. INIC            GOTO    CDEL
  38.                
  39. VgsON           BSF             GPIO,0   ; Vgs mosfet = Vcc
  40.                         BSF             GPIO,2   ; LED ON
  41.  
  42. CDEL            CALL    DELAY
  43.                         BANKSEL ADCON0
  44. START.D         BSF             ADCON0,1
  45. S1                      BTFSC   ADCON0,1       
  46.                         GOTO    S1
  47.  
  48. COND.1          MOVLW   60H
  49.                         ANDWF   ADRESH
  50.                         BTFSC   STATUS,2
  51.                         GOTO    COND.2
  52.                         GOTO    LIPOOFF
  53. COND.2          MOVLW   80H
  54.                         ANDWF   ADRESH
  55.                         BTFSC   STATUS,2
  56.                         GOTO    VgsON
  57.                        
  58.  
  59. LIPOOFF         BCF             GPIO,0   ; Vgs mosfet = 0V
  60.                         BCF             GPIO,2   ; LED OFF     
  61.                         GOTO    CDEL
  62.                        
  63.                        
  64.  
  65. DELAY           MOVLW   55H             ;  DELAY 256us.
  66.                         MOVWF   RET1
  67.                        
  68. DEC1            DECFSZ  RET1  
  69.                         GOTO    DEC1
  70.                         RETURN
  71.  
  72. FIN                     NOP
  73.                         END


Al final, ha sido mejor justificar el resultado de la conversion a la izda. y asi no he tenido que utilizar el registro ADRESL.

Seguro que hay mejores formas de programar, pero bueno, es la que a mí me ha salido.

Un saludo

PS. PIC programado , a ver mañana   :-/

« Última modificación: 02 de Octubre de 2014, 08:59:47 por JoseLuis2801 »

Desconectado JoseLuis2801

  • PIC16
  • ***
  • Mensajes: 168
Re: Programa corte de suministro Lipo 2S por corte de tension minima usando el ADC
« Respuesta #6 en: 03 de Octubre de 2014, 16:27:43 »
Bueno acabo de probar, todas as tensione correctas en el puente resistivo y el PIC, patita AN3, pero, no funciona.
Lo mismo utilizando el puente con las de 10K, como con las de 5K.

Asi que por el momento, voy a simular con el MPLABSIM el tema logico de los AND, a ver si he tenido algún error en esa parte, y revisar los banksel, el reg. de configuracion bien, esta AN3 como I/O.

Os cuento..........

Desconectado JoseLuis2801

  • PIC16
  • ***
  • Mensajes: 168
Re: Programa corte de suministro Lipo 2S por corte de tension minima usando el ADC
« Respuesta #7 en: 03 de Octubre de 2014, 18:26:02 »
Vale, ahora entiendo, las 2 instrucciones condicionales han de ser BTFSS, y por otra parte, y aunque solo sea en el primer AND  , al final hay que poner ANDWF ADRESH,0 . XQ sino el resultado se queda en el reg. ADRESH , y mala cosa si salta al cond.2

Tb he tenido que hacer un    CLRF TRISIO

Bueno, PIC reprogramado, voy a comprobar.......


 :-/
« Última modificación: 04 de Octubre de 2014, 08:02:54 por JoseLuis2801 »

Desconectado JoseLuis2801

  • PIC16
  • ***
  • Mensajes: 168
Re: Programa corte de suministro Lipo 2S por corte de tension minima usando el ADC
« Respuesta #8 en: 03 de Octubre de 2014, 19:29:25 »
Funciona perfecto.  :)

Con una Vdd de 5,23V, sale una res. de 5,1mV/bit, pues bien,   el corte esta en 3,268V.

Bien, probando, con una Van de 3,37V y despues de 3,29V , 5,23V tanto en GPIO,0 como GPIO,2 . OK

Bajo por debajo del corte a 3,21V y 0V en ámbas patitas. He bajado Van a  poco mas de 1V, y lo mismo , 0V. Aún así, probraré con mas valores de Van claro, tengo que estar seguro que va bien en todo el rango de tensiones. Si hay algún problema lo digo.

El programa definitivo:

Código: ASM
  1. w               EQU             0h
  2.         f               EQU             1h
  3.  
  4.         LIST            P=12F617
  5.         INCLUDE     <P12F617.INC>
  6.  
  7. ;;;;; 4 Mhz
  8.  
  9.  
  10.        
  11.        
  12.         RET1    EQU     22H
  13.        
  14.        
  15.  
  16.  
  17.        
  18.                         ORG             00H
  19.                         GOTO    INICIALIZACION
  20.                         ORG     05H
  21.        
  22.  
  23. ;;;;;;;         INICIALIZACION
  24.  
  25. INICIALIZACION  NOP
  26.                         BANKSEL GPIO
  27.                         CLRF    GPIO
  28.                         BANKSEL TRISIO
  29.                         CLRF    TRISIO
  30.                         BSF             TRISIO,4                               
  31.                        
  32.                         MOVLW   68H    ; FREC.CONVERSION Y BIT AN3 ANALOGICO
  33.                         MOVWF   ANSEL           ; 16.uS CONVERSION
  34.                        
  35.                         BANKSEL ADCON0
  36.                         MOVLW   0X0D            ;
  37.                         MOVWF   ADCON0
  38. INIC            GOTO    CDEL
  39.                
  40. VgsON           BSF             GPIO,0   ; Vgs mosfet = Vcc
  41.                         BSF             GPIO,2   ; LED ON
  42.  
  43. CDEL            CALL    DELAY
  44.                         BANKSEL ADCON0
  45. START.D         BSF             ADCON0,1
  46. S1                      BTFSC   ADCON0,1       
  47.                         GOTO    S1
  48.  
  49. COND.1          MOVLW   60H
  50.                         ANDWF   ADRESH,0
  51.                         BTFSS   STATUS,2
  52.                         GOTO    COND.2
  53.                         GOTO    LIPOOFF
  54. COND.2          MOVLW   80H
  55.                         ANDWF   ADRESH,0
  56.                         BTFSS   STATUS,2
  57.                         GOTO    VgsON
  58.                        
  59.  
  60. LIPOOFF         BCF             GPIO,0   ; Vgs mosfet = 0V
  61.                         BCF             GPIO,2   ; LED OFF     
  62.                         GOTO    CDEL
  63.                        
  64.                        
  65.  
  66. DELAY           MOVLW   55H             ;  DELAY 256us.
  67.                         MOVWF   RET1
  68.                        
  69. DEC1            DECFSZ  RET1  
  70.                         GOTO    DEC1
  71.                         RETURN
  72.  
  73. FIN                     NOP
  74.                         END

Al final solo he necesitado un variable, la del delay RET1.

Bien, si alguien quiere conocer el XQ de las AND con esos valores, y  XQ son necesarias 2 condiciones, que pregunte y lo explico con total disposición, o cualquier otra cosa claro.  Sino, por mi parte lo dejo aqui.

Gracias a los que me habeis ayudado en los 2 hilos. ;-)

Un saludo

PS. Aqui el "chiringuito":
« Última modificación: 03 de Octubre de 2014, 19:50:52 por JoseLuis2801 »