TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: cagalaberza 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
-
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.
-
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:
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
-
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
-
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.
-
Pues no sé que puede pasar. Uso las librerias del libro (las que estan colgadas en esta web (http://www.todopic.com.ar/asm/rama/) ) 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.
-
poca cosa, cambié el config que de tu manera me daba error:
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
-
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