Autor Tema: pic reloj  (Leído 16402 veces)

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

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re:pic reloj
« Respuesta #45 en: 14 de Octubre de 2016, 21:23:40 »
Las rutinas para el LCD no funcionan correctamente. Creo que debes empezar por ahi. Intente llamar la subrutina TEXTOPRINCIPAL y no funciona correctamente. Si eso no funciona, los datos que estan viendo posiblemente estan mal desplegados.
Yo creo que lo que estas haciendo es "copiar y pegar" sin analizar los codigos. Resuelve ese problema y luego ya vemos lo del sensor.

elreypic.

Desconectado juansanchezruiz05

  • PIC10
  • *
  • Mensajes: 30
Re:pic reloj
« Respuesta #46 en: 15 de Octubre de 2016, 06:04:06 »
Si funciona perfectamente la programación de la LCD y el converso de binario a Ascii. A mi me funciona en PIc simulator y en proteus. Además le pongo 50 en binario en un registro y me lo muestra por la pantalla el 50.

Los únicos problemas que tengo es con el sht11.

Si no se te enciende la LCD al simular es porque hay que poner a 1 la puerta RA4.

Al eliminar las rutinas del conversor a/d me deja de funcionar el programa, PROTEUS indica que sea perdido la conexión con el sht11. Pero cuando anulo la rutina de leer no se pierde la conexión.
 Puede que sea el motivo de que no me funcione.
« Última modificación: 15 de Octubre de 2016, 18:05:40 por juansanchezruiz05 »

Desconectado juansanchezruiz05

  • PIC10
  • *
  • Mensajes: 30
Re:pic reloj
« Respuesta #47 en: 15 de Octubre de 2016, 17:34:43 »
Imposible hacer que funcione.

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re:pic reloj
« Respuesta #48 en: 17 de Octubre de 2016, 01:23:58 »
Imposible hacer que funcione.

Nada es imposible. Solo hay que tener paciencia, realizar las cosas adecuada y correctamente. El uso de las herramientas ayudan a resolver los problemas, asi que con la ayuda de PROTEUS, MPLAB y mucha paciencia las rutinas en ensamblador para leer el sensor SHT11, ahora estan funcionando correctamente. Simplemente tomé las que estas usando y las comencé a depurar hasta obtener el resultado deseado. Ahora te toca a ti resolver la parte en que se muestra la hukmedad en % y la temperatura en °C. Pero la lectura de los datos del sensor ya son correctos.

He usado PICBASIC para reducir el tiempo para lo de la LCD y el conversor de binario a decimal y hexadecimal, pero las rutinas de comunicación hacia el sensor están en ensamblador, probadas que funcionan correctamente.

Código: QBasic/QuickBASIC
  1. '****************************************************************
  2. '*  Name    : SHT11_ASM.BAS                                     *
  3. '*  Author  : Miguel Angel Meza Campos                          *
  4. '*  Notice  : Copyright (c) 2016                                *
  5. '*          : All Rights Reserved                               *
  6. '*  Date    : 10/16/2016                                        *
  7. '*  Version : 1.0                                               *
  8. '*  Notes   :                                                   *
  9. '*          :                                                   *
  10. '****************************************************************
  11. DEFINE  LCD_DREG    PORTB
  12. DEFINE  LCD_RSREG   PORTD
  13. DEFINE  LCD_RSBIT   6
  14. DEFINE  LCD_EREG    PORTD
  15. DEFINE  LCD_EBIT    7
  16. DEFINE  LCD_BITS    8
  17. DEFINE  LCD_LINES   2
  18. DEFINE  OSC 20
  19.  
  20. ' ------------------------------------------------------------------------------
  21. ' Descripción del programa
  22. ' ------------------------------------------------------------------------------
  23. '
  24. ' Este programa demuestra la interface hacia el SHT11 y muestra el raw data
  25. ' ------------------------------------------------------------------------------
  26. ' I/O Definiciones
  27. ' ------------------------------------------------------------------------------
  28. ShtData         VAR     PORTA.1                       ' bi-directional data
  29. Clock           VAR     PORTA.2
  30.  
  31. ASM
  32. ShtData  equ     1
  33. Clock    equ     2
  34. ENDASM
  35.  
  36. ' ------------------------------------------------------------------------------
  37. ' Constantes
  38. ' ------------------------------------------------------------------------------
  39.  
  40. ShtTemp         CON     %00000011                  ' read temperature
  41. ShtHumi         CON     %00000101                  ' read humidity
  42.  
  43. ' ------------------------------------------------------------------------------
  44. ' Variables
  45. ' ------------------------------------------------------------------------------
  46. sincbit     VAR     BYTE
  47. CMData      VAR     BYTE
  48. soRH        VAR     WORD
  49. soT         VAR     WORD
  50. RXmsb       VAR     BYTE
  51. RXlsb       VAR     BYTE
  52.  
  53. ' ------------------------------------------------------------------------------
  54. ' Inicialización
  55. ' ------------------------------------------------------------------------------
  56.  
  57. Initialize:
  58.     ADCON1=6                'Configura el puerto A y E como digital
  59.     PORTA.1=1
  60.     PORTA.2=0
  61.     TRISA = %00000000       'Configura puerto A1 como entrada y A2 como salida
  62.     CALL    SHT_Connection_Reset  'Realiza un reset de la conexión con el sensor
  63.     PAUSE   500
  64.  
  65. Main:
  66.     LCDOUT    $FE,1       'Limpia la LCD y coloca cursor en posicion 0
  67.     LCDOUT    "   SHT1x Demo"
  68.     lcdout    $fe,$c0     'Mueve el cursor al inicio de la segunda linea
  69.     LCDOUT    "----------------"
  70.     PAUSE     2000
  71.  Main2:
  72.     CMData=ShtTemp            'Prepara el valor del comando para leer la temperatura
  73.     CALL    SHT11_CMD         'Ejecuta comando de lectura de temperatura
  74.     CALL    adqtime           'Espera a que el sensor termine la lectura de la temperatura
  75.     CALL    read_datos        'Lee los datos de la temperatura del sensor  
  76.     soT.HIGHBYTE=RXmsb        'Preparao los datos leidos (byte alto)
  77.     soT.LOWBYTE=RXlsb         'Byte bajo
  78.     LCDOUT    $FE,1           'Limpia la LCD y colocal cursor en posicion 0
  79.     LCDOUT    " Raw Data Temp:"
  80.     LCDOUT    $FE,$C0         'Mueve el cursor al inicio de la segunda linea
  81.     LCDOUT    DEC soT,"dec "
  82.     LCDOUT    HEX soT,"hex"
  83.    
  84.     PAUSE     2000             'Espera 2 segundos antes de leer la humedad
  85.    
  86.     CMData=ShtHumi            'Prepara el valor del comando para leer la Humedad
  87.     CALL    SHT11_CMD         'Ejecuta comando de lectura de Humedad
  88.     CALL    adqtime           'Espera a que el sensor termine la lectura de la humedad
  89.     CALL    read_datos         'Lee los datos de la humedad del sensor
  90.     soRH.HIGHBYTE=RXmsb       'Preparo los datos leidos (Byte alto)
  91.     soRH.LOWBYTE=RXlsb        'Byte bajo
  92.     LCDOUT    $FE,1           'Limpia la LCD y colocal cursor en posicion 0
  93.     LCDOUT    "Raw Data Humedad"
  94.     LCDOUT    $FE,$C0         'Mueve el cursor al inicio de la segunda linea
  95.     LCDOUT    DEC soRH,"dec "
  96.     LCDOUT    HEX soRH,"hex"
  97.  
  98.  
  99.     PAUSE 2000                
  100.     GOTO Main2
  101.        
  102. ' ------------------------------------------------------------------------------
  103. ' Subroutines
  104. ' ------------------------------------------------------------------------------
  105.  
  106. ' connection reset: 9 clock cyles with ShtData high, then start sequence
  107. '
  108.     asm
  109. _SHT_Connection_Reset
  110.         MOVLW   .9
  111.         MOVWF   _sincbit
  112.         bsf     PORTA,ShtData      ;Esto es igual a bsf PORTA,1
  113. clock_pulse:    
  114.         bsf     PORTA,Clock       ;Esto es lo mismo que bsf PORTA,2. Genera flanco de subida en el Clock
  115.         nop
  116.         nop
  117.         bcf     PORTA,Clock       ;Esto es lo mismo que bcf PORTA,2. Genera flanco de bajada en el Clock
  118.         nop
  119.         nop
  120.         decfsz  _sincbit,f
  121.         GOTO    clock_pulse
  122. transmission_start
  123.         bsf     PORTA,Clock         ;Genera un flanco de subida en el Clock
  124.         nop
  125.         nop
  126.         bcf     PORTA,ShtData       ;Baja el nivel del pin de datos
  127.         nop
  128.         nop
  129.         bcf     PORTA,Clock         ;Genera un flanco de bajada en el Clock
  130.         nop
  131.         nop
  132.         bsf     PORTA,Clock         ;Genera  un flanco de subida en el Clock
  133.         nop
  134.         nop
  135.         bsf     PORTA,ShtData       ;Sube el nivel del pin de datos
  136.         nop
  137.         nop
  138.         bcf     PORTA,Clock         ;Genera flanco de baja en el clock
  139.         RETURN
  140.     ENDASM
  141.    
  142. ;///////////////////////////////////////////////////////////////////////////
  143. ;--------------------- Manda comando AL SHT11 ------------------------------
  144.     asm
  145. _SHT11_CMD     
  146.         movwf   _CMData         ;guarda el comando en variable
  147.             CALL   transmission_start
  148.                 bcf     STATUS,C        ;borra carry
  149.                 clrf    _sincbit
  150.                
  151. cont_send      
  152.         rlf     _CMData,F       ;rota a la izquierda, bit alto en carry
  153.                 btfsc   STATUS,C        ;comprueba si es 1 o 0
  154.                 GOTO    uno
  155.  
  156. cero   
  157.                 bcf     PORTA,1         ;DATA change
  158.                 GOTO  $+1
  159.                 GOTO  $+1      
  160.                 bsf     PORTA,2         ;SCK  rising edge  _-  
  161.                 GOTO  $+1
  162.                 GOTO  $+1      
  163.                 bcf   PORTA,2 ;SCK falling edge -_
  164.                
  165.                 GOTO    sht11_compTX    ;salta
  166.  
  167. uno            
  168.                 bsf     PORTA,1         ;DATA change
  169.                 GOTO  $+1
  170.                 GOTO  $+1
  171.                 bsf     PORTA,2         ;SCK  rising edge  _-
  172.                 GOTO  $+1
  173.                 GOTO  $+1
  174.                 bcf   PORTA,2     ;SCK falling edge -_
  175.                
  176. ;Comprobacion para 8 rotaciones, una por bit del comando.
  177. sht11_compTX    
  178.         movlw   0x07            ;comprobacion 8 bits
  179.         subwf   _sincbit,W       ;Compara
  180.         btfsc   STATUS,Z        ;Es el ultimo?            
  181.         GOTO    SHT_waitACK
  182.         incf    _sincbit,f       ;Incrementa numero de sincbit
  183.         GOTO    cont_send       ;Vuelve a escribir
  184.  
  185. ;///////////////////////////////////////////////////////////////////////////
  186. ;---------------- Espera la llegada de ACK desde el sensor -----------------
  187. SHT_waitACK            
  188.         bsf     STATUS,5        ;banco 1
  189.                 bsf     TRISA,1         ;pone DATA port,0 como entrada
  190.                 bcf     STATUS,5        ;banco 0
  191.                 GOTO  $+1
  192.                 GOTO  $+1
  193.                 GOTO  $+1
  194. ACKrx  
  195.                 bsf     PORTA,2         ;SCK  rising edge
  196.                 GOTO  $+1
  197.                 GOTO  $+1
  198.                 btfsc   PORTA,1         ;comprueba DATA
  199.                 RETLW   .1
  200.                 bcf     PORTA,2         ;SCK  falling edge
  201.                 retlw   .0
  202.     ENDASM
  203.  
  204. ;ack desde SHT11 detectado y llegada de datos
  205.     ASM                
  206. _adqtime       
  207.         btfsc   PORTA,1         ;comprueba DATA
  208.                 GOTO    _adqtime                ;NO, bucle
  209.                 RETURN
  210.     ENDASM
  211.    
  212. ;///////////////////////////////////////////////////////////////////////////
  213. ;------------- LECTURA DE DATOS DESDE EL SHT11 (Byte alto) ----------------------
  214.     ASM
  215. _read_datos            
  216.             movlw       0x08
  217.                         MOVWF   _sincbit
  218.  
  219. high_byte       rlf       _RXmsb,F
  220.                         bcf      _RXmsb,0
  221.                         bsf     PORTA,2          ;SCK rising edge      
  222.  
  223.                         btfsc   PORTA,1
  224.                         bsf      _RXmsb,0
  225.  
  226.                         bcf     PORTA,2          ;SCK falling edge
  227.  
  228.                         decfsz  _sincbit,F
  229.                         GOTO    high_byte
  230.  
  231.                
  232.                         bsf     STATUS,5                ; register page 1
  233.                         bcf     TRISA,1                 ; SHT11_DATA es salida
  234.                         bcf     STATUS,5                ; register page 0
  235.  
  236.                         bcf     PORTA,1          ;Coloca el bit de ACK
  237.                         nop
  238.                         bsf     PORTA,2          ;SCK rising edge
  239.                         GOTO  $+1
  240.             GOTO  $+1
  241.                         bcf     PORTA,2          ;SCK falling edge
  242.                         GOTO  $+1
  243.             GOTO  $+1
  244.        
  245.                         bsf     STATUS,5                ; register page 1
  246.                         bsf     TRISA,1                 ; SHT11_DATA es entrada
  247.                         bcf     STATUS,5                ; register page 0
  248.  
  249.                         movlw   0X08
  250.                         movwf   _sincbit
  251.  
  252. low_byte        rlf     _RXlsb,F
  253.                         bcf     _RXlsb,0
  254.                         bsf     PORTA,2
  255.                         btfsc   PORTA,1
  256.                         bsf     _RXlsb,0
  257.                        
  258.                         bcf     PORTA,2
  259.  
  260.                         decfsz  _sincbit,F
  261.                         GOTO    low_byte
  262.  
  263.                         bsf     STATUS,5                ; register page 1
  264.                         bCf     TRISA,1                 ; SHT11_DATA es salida
  265.                         bcf     STATUS,5                ; register page
  266.  
  267.                         bSf     PORTA,1          ;Coloca bit de NACK
  268.                         nop
  269.                         bsf     PORTA,2          ;SCK rising edge
  270.                         GOTO  $+1
  271.             GOTO  $+1
  272.                         bcf     PORTA,2          ;SCK falling edge
  273.                         GOTO  $+1
  274.             GOTO  $+1
  275.                         RETURN
  276.     ENDASM

Te he adjuntado el archivo de simulacion en proteus, el codigo en PBP y el archivo hex para simularlo.

Elreypic.
« Última modificación: 17 de Octubre de 2016, 21:21:45 por elreypic2 »

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re:pic reloj
« Respuesta #49 en: 17 de Octubre de 2016, 21:13:06 »
Imposible hacer que funcione.

Nada es imposible. Solo hay que tener paciencia, realizar las cosas adecuada y correctamente. El uso de las herramientas ayudan a resolver los problemas, asi que con la ayuda de PROTEUS, MPLAB y mucha paciencia las rutinas en ensamblador para leer el sensor SHT11, ahora estan funcionando correctamente. Simplemente tomé las que estas usando y las comencé a depurar hasta obtener el resultado deseado. Ahora te toca a ti resolver la parte en que se muestra la hukmedad en % y la temperatura en °C. Pero la lectura de los datos del sensor ya son correctos.

He usado PICBASIC para reducir el tiempo para lo de la LCD y el conversor de binario a decimal y hexadecimal, pero las rutinas de comunicación hacia el sensor están en ensamblador, probadas que funcionan correctamente.

Código: QBasic/QuickBASIC
  1. '****************************************************************
  2. '*  Name    : SHT11_ASM.BAS                                     *
  3. '*  Author  : Miguel Angel Meza Campos                          *
  4. '*  Notice  : Copyright (c) 2016                                *
  5. '*          : All Rights Reserved                               *
  6. '*  Date    : 10/16/2016                                        *
  7. '*  Version : 1.0                                               *
  8. '*  Notes   :                                                   *
  9. '*          :                                                   *
  10. '****************************************************************
  11. DEFINE  LCD_DREG    PORTB
  12. DEFINE  LCD_RSREG   PORTD
  13. DEFINE  LCD_RSBIT   6
  14. DEFINE  LCD_EREG    PORTD
  15. DEFINE  LCD_EBIT    7
  16. DEFINE  LCD_BITS    8
  17. DEFINE  LCD_LINES   2
  18. DEFINE  OSC 20
  19.  
  20. ' ------------------------------------------------------------------------------
  21. ' Descripción del programa
  22. ' ------------------------------------------------------------------------------
  23. '
  24. ' Este programa demuestra la interface hacia el SHT11 y muestra el raw data
  25. ' ------------------------------------------------------------------------------
  26. ' I/O Definiciones
  27. ' ------------------------------------------------------------------------------
  28. ShtData         VAR     PORTA.1                       ' bi-directional data
  29. Clock           VAR     PORTA.2
  30.  
  31. ASM
  32. ShtData  equ     1
  33. Clock    equ     2
  34. ENDASM
  35.  
  36. ' ------------------------------------------------------------------------------
  37. ' Constantes
  38. ' ------------------------------------------------------------------------------
  39.  
  40. ShtTemp         CON     %00000011                  ' read temperature
  41. ShtHumi         CON     %00000101                  ' read humidity
  42.  
  43. ' ------------------------------------------------------------------------------
  44. ' Variables
  45. ' ------------------------------------------------------------------------------
  46. sincbit     VAR     BYTE
  47. CMData      VAR     BYTE
  48. soRH        VAR     WORD
  49. soT         VAR     WORD
  50. RXmsb       VAR     BYTE
  51. RXlsb       VAR     BYTE
  52.  
  53. ' ------------------------------------------------------------------------------
  54. ' Inicialización
  55. ' ------------------------------------------------------------------------------
  56.  
  57. Initialize:
  58.     ADCON1=6                'Configura el puerto A y E como digital
  59.     PORTA.1=1
  60.     PORTA.2=0
  61.     TRISA = %00000000       'Configura puerto A1 como entrada y A2 como salida
  62.     CALL    SHT_Connection_Reset  'Realiza un reset de la conexión con el sensor
  63.     PAUSE   500
  64.  
  65. Main:
  66.     LCDOUT    $FE,1       'Limpia la LCD y coloca cursor en posicion 0
  67.     LCDOUT    "   SHT1x Demo"
  68.     lcdout    $fe,$c0     'Mueve el cursor al inicio de la segunda linea
  69.     LCDOUT    "----------------"
  70.     PAUSE     2000
  71.  Main2:
  72.     CMData=ShtTemp            'Prepara el valor del comando para leer la temperatura
  73.     CALL    SHT11_CMD         'Ejecuta comando de lectura de temperatura
  74.     CALL    adqtime           'Espera a que el sensor termine la lectura de la temperatura
  75.     CALL    read_datos        'Lee los datos de la temperatura del sensor  
  76.     soT.HIGHBYTE=RXmsb        'Preparao los datos leidos (byte alto)
  77.     soT.LOWBYTE=RXlsb         'Byte bajo
  78.     LCDOUT    $FE,1           'Limpia la LCD y colocal cursor en posicion 0
  79.     LCDOUT    " Raw Data Temp:"
  80.     LCDOUT    $FE,$C0         'Mueve el cursor al inicio de la segunda linea
  81.     LCDOUT    DEC soT,"dec "
  82.     LCDOUT    HEX soT,"hex"
  83.    
  84.     PAUSE     2000             'Espera 2 segundos antes de leer la humedad
  85.    
  86.     CMData=ShtHumi            'Prepara el valor del comando para leer la Humedad
  87.     CALL    SHT11_CMD         'Ejecuta comando de lectura de Humedad
  88.     CALL    adqtime           'Espera a que el sensor termine la lectura de la humedad
  89.     CALL    read_datos         'Lee los datos de la humedad del sensor
  90.     soRH.HIGHBYTE=RXmsb       'Preparo los datos leidos (Byte alto)
  91.     soRH.LOWBYTE=RXlsb        'Byte bajo
  92.     LCDOUT    $FE,1           'Limpia la LCD y colocal cursor en posicion 0
  93.     LCDOUT    "Raw Data Humedad"
  94.     LCDOUT    $FE,$C0         'Mueve el cursor al inicio de la segunda linea
  95.     LCDOUT    DEC soRH,"dec "
  96.     LCDOUT    HEX soRH,"hex"
  97.  
  98.  
  99.     PAUSE 2000                
  100.     GOTO Main2
  101.        
  102. ' ------------------------------------------------------------------------------
  103. ' Subroutines
  104. ' ------------------------------------------------------------------------------
  105.  
  106. ' connection reset: 9 clock cyles with ShtData high, then start sequence
  107. '
  108.     asm
  109. _SHT_Connection_Reset
  110.         MOVLW   .9
  111.         MOVWF   _sincbit
  112.         bsf     PORTA,ShtData      ;Esto es igual a bsf PORTA,1
  113. clock_pulse:    
  114.         bsf     PORTA,Clock       ;Esto es lo mismo que bsf PORTA,2. Genera flanco de subida en el Clock
  115.         nop
  116.         nop
  117.         bcf     PORTA,Clock       ;Esto es lo mismo que bcf PORTA,2. Genera flanco de bajada en el Clock
  118.         nop
  119.         nop
  120.         decfsz  _sincbit,f
  121.         GOTO    clock_pulse
  122. transmission_start
  123.         bsf     PORTA,Clock         ;Genera un flanco de subida en el Clock
  124.         nop
  125.         nop
  126.         bcf     PORTA,ShtData       ;Baja el nivel del pin de datos
  127.         nop
  128.         nop
  129.         bcf     PORTA,Clock         ;Genera un flanco de bajada en el Clock
  130.         nop
  131.         nop
  132.         bsf     PORTA,Clock         ;Genera  un flanco de subida en el Clock
  133.         nop
  134.         nop
  135.         bsf     PORTA,ShtData       ;Sube el nivel del pin de datos
  136.         nop
  137.         nop
  138.         bcf     PORTA,Clock         ;Genera flanco de baja en el clock
  139.         RETURN
  140.     ENDASM
  141.    
  142. ;///////////////////////////////////////////////////////////////////////////
  143. ;--------------------- Manda comando AL SHT11 ------------------------------
  144.     asm
  145. _SHT11_CMD     
  146.         movwf   _CMData         ;guarda el comando en variable
  147.             CALL   transmission_start
  148.                 bcf     STATUS,C        ;borra carry
  149.                 clrf    _sincbit
  150.                
  151. cont_send      
  152.         rlf     _CMData,F       ;rota a la izquierda, bit alto en carry
  153.                 btfsc   STATUS,C        ;comprueba si es 1 o 0
  154.                 GOTO    uno
  155.  
  156. cero   
  157.                 bcf     PORTA,1         ;DATA change
  158.                 GOTO  $+1
  159.                 GOTO  $+1      
  160.                 bsf     PORTA,2         ;SCK  rising edge  _-  
  161.                 GOTO  $+1
  162.                 GOTO  $+1      
  163.                 bcf   PORTA,2 ;SCK falling edge -_
  164.                
  165.                 GOTO    sht11_compTX    ;salta
  166.  
  167. uno            
  168.                 bsf     PORTA,1         ;DATA change
  169.                 GOTO  $+1
  170.                 GOTO  $+1
  171.                 bsf     PORTA,2         ;SCK  rising edge  _-
  172.                 GOTO  $+1
  173.                 GOTO  $+1
  174.                 bcf   PORTA,2     ;SCK falling edge -_
  175.                
  176. ;Comprobacion para 8 rotaciones, una por bit del comando.
  177. sht11_compTX    
  178.         movlw   0x07            ;comprobacion 8 bits
  179.         subwf   _sincbit,W       ;Compara
  180.         btfsc   STATUS,Z        ;Es el ultimo?            
  181.         GOTO    SHT_waitACK
  182.         incf    _sincbit,f       ;Incrementa numero de sincbit
  183.         GOTO    cont_send       ;Vuelve a escribir
  184.  
  185. ;///////////////////////////////////////////////////////////////////////////
  186. ;---------------- Espera la llegada de ACK desde el sensor -----------------
  187. SHT_waitACK            
  188.         bsf     STATUS,5        ;banco 1
  189.                 bsf     TRISA,1         ;pone DATA port,0 como entrada
  190.                 bcf     STATUS,5        ;banco 0
  191.                 GOTO  $+1
  192.                 GOTO  $+1
  193.                 GOTO  $+1
  194. ACKrx  
  195.                 bsf     PORTA,2         ;SCK  rising edge
  196.                 GOTO  $+1
  197.                 GOTO  $+1
  198.                 btfsc   PORTA,1         ;comprueba DATA
  199.                 RETLW   .1
  200.                 bcf     PORTA,2         ;SCK  falling edge
  201.                 retlw   .0
  202.     ENDASM
  203.  
  204. ;ack desde SHT11 detectado y llegada de datos
  205.     ASM                
  206. _adqtime       
  207.         btfsc   PORTA,1         ;comprueba DATA
  208.                 GOTO    _adqtime                ;NO, bucle
  209.                 RETURN
  210.     ENDASM
  211.    
  212. ;///////////////////////////////////////////////////////////////////////////
  213. ;------------- LECTURA DE DATOS DESDE EL SHT11 (Byte alto) ----------------------
  214.     ASM
  215. _read_datos            
  216.             movlw       0x08
  217.                         MOVWF   _sincbit
  218.  
  219. high_byte       rlf       _RXmsb,F
  220.                         bcf      _RXmsb,0
  221.                         bsf     PORTA,2          ;SCK rising edge      
  222.  
  223.                         btfsc   PORTA,1
  224.                         bsf      _RXmsb,0
  225.  
  226.                         bcf     PORTA,2          ;SCK falling edge
  227.  
  228.                         decfsz  _sincbit,F
  229.                         GOTO    high_byte
  230.  
  231.                
  232.                         bsf     STATUS,5                ; register page 1
  233.                         bcf     TRISA,1                 ; SHT11_DATA es salida
  234.                         bcf     STATUS,5                ; register page 0
  235.  
  236.                         bcf     PORTA,1          ;Coloca el bit de ACK
  237.                         nop
  238.                         bsf     PORTA,2          ;SCK rising edge
  239.                         GOTO  $+1
  240.             GOTO  $+1
  241.                         bcf     PORTA,2          ;SCK falling edge
  242.                         GOTO  $+1
  243.             GOTO  $+1
  244.        
  245.                         bsf     STATUS,5                ; register page 1
  246.                         bsf     TRISA,1                 ; SHT11_DATA es entrada
  247.                         bcf     STATUS,5                ; register page 0
  248.  
  249.                         movlw   0X08
  250.                         movwf   _sincbit
  251.  
  252. low_byte        rlf     _RXlsb,F
  253.                         bcf     _RXlsb,0
  254.                         bsf     PORTA,2
  255.                         btfsc   PORTA,1
  256.                         bsf     _RXlsb,0
  257.                        
  258.                         bcf     PORTA,2
  259.  
  260.                         decfsz  _sincbit,F
  261.                         GOTO    low_byte
  262.  
  263.                         bsf     STATUS,5                ; register page 1
  264.                         bCf     TRISA,1                 ; SHT11_DATA es salida
  265.                         bcf     STATUS,5                ; register page
  266.  
  267.                         bSf     PORTA,1          ;Coloca bit de NACK
  268.                         nop
  269.                         bsf     PORTA,2          ;SCK rising edge
  270.                         GOTO  $+1
  271.             GOTO  $+1
  272.                         bcf     PORTA,2          ;SCK falling edge
  273.                         GOTO  $+1
  274.             GOTO  $+1
  275.                         RETURN
  276.     ENDASM

Te he adjuntado el archivo de simulacion en proteus, el codigo en PBP y el archivo hex para simularlo.

Elreypic.

Desconectado juansanchezruiz05

  • PIC10
  • *
  • Mensajes: 30
Re:pic reloj
« Respuesta #50 en: 18 de Octubre de 2016, 09:28:31 »
muchas gracias.

De verdad que yo solo no era capaz

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re:pic reloj
« Respuesta #51 en: 20 de Octubre de 2016, 11:56:02 »
muchas gracias.

De verdad que yo solo no era capaz

Que tal juansanchezruiz05,
Ya no seguiste comentando tus avances. Realizaste la linealizacion de la lectura del sensor SHT11 para que mostrar el valor de la temperatura en °C y la humedad en %?

elreypic.


 

anything