TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: dakman en 04 de Diciembre de 2007, 11:28:37
-
hola a todos, acabo de terminar de hacer un proyecto y lo simulo con el isis y funciona perfectamente pero lo he costruido y no me funciona.
se trata de un secuenciador hos pongo el *.ASM
;------------------------------------------------------------
; Código assembler generado por Niple V5.2.0
; Proyecto: taxis
; Autor:
; Fecha: 22/11/2007
; PIC: 16F84A
; Velocidad de reloj: 4 Mhz
; Descripcion:
;------------------------------------------------------------
LIST P=PIC16F84A
_XT_OSC equ 0x3FFD
_WDT_OFF equ 0x3FFB
_PWRTE_ON equ 0x3FF7
_CP_OFF equ 0x3FFF
__config _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
;------------------------------------------------------------
; Declaración de Registros
;------------------------------------------------------------
w equ 0x0000
status equ 0x0003
portb equ 0x0006
pclath equ 0x000a
_np_tiempo equ 0x000e
_np_tiempo1 equ 0x0010
_np_tiempo2 equ 0x0011
_np_tiempo3 equ 0x0012
trisb equ 0x0086
;------------------------------------------------------------
; Declaración de Bits
;------------------------------------------------------------
c equ 0 ;carry / borrow bit
rb0_int equ 0 ;bit 0 del puerto b
rb1 equ 1 ;bit 1 del puerto b
rb2 equ 2 ;bit 2 delpuerto b
rb3 equ 3 ;bit 3 del puerto b
rb4 equ 4 ;bit 4 del puerto b
rp0 equ 5 ;registrer bank select bit
rp1 equ 6 ;registrer bank select bit
z equ 2 ;bit cero
;------------------------------------------------------------
; Inicio
;------------------------------------------------------------
reset org 0
goto paso2
;------------------------------------------------------------
; programa principal
;------------------------------------------------------------
paso2
movlw b'00000001' ;configurar el puerto b como ssssssse
bsf status,rp0 ;cambiar a banco 1
movwf trisb
bcf status,rp0 ;cambiar a banco 0
bcf portb,rb1
bcf portb,rb2
bcf portb,rb3
bcf portb,rb4
btfsc portb,rb0_int ;si el bit rb0_int = 1
goto paso2 ;cierra el ciclo
bsf portb,rb1 ;rele1 on
movlw .25 ;temporizador 250 mse
call tiempo_100_1000_mc
bcf portb,rb1 ;rele 1 off
movlw .25 ;temporizador 250 mse
call tiempo_100_1000_mc
bsf portb,rb2 ;rele1 on
movlw .25 ;temporizador 250 mse
call tiempo_100_1000_mc
bcf portb,rb2 ;rele 1 off
movlw .25 ;temporizador 250 mse
call tiempo_100_1000_mc
bsf portb,rb3 ;rele1 on
movlw .25 ;temporizador 250 mse
call tiempo_100_1000_mc
bcf portb,rb3 ;rele 1 off
movlw .25 ;temporizador 250 mse
call tiempo_100_1000_mc
bsf portb,rb4 ;rele1 on
movlw .25 ;temporizador 250 mse
call tiempo_100_1000_mc
bcf portb,rb4 ;rele 1 off
movlw .10 ;temporizador 10 seg
call tiempo_1_255_mega_c
goto paso2 ;cierra el ciclo
;------------------------------------------------------------
; Declaración de Subrutinas
;------------------------------------------------------------
tiempo_100_1000_mc
movwf _np_tiempo
goto tiempo_100_1000_mc_1
tiempo_100_1000_mc_bucle2
nop
nop
nop
nop
nop
nop
nop
tiempo_100_1000_mc_1
movlw .22
movwf _np_tiempo1
tiempo_100_1000_mc_bucle1
movlw .150
movwf _np_tiempo2
tiempo_100_1000_mc_bucle
decfsz _np_tiempo2,1
goto tiempo_100_1000_mc_bucle
decfsz _np_tiempo1,1
goto tiempo_100_1000_mc_bucle1
nop
decfsz _np_tiempo,1
goto tiempo_100_1000_mc_bucle2
return
tiempo_1_255_mega_c
movwf _np_tiempo
goto tiempo_1_255_mega_c_1
tiempo_1_255_mega_c_bucle2
nop
nop
nop
nop
nop
nop
nop
tiempo_1_255_mega_c_1
movlw .10
movwf _np_tiempo1
tiempo_1_255_mega_c_bucle1
nop
nop
movlw .99
movwf _np_tiempo2
tiempo_1_255_mega_c_bucle0
nop
nop
nop
movlw .200
movwf _np_tiempo3
tiempo_1_255_mega_c_bucle
nop
nop
decfsz _np_tiempo3,1
goto tiempo_1_255_mega_c_bucle
nop
nop
nop
decfsz _np_tiempo2,1
goto tiempo_1_255_mega_c_bucle0
nop
nop
nop
decfsz _np_tiempo1,1
goto tiempo_1_255_mega_c_bucle1
decfsz _np_tiempo,1
goto tiempo_1_255_mega_c_bucle2
return
End
El practico es tambien muy basico, masa a la pata 5, +5v a la 14
y e resto como el dibujo.
(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=19549.0;attach=5589)
haber si me podeis decir que me pasa :(
saludos y muchas gracias
-
Hola dakman
el word configuration está a 0x3FF1. ¿te fijaste si aparece así en el grabador de pics?
no veo un retardo para el pulsador.
-
perdona pero es que no controlo mucho, he depurado un poco (editando el post anterior) el codigo, pero eso tendria que esta bien ya que en el isis la simulacion es perfecta.
-
hay cosas que el isis no simula como la palabra de configuración y uno que otro módulo del pic.
-
Hola dakman
el word configuration está a 0x3FF1. ¿te fijaste si aparece así en el grabador de pics?
no veo un retardo para el pulsador.
donde puedo mirar eso? estoy utilizando el ICPROG para grabar
-
si, mira en el icprog donde lo carga, debe coincidir con __config además revisa lo del retardo en el pulsador.
-
en el ICPROG me sale esto cuando cargo el *.hex
; Generated by WinDis84, (c) Nigel Goodwin 1998.
LIST P=16F84, F=INHX8M
include "P16FXX.inc"
ORG 0x0000
GOTO Label_0001
Label_0001 MOVLW 0x01
BSF STATUS , RP0
MOVWF TRISB
BCF STATUS , RP0
BCF PORTB , 01
BCF PORTB , 02
BCF PORTB , 03
BCF PORTB , 04
BTFSC PORTB , 00
GOTO Label_0001
BSF PORTB , 01
MOVLW 0x19
CALL Label_0002
BCF PORTB , 01
MOVLW 0x19
CALL Label_0002
BSF PORTB , 02
MOVLW 0x19
CALL Label_0002
BCF PORTB , 02
MOVLW 0x19
CALL Label_0002
BSF PORTB , 03
MOVLW 0x19
CALL Label_0002
BCF PORTB , 03
MOVLW 0x19
CALL Label_0002
BSF PORTB , 04
MOVLW 0x19
CALL Label_0002
BCF PORTB , 04
MOVLW 0x0A
CALL Label_0003
GOTO Label_0001
Label_0002 MOVWF 0x0E
GOTO Label_0004
Label_0007 NOP
NOP
NOP
NOP
NOP
NOP
NOP
Label_0004 MOVLW 0x16
MOVWF 0x10
Label_0006 MOVLW 0x96
MOVWF 0x11
Label_0005 DECFSZ 0x11 , f
GOTO Label_0005
DECFSZ 0x10 , f
GOTO Label_0006
NOP
DECFSZ 0x0E , f
GOTO Label_0007
RETURN
Label_0003 MOVWF 0x0E
GOTO Label_0008
Label_000C NOP
NOP
NOP
NOP
NOP
NOP
NOP
Label_0008 MOVLW 0x0A
MOVWF 0x10
Label_000B NOP
NOP
MOVLW 0x63
MOVWF 0x11
Label_000A NOP
NOP
NOP
MOVLW 0xC8
MOVWF 0x12
Label_0009 NOP
NOP
DECFSZ 0x12 , f
GOTO Label_0009
NOP
NOP
NOP
DECFSZ 0x11 , f
GOTO Label_000A
NOP
NOP
NOP
DECFSZ 0x10 , f
GOTO Label_000B
DECFSZ 0x0E , f
GOTO Label_000C
RETURN
ORG 0x2000
DATA 0x0F
DATA 0x0F
DATA 0x0F
DATA 0x0F
ORG 0x2007
DATA 0x11
ORG 0x2100
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
DATA 0xFF
END
No veo con __config por ninguna parte :? lo del retardo en el pulsador queria que fuese automatico(sin retardo).
-
El practico es tambien muy basico, masa a la pata 5, +5v a la 14
y e resto como el dibujo.
Creo que falta agregar:
Resistencia de MCLR: Puede ser de 10K entre 5V y la pata 4 del PIC.
Oscilador: El mas común es un cristal de 4MHz entre las patas 15 y 16, con condensadores de 22pF a tierra.
Ten en cuenta que la simulación es solo eso "simulación", el hecho de que un código funcione en proteus no es garantía que vaya a funcionar en el montaje.
saludos.
-
ahora ago lo de la pata 4. Pensaba que tenia oscilador interno
-
El PIC 16F84 no tiene oscilador interno, además en la palabra de configuración estas indicando oscilador de cristal. El pin de MCLR siempre debe conectarse a +5V a través de una resistencia (ver el datasheet), algunos PIC tienen la opción de deshabilitar el MCRL y usar ese pin como entrada digital pero ese no es el caso del PIC16F84.
Saludos,
Diego.
-
Ademas debes de tener en cuenta que el watchdog esté de sabilitado. en caso de estar habilitado recuerda en refrescarlo para que no llegue nunca a 0 y el micro se quede dormidito. :mrgreen:
fermin
-
muchas gracias ya me arranca :-/, (no me funciona exactamente como en el isis pero me rompere un poco los cuernos antes de molestaros mas ;) )
-
Una cuestion, y espero no romper el hilo del tema. ¿ Para que sirve mclr ? thanks.
-
es master clear... es el reset del pic... debe estar a nivel alto o el pic está en reset.
-
Es decir que el pin del MCLR debe estar a 1 y sino el pic se resetea no ? thanks.
-
es que el pic no va a trabajar si no ve un "1" lógico en el pin mclr.
-
Hola: la patita MCLR es el master clear reset
osea un pulso 0 resetea el micro
Lo lógico sería pensar que si le aplicas un 0 en esa patita el micro funciona normal y si le aplicas un 1 el micro se resetea,
pero no es así,
ahora si te fijas en el dibujo del micro en la hoja de datos, la pata 4 donde dice mclr tiene dibujada una rayita encima de las letras,
esto en lógica digital significa que estás negando algo, en este caso te está indicando que esta entrada funciona con lógica negada,
osea un 1 es funcionamiento normal y un cero es reset.
espero te sirva, saludos!
-
La verdad es que si me fije en la raya pero no sabia que significara eso, weno se que la raya encima de algo lo nega pero no sabia que en el datasheet le diesen ese significado, thanks ahora esta todo mas claro.
-
Ademas debes de tener en cuenta que el watchdog esté de sabilitado. en caso de estar habilitado recuerda en refrescarlo para que no llegue nunca a 0 y el micro se quede dormidito. :mrgreen:
fermin
Aquí hay algo mal, cuando se desborda el WTD, el micro se resetea, no entra en modo sleep.