Autor Tema: Problemas para simular el DS18B20 en el PROTEUS usando el DS18B80.INC  (Leído 3675 veces)

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

Desconectado akira_ve

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 342
Hola amigo estoy trabajando con el DS18B20 usando la libreria DS18B20.inc el programa hace un muestreo de temperatura casa 2 segundos despues de casi 2 min me da un error en el Proteus, y el error es este

(DS1822) RAM COMMAND UNSUPPORTED

el codigo en asm es este que es un programa que encontre para un 16F84 y lo modifique para un 876, la version para 84 tambien da ese error uso el Proteus 7.4 probe con el 7.7 y pasa lo mismo, lo unico que no es del programa es la interrupcion por el puerto B que es para integrar una rutina de ajuste pero aun anulando esa interrupcion se genera la misma falla, las unicas librerias que nunca e usado son el DS18B20.INC y BUS_1LIN.INC

; ********************************* DS18B20_Term_876.asm ******************************
;
; *************************************************************************************

   LIST      P=16F876
   INCLUDE      <P16F876.INC>
   __CONFIG _CP_OFF & _WDT_OFF &  _BODEN_OFF & _PWRTE_ON & _XT_OSC & _LVP_OFF  & _CPD_OFF & _DEBUG_OFF
   errorlevel -302

   CBLOCK   0x20
   TemperaturaDeseada
   Registro50ms                     ; Guarda los incrementos cada 50 ms.
   Salida
   Dire
   Eedata
   Dato
   Temp_E
   TMR0_Carga50ms
   CARGA_2s
   ENDC                     

; ZONA DE CÓDIGOS ********************************************************************

   ORG    00
   goto   Inicio
   ORG      04
   goto   Ser_Inter

Inicio   
   call   LCD_Inicializa
   bsf      STATUS,   RP0
   movlw   b'10100000'                  ; Activa interrupción del TMR0 (T0IE), por cambio de
   movwf   INTCON
   movlw   B'00000110'                           ;
      movwf   ADCON1
      ;movlw   B'0000000'                                ;
      ;movwf   TRISA
   movlw   B'00001111'                                ;
      movwf   TRISB
   ;movlw   B'00000000'                        ;
      ;movwf   TRISC
   movlw   b'10000111'                  ; Prescaler de 256 para el TMR0.
   movwf   OPTION_REG
   bcf      STATUS,   RP0

   movlw   d'61'
´   movwf   TMR0_Carga50ms
   movlw   d'61'
   movwf   CARGA_2s
   call   DS18B20_Inicializa                            ; Comienza la conversión del termómetro y pone
   movlw   TMR0_Carga50ms               ; Carga el TMR0 en complemento a 2.
   movwf   TMR0
   movlw   CARGA_2s                          ; Y el registro cuyo decremento contará los 2 s.
   movwf   Registro50ms

   movlw   .0
   call   LCD_PosicionLinea1
   movlw    'T'                        ; Visualiza el signo "-" de temperatura negativa.
   call   LCD_Caracter
   movlw    'e'                        ; Visualiza el signo "-" de temperatura negativa.
   call   LCD_Caracter   
   movlw    'm'                        ; Visualiza el signo "-" de temperatura negativa.
   call   LCD_Caracter
   movlw    'p'                        ; Visualiza el signo "-" de temperatura negativa.
   call   LCD_Caracter
   movlw    '.'                        ; Visualiza el signo "-" de temperatura negativa.
   call   LCD_Caracter
   movlw    ' '                        ; Visualiza el signo "-" de temperatura negativa.
   call   LCD_Caracter
   movlw    'M'                        ; Visualiza el signo "-" de temperatura negativa.
   call   LCD_Caracter
   
   movlw   .9
   call   LCD_PosicionLinea1
   movlw    'T'                        ; Visualiza el signo "-" de temperatura negativa.
   call   LCD_Caracter
   movlw    'e'                        ; Visualiza el signo "-" de temperatura negativa.
   call   LCD_Caracter   
   movlw    'm'                        ; Visualiza el signo "-" de temperatura negativa.
   call   LCD_Caracter
   movlw    'p'                        ; Visualiza el signo "-" de temperatura negativa.
   call   LCD_Caracter
   movlw    '.'                        ; Visualiza el signo "-" de temperatura negativa.
   call   LCD_Caracter
   movlw    ' '                        ; Visualiza el signo "-" de temperatura negativa.
   call   LCD_Caracter
   movlw    'A'                        ; Visualiza el signo "-" de temperatura negativa.
   call   LCD_Caracter

Principal      
   goto   Principal

; Subrutina "ServicioInterrupcion" ------------------------------------------------------

Ser_Inter
   bcf      INTCON,   GIE                  ; lee el termómetro y actualiza termostato.
   btfsc           INTCON,   T0IF
   goto           Int_Tmro
   btfsc           INTCON,   RBIF                                           ; Chequeo si la int no fue por RB0
   goto           Int_Pto
   goto            Fin_Int

Int_Tmro
   movlw   TMR0_Carga50ms
   movwf   TMR0                              ; Recarga el TMR0.
   decfsz   Registro50ms,F                        ; Decrementa el contador.
   goto           Fin_Int                           ; No han pasado 2 segundos, por tanto sale.
   movlw   CARGA_2s                           ; Repone este contador nuevamente.
   movwf   Registro50ms
   call           DS18B20_LeeTemperatura                  ; Lee la temperatura.
   call           DS18B20_Inicializa                     ; Comienza conversión para la siguiente lectura.
   call           VisualizaTermometro
   bcf      INTCON,   T0IF
   goto           Fin_Int

Int_Pto
   btfsc           PORTB,   2
   call           Bajar
   btfsc           PORTB,   4
   call            Subir

Fin_Int
   movlw   .8
   call           LCD_PosicionLinea2
   movf           Temp_E,   W
   call           BIN_a_BCD_8BIT               ; La pasa a BCD.
   call           LCD_Byte                          ; Visualiza apagando los ceros no significativos.
   bsf      INTCON,   GIE   
   retfie

VisualizaTermometro

   movf           Salida,   W
   xorlw           B'00000001'
   movwf   Salida
   iorwf           Salida,   W   
   movwf   PORTB
   movlw   .0                        ; Se coloca para centrar visualización en la
   call           LCD_PosicionLinea2                    ; segunda línea.
   btfss           DS18B20_TemperaturaSigno,7              ; ¿Temperatura negativa?
   goto           TemperaturaPositiva                    ; No, es positiva.

TemperaturaNegativa:
   movlw    '-'                        ; Visualiza el signo "-" de temperatura negativa.
   call            LCD_Caracter

TemperaturaPositiva
   movlw   .1                        ; Se coloca para centrar visualización en la
   call            LCD_PosicionLinea2                            ; segunda línea.
   movf            DS18B20_Temperatura,W
   call            BIN_a_BCD_8BIT                       ; La pasa a BCD.
   call            LCD_Byte                                  ; Visualiza apagando los ceros no significativos.
   movlw    '.'                        ; Visualiza el punto decimal.
   call            LCD_Caracter
   movf            DS18B20_TemperaturaDecimal,W                     ; Visualiza la parte decimal.
   call            LCD_Nibble
   return

;******************************************
;   Bajar Temperatura
;******************************************
Bajar
   btfss   PORTB,   2         ; S1 Presionado
   goto   $-1
   call   Retardo_100ms
   btfsc   PORTB,   2      ; S1 Soltado
   goto   $-1
   decf   Temp_E,   F
   Return

;******************************************
;   Bajar Temperatura
;******************************************
Subir
   btfss   PORTB,   4         ; S1 Presionado
   goto   $-1
   call   Retardo_100ms
   btfsc   PORTB,   4      ; S1 Soltado
   goto   $-1
   incf   Temp_E,   F
   Return

;******************************************
;   Lectura de EEPROM
;******************************************
Leer_M:
   movf   Dire,   W                  ; dirección de EEPROM
   bcf    STATUS,   RP0
   bsf    STATUS,   RP1
   movwf    EEADR
   bsf    STATUS,   RP0
   bcf    EECON1,   EEPGD
   bsf    EECON1,   RD
   nop
   nop
   nop
   bcf    STATUS,   RP0
   movf    EEDATA,   W
   movwf   INDF
   bcf    STATUS,   RP0                ; EEADR posee la dirección a leer
   bcf    STATUS,   RP1
   incf   Dire,   F
   incf   FSR,   F
   Return

;******************************************
;   Grabacion de EEPROM
;******************************************
Grab_M:
   movf   Dire,   W
   bsf     STATUS,   RP1     
   bcf     STATUS,   RP0                ; Selecciona el Banco 2         
   movwf     EEADR                      ; parte baja de la direccion.
   bcf     STATUS,   RP1     
   bcf     STATUS,   RP0                ; Selecciona el Banco 2 

   movf   Dato,   W
   bsf     STATUS,   RP1     
   bcf     STATUS,   RP0                ; Selecciona el Banco 2         
   movwf     EEDATA                      ; parte baja de la direccion.
   bcf     STATUS,   RP1     
   bcf     STATUS,   RP0                ; Selecciona el Banco 2 

   bsf    STATUS,   RP0
   bsf    STATUS,   RP1                ; Selecciona banco 3
   bcf    EECON1,   EEPGD                ; Acceso a EEPROM de datos
   bsf    EECON1,   WREN                ; Permiso de escritura
   movlw    b'01010101'
   movwf    EECON2
   movlw    b'10101010'
   movwf    EECON2                      ; Secuencia establecida por Microchip
   bsf    EECON1,   WR                   ; Orden de escritura
   btfsc    EECON1,   WR                   ; Testear flag de fin de escritura
   goto   $-1
   bcf    EECON1,   WREN                ; Desconecta permiso de escritura
   bcf    EECON1,   EEIF                ; Reponer flag de fin de escritura
   bcf    STATUS,   RP0
   bcf    STATUS,   RP1                ; Selecciona banco 0
   Return

   INCLUDE  <DS18B20.INC>               ; Subrutinas de control del termómetro digital.
   INCLUDE  <BUS_1LIN.INC>               ; Subrutinas de control del bus de 1 línea.
   INCLUDE  <RETARDOS.INC>
   INCLUDE  <BIN_BCD_8BIT.INC>
   INCLUDE  <LCD_4BIT_876.INC>
   END
Si conocemos bien lo que tenemos y lo sabemos usar......se haran hasta cosas que e veces aseguran son imposibles

Venezuela

Desconectado akira_ve

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 342
Re: Problemas para simular el DS18B20 en el PROTEUS usando el DS18B80.INC
« Respuesta #1 en: 25 de Agosto de 2011, 01:30:11 »
reordene el codigo y solo deje las rutinas para leer el valor medido por el sensor y se resolvio luego coloco el codigo pero si mido temperaturas bajo cero y voy subiendo la temperatura no se elimina el signo negativo.........que sera???
Si conocemos bien lo que tenemos y lo sabemos usar......se haran hasta cosas que e veces aseguran son imposibles

Venezuela


 

anything