Autor Tema: Estoy empezando y necesito saber donde me equivoco  (Leído 2863 veces)

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

Desconectado cagalaberza

  • PIC10
  • *
  • Mensajes: 4
Estoy empezando y necesito saber donde me equivoco
« en: 10 de Noviembre de 2011, 14:15:42 »
Me estoy iniciando en la programación pic y he empezado por el 16f84a.
Mi proyecto es controlar un termostato de calefación por medio de un pc (solo encendido y apagado) y además que el pic me devuelva el estado por un mensaje al hyperterminal.
 En el circuito de proteus emulo el relé de doble bobina y latching de control del termostato con 2 leds, pero no funciona y no se por qué.
  Se que el circuito está bien y el Emsamblador no me dá errores. Os dejo mi asm y el circuito que uso en proteus. Se agradecería una explicación del error para un novato. Gracias adelantadas


       __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
       LIST    P=16F84A
       INCLUDE <P16F84A.INC>

       CBLOCK  0x0C
       TeclaPulsada                  ; Va a guardar el contenido de la tecla pulsada.
       MensajeApuntado               ; Va a guardar la dirección del mensaje apuntado.
       ENDC


#DEFINE SalidaOn     PORTB,1         ; Define dónde se sitúan las salidas.
#DEFINE SalidaOff    PORTB,0

TECLA_ON     EQU  't'                ; Código de las teclas utilizadas.
TECLA_OFF    EQU  'a'               
TECLA_PARADA EQU  ' '                ; Código de la tecla espaciadora, (hay un espacio,
                                     ; tened cuidado al teclear el programa).
; ZONA DE CÓDIGOS ********************************************************************

        ORG   0
Inicio
        call  RS232_Inicializa
        bsf   STATUS,RP0              ; Configura como salida la línea del
        bcf   SalidaOn                ; Puerto B respetando la configuración del
        bcf   SalidaOff               ; resto de las líneas.
        bcf   STATUS,RP0             
        call  Parado                  ; En principio todas las salidas deben estar
Principal                             ; apagadas.
        call  RS232_LeeDato           ; Espera a recibir un carácter.
        call  TesteaTeclado
        goto  Principal

; "Mensajes" ----------------------------------------------------------------------------
;
Mensajes
        addwf   PCL,F
MensajeOff
        DT "Junkers Ceracontrol Off", 0x00
MensajeOn
        DT "Junkers Ceracontrol On", 0x00
MensajeParado
        DT "Sistema Parado", 0x00

; Subrutina "TesteaTeclado" -------------------------------------------------------------
;
; Testea el teclado y actúa en consecuencia.

TesteaTeclado
        movwf   TeclaPulsada           ; Guarda el contenido de la tecla pulsada.
        xorlw   TECLA_ON               ; ¿Es la tecla del encendido?
        btfsc   STATUS,Z
        goto    On                     ; Sí, se desea encendido.
;
        movf    TeclaPulsada,W         ; Guarda el contenido de la tecla pulsada.
        xorlw   TECLA_OFF              ; ¿Es la tecla del apagado?
        btfsc   STATUS,Z
        goto    Off                    ; Sí, se desea apagado.
;
        movf    TeclaPulsada,W         ; Guarda el contenido de la tecla pulsada.
        xorlw   TECLA_PARADA              ; ¿Es la tecla del apagado?
        btfss   STATUS,Z
        goto    Fin                    ; Sí, se desea apagado.
Parado
        bcf     SalidaOff
        bcf     SalidaOn 
        movlw   MensajeParado          ;
        goto    Visualiza
Off
        bsf     SalidaOff
        bcf     SalidaOn               ;
        movlw   MensajeOff             ;
        goto    Visualiza
On
        bcf     SalidaOff
        bsf     SalidaOn
        movlw   MensajeOn
        goto    Visualiza
                     ; Según el estado de las salidas visualiza el 
                     ; estado del sistema en el monitor del ordenador.

Visualiza
        movwf   MensajeApuntado         ; Guarda la posición del mensaje.
        call    RS232_LineasBlanco      ; Borra la pantalla del ordenador.
        movf    MensajeApuntado,W
        call    RS232_Mensaje           ; Lo visualiza en el HyperTerminal.
        call    RS232_LineasBlanco
Fin     return
       
        INCLUDE <RS232.INC>
        INCLUDE <RS232MEN.INC>
        INCLUDE <RETARDOS.INC>
        END

 

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4069
Re: Estoy empezando y necesito saber donde me equivoco
« Respuesta #1 en: 10 de Noviembre de 2011, 15:41:35 »
No se si podrá ser eso pero no veo por ningun sitiop donde digamos como configuras los puertos (pines) como entradas/salidas.
Esto se realiza con el registro TRISA y TRISB.

F.
Todos los días se aprende algo nuevo.

Desconectado tannke

  • PIC16
  • ***
  • Mensajes: 176
Re: Estoy empezando y necesito saber donde me equivoco
« Respuesta #2 en: 10 de Noviembre de 2011, 16:58:33 »
Sería bueno que incluyeras el archivo compilado .hex para poder provar la simulación.

Fer_TACA, las librerias que está utilizando, si no me equivoco las del libro "microcontrolador pic16f84 desarollo de proyectos" configuran las entradas/salidas para el rs232, y luego en:

Código: [Seleccionar]
bsf   STATUS,RP0              ; Configura como salida la línea del
        bcf   SalidaOn                ; Puerto B respetando la configuración del
        bcf   SalidaOff               ; resto de las líneas.
        bcf   STATUS,RP0

está poniendo los pines b0 y b1 como salidas pero accediendo desde la dirección de registro del PORTB (06h) que al estar en el banco1 coincide con la de TRISB(86h).

Un saludo

Desconectado cagalaberza

  • PIC10
  • *
  • Mensajes: 4
Re: Estoy empezando y necesito saber donde me equivoco
« Respuesta #3 en: 10 de Noviembre de 2011, 17:12:06 »
Efectivamente es un desarrollo ( o mas bien he quitado la parte del lcd) del ejercicio 20-15 del libro "microcontrolador pic16f84 desarollo de proyectos".
 El siguiente paso será añadir un sensor de temperatura ds1820 que dé la temperaturo a traves del hyperterminal, pero eso después de hacer funcionar el control de pines. (La idea total sería= despertar pc con WOL, controlarlo a distancia con el soft teamviewer, leer temperatura en la estancia, encender la caldera de calefacción solo si es necesario y poder apagar el pc conservando la posición del relé en que se deje ON u OFF(relé latching)).
 Aqui el hex resultante de compilar el asm:

:100000006620831686100610831254206B20482029
:10001000062882074A3475346E346B346534723482
:1000200073342034433465347234613463346F3450
:100030006E34743472346F346C3420344F3466341C
:10004000663400344A3475346E346B34653472343B
:1000500073342034433465347234613463346F3420
:100060006E34743472346F346C3420344F346E34E4
:100070000034533469347334743465346D3461340A
:100080002034503461347234613464346F34003459
:100090008C00743A03195C280C08613A031958283B
:1000A0000C08203A031D6528061086103930602898
:1000B000061486100A306028061086142230602844
:1000C0008D009B200D088D209B2008008316851530
:1000D00005128312080008308E0085196D28B120A2
:1000E000B3200310851903148F0CB1208E0B7128D7
:1000F000AE200F080800303E8F0008308E00051239
:10010000B1208F0C031C8628051687280512B12004
:100110008E0B81280516AE20080090000930900251
:100120009003100809209100910803199A287C2057
:10013000900A912808000A3092000A307C20920B25
:100140009D280D307C200800000000000000000009
:100150000000000008000000A430B7280000403074
:10016000B7281F30B72800000E30B728053093009D
:10017000930BB8280800C830CA286430CA28323027
:10018000CA281430CA280A30CA280530CA280230C2
:10019000CA2801309400F93093000000930BCD2859
:1001A000940BCB280800C830DE286430DE283230BB
:1001B000DE281430DE280A30DE2805309500643051
:1001C0009400F93093000000930BE328940BE1288E
:0601D000950BDF2808007A
:02400E00F13F80
:00000001FF

Desconectado tannke

  • PIC16
  • ***
  • Mensajes: 176
Re: Estoy empezando y necesito saber donde me equivoco
« Respuesta #4 en: 10 de Noviembre de 2011, 18:40:23 »
Bueno te comento con el *hex que me pasastes al presionar "a" y "t" sí me encendia un led u otro(*1), pero no me mandaba los mensajes al hiperterminal. Lo que hice fue coger el codigo del primer post, buscar el cd del libro para las libreriar y recompilé tu codigo y ahora me funciona todo perfectamente.

Te paso el .hex recompilado.

Otra cosa, si montas el circuito convendría poner unas resistencias en la base de esos transistores. Un saludo

EDITO: (*1) para que los led funcionaran con tu hex, tuve que cambiar las lineas del hiperterminal (RXD a RA4) y (TXD a RA3). Solo se me ocurre que el fallo de todo esto esté en que hayas cambiado algo de tus librerias. Un saludo.
« Última modificación: 10 de Noviembre de 2011, 18:51:57 por tannke »

Desconectado cagalaberza

  • PIC10
  • *
  • Mensajes: 4
Re: Estoy empezando y necesito saber donde me equivoco
« Respuesta #5 en: 11 de Noviembre de 2011, 08:26:29 »
Pues no sé que puede pasar. Uso las librerias del libro (las que estan colgadas en esta web ) pero a mí no me funcionaba, ni cambiando las lineas rxd por txd, en cambio el tuyo funciona perfectamente. MUCHAS GRACIAS.
 Te pido otro favor mas... ¿Podrías explicarme como lo hicieste exactamente, para yo seguir el proyecto? ¿solo cambiaste las librerias en el mplab? En caso positivo ¿ por cuales?. ¿A cambiado en algo el codigo asm que hice?
  EDITO: En la versión del circuito donde está un relé de doble bobina y latching, en lugar de los leds,  en la base de los transistores hay unas resistencias de 2k2.
« Última modificación: 11 de Noviembre de 2011, 10:49:14 por cagalaberza »

Desconectado tannke

  • PIC16
  • ***
  • Mensajes: 176
Re: Estoy empezando y necesito saber donde me equivoco
« Respuesta #6 en: 11 de Noviembre de 2011, 12:28:49 »
poca cosa, cambié el config que de tu manera me daba error:
Código: [Seleccionar]
LIST    P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CONFIG, _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

me imagino que es por la versión de mplab, yo tengo la 8.7 y recuerdo que cuando empecé con asm, lo declaraba como tú y lo único que he cambiado es la versión de mplab.
Y lo siguiente solo las librerias, yo utilicé las que me vinieron en el cd del libro (3ª edición) y viendo por encima las que tú usas veo que cambian un poquitín. Te las dejo aquí.

Un saludo

Desconectado cagalaberza

  • PIC10
  • *
  • Mensajes: 4
Re: Estoy empezando y necesito saber donde me equivoco
« Respuesta #7 en: 13 de Noviembre de 2011, 18:42:10 »
lo 1º perdón por tardar en contestar, pero he estado el fin de semana fuera.
 Las pruebas que he hecho son las siguientes:
 Usaba un Mplab viejo que tenía por aquí almacenado, el 5.0, así que actualicé a 8.10 y lo 1º que me pidió es que cambiase la posición de la linea 1 (como bien habias dicho). Hecho el cambio compilé y el resultado final seguía sin funcionar. El 2º paso a sido cambiar las librerias por las que tu posteaste y ¡Bingo!, funcionando , es mas es exactamente el mismo *.hex que tu posteaste.
 Muchas gracias, y me buscaré el resto de las librerias que me puedan hacer falta en otro lado
« Última modificación: 13 de Noviembre de 2011, 18:44:59 por cagalaberza »