TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: anna en 11 de Junio de 2006, 07:52:27
-
Hola a todos, quería hacer una consulta porque seguro que alguien podrá resolverlo!!!
Estoy realizando un robot, el micro es el 16F873 y lo programo con el PicStartPlus. En principio todo bien, el programa se carga en el pic i cuando lo pruebo parece que tarda en ejecutar las rutinas. Por ejemplo, algo muy senzillo.
estat_baix BTFSC PORTA,0 ;entrada
GOTO estat_alt
bcf PORTA,5
bsf PORTA,4
GOTO estat_baix
estat_alt bsf PORTA,5
bcf PORTA,4
btfss PORTA,0
GOTO estat_baix
GOTO estat_alt
El programa que pruebo es muy senzillo pues bien, lo que me ocurre es que cuando activo a 1 la entrada, me tarda unos 5 segundos a activar la otra salida, y viceversa!!!!
Muchas gràcias por vuestra atención!!!!
ANNA
-
Eso es porque el micro no acepta el catalán :mrgreen: (una bromita :) )
Mejor sube todo el programa, si no es muy extenso. El hecho que te haga un delay de 5 segundos es extraño. Puede que se esté reiniciando por watchdog o alguna rutina de interrupciones... o se te esté yendo el puntero a tomar por eeeeesteee...
Súbelo y lo analizamos
-
anna como bien te dijo pibe falta información útil a tu post. Comentanos si has seteado el watchdog al programar el pic y si es así, si has cambiado las opciones del prescaler del mismo o lo has dejado por defecto (1:128). Para que te des una idea, un pic a 4Mhz con un prescaler en 1:128 asignado al WatchDog Timer hará que el pic se resetee cada 3,2 segundos.
Además , algo que veo en tu código es que estas usando el puerto RA4 como salida, para lo cual te pido que te fijes este foro, los consejos sobre utilizar dicho pic como E/S.
Otro punto es que tengas mucho cuidado de usar un puerto como E/S en la forma que tu lo usas, ya que de acuerdo a como sea el circuito exterior pudiera que no te ande por dicha causa.
Si quieres, puedes leer algo del tema en este link que si bien hablamos en lo puntual sobre los PIC18F (y sus registros LATx) en realidad ahí explico la causa de porqué existen esos registros.
http://www.todopic.com.ar/foros/index.php?topic=11553.0 (http://www.todopic.com.ar/foros/index.php?topic=11553.0)
El efecto es tanto mayor dependiendo de la frecuencia de clock que uses y de la impedancia que tenga lo que le hayas conectado al pin del pic.
Saludos
-
Hola otra vez, he seguido haciendo pruebas con el PIC y ahora he probado otras entradas y otro puerto de salida pero me hace lo mismo. Es decir, cuando alimento a 5V la entrada RA1 se activa al momento la salida RB3, pero cuando quito los 5V de la entrada RA1, me tarda 5 segundos en activar la salida RB2.
Os escribo todo el código del programa a ver si alguien sabe que puede pasar.
list p=16f873 ; list directive to define processor
#include <p16f873.inc> ; processor specific variable definitions
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _HS_OSC & _WRT_ENABLE_ON & _LVP_OFF & _CPD_OFF
org 0x00
goto start ;Vector de reset
org 0x06
MAIN CODE
start
BCF STATUS, RP0
BCF STATUS, RP1
CLRF PORTA
CLRF PORTB
BSF STATUS,RP0
MOVLW 0x06
MOVWF ADCON1
MOVLW 0xFF
MOVWF TRISA
MOVLW 0x00
MOVWF TRISB
BCF STATUS,RP0
estatbaix BTFSC PORTA,1
GOTO estatalt
BCF PORTB,3
BSF PORTB,2
GOTO estatbaix
estatalt BSF PORTB,3
BCF PORTB,2
BTFSS PORTA,1
GOTO estatbaix
GOTO estatalt
END
Muchas gracias!!!
-
Estoy viendo que tienes configurado el modo oscilador de alta velocidad.
¿Qué frecuencia tiene el cristal que usas?
En el soft a simple vista no encontré nada raro.
-
El cristal que utilizo es de 20 MHz, también lo prové con uno de 4 y me hace exactamente lo mismo.........
Me parece un poco raro porque a priori está bién, podría ser el reset?? utilizo el reset manual por la patilla MCLR y en prinicipio está estabilizado, normalmente a 5V!!! No lo entiendo....
Podría ser el programador?? el PIC START Plus es el que utilizo y el software es el MPLAB 7.2...............
Gràcias por vuestra ayuda!!!!
SALUDOS
-
Hola anna un saludo, una sugerencia pq no le quitas la parte en negritas a esta parte de tu programa y pruebas
estatbaix BSF PORTB,3
BCF PORTB,2
BTFSS PORTA,1
GOTO estatbaix
estatalt BSF PORTB,3
BCF PORTB,2
GOTO estatalt
igual y sale, pero esta algo raro que no te funcione pues asimple vista no se le ve ningun error.
Una pregunta adicional ¿Has simulado tu programa con el MPLAB SIM?
Saludos LabPIC
-
El programa esta OK.
Primero, sospecharia de uno mismo: cuando dices: "le quito los 5v" supongo que te estaras referiendo a que conectas RA1 a 0V y no que simplemente dejas el pin flotante.....
Segundo, sospecharia del cristal, proba con otro de 20mhz(si el circuito esta montado sobre un protoboard el circuito, ponele capacitores de 22pf-27pf conectados a GND por ejemplo).Si lo probas en 4mhz asegurate de que la configuracion este correctamente seteada: pone _XT_OSC en lugar de _HS_OSC.
Tercero: al circuito del pulsador del reset, por ahora, eliminalo y coloca directo una resistencia de 1k a 5v conectado al pin MCLR.
Mucho mas misterio que eso no puede haber. Asegurate tambien de conectar TODOS lo Vss y Vdd que posea el PIC, y no tan solo uno de cada uno(Maunix me corrigio en otro post este latente error).
Por ultimo, proba con otro PIC.
Exitos!
-
Pues tienes razón, les quito los 5V y no lo pongo a masa porque estoy haciendo pruebas y somooooooooos novatassssssssss!!!!!!!!!!!!!!!!!! Como tendría que hacerlo???? SEría así?
5V + final de carrera + Resistencia a la entrada , todo en serie?? o bien sería de otra manera, no lo sé!!!!
Gràcias por tu ayuda!!!!!!!!!!!!!!!!!!!!!!
-
ese MAIN CODE? métele unas ; para que sea un comentario porque ese CODE parece sospechoso . Puede que el MPLAB te lo tome como una instrucción.
otra cosa: ponle una pausa entre una rutina (estado alto- estado bajo ) para que puedas ver que hace el programa
además para contrarrestar los rebotes que ocasiona el pulsador sino puede rebotar tantas veces que vaya a saber uno donde cae ... puede caer en 0 o en 1 dependiendo en las miles de veces que haya rebotado el contacto.
Además ponle una resistencia entre PORTA 1 y +5v de 1k, y el pulsador entre PORTA 1 y masa.
Un consejo: Como novata intenta no usar el puerto A . Prueba por puerto B que es mas facil de configurar , incluso no necesitarás las resistencias a +5v por cada pin ya que las trae incorporada.
Sins ara
-
Tienes razon pibe, el MPLAB toma como instruccion al MAIN CODE, incluso muestra error al compilarlo, anna asegurate de ponerle ; para que no sea haya problemas.
Con respecto al rebote que menciona pibe, generalmente el retardo que se da al momento de puchar el boton, es de aprox 20 ms y se aconseja ponerlo cuando a un solo boton se le asignan mas de una tarea.
Saludos LabPIC
-
Tienes razon pibe, el MPLAB toma como instruccion al MAIN CODE, incluso muestra error al compilarlo, anna asegurate de ponerle ; para que no sea haya problemas.
main code --> no es una instrucción ni tampoco el mpasm incurre en un error. Es que aquí parece que anna ha mezclado las cosas.
Es una directiva del ensamblador.
La directiva code se usa para la codificación de código reubicable ( o relotacable code) donde a la izquierda se le indica en que sección de memoria se linkeará dicho código.
Tal vez sea algo complicado explicarlo de esa forma, pero no se me ocurre otra manera.
En el archivo linker, uno define varias secciones de memoria de programa y de memoria ram. Luego en el código uno en vez de usar 'org' usa la directiva code acompañada anteriormente de la sección donde estará ubicada el código.
Por ejemplo, podemos definir una seccion1 y una seccion2 . La seccion1 podría ser la RomBank0 y la seccion2 la RomBank1.
Al hacer
seccion1 code
le indicamos al ensamblador que el código a continuación deberá ubicarse en la sección 1.
Volviendo al código de anna eso debiera dar error de movida, salvo que hagan MAIN_CODE y listo, el ensamblador lo tomaría como un label y compilaría sin problemas.
Saludos! :) :)
-
Pues tienes razón, les quito los 5V y no lo pongo a masa porque estoy haciendo pruebas y somooooooooos novatassssssssss!!!!!!!!!!!!!!!!!! Como tendría que hacerlo???? SEría así?
5V + final de carrera + Resistencia a la entrada , todo en serie?? o bien sería de otra manera, no lo sé!!!!
Gràcias por tu ayuda!!!!!!!!!!!!!!!!!!!!!!
¿Puedes postear un esquema de esta conexión?