TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: poshijo en 22 de Mayo de 2008, 06:25:56
-
Hola a todos.
Como siempre , con problemas a la hora de llevar a cabo mis proyectillos.
Os comento:
Estoy realizando un secuencial de 8 canales que he sacado de la red , pero lo quiero modificar porque necesito una salida más.
El codigo original usa el puerto A como entrada y el puerto B como salida.
En el puerto B van los leds que hacen diferentes secuencias en base a los datos recogidos del puerto A en donde tengo puesto un Dip de 4 interruptores, ocupando desde el RA0 al RA3 quedando libre el RA4.
Es precisamente el RA4 el que quiero modificar , dejandolo como salida pero no consigo hacerlo.
Resumiendo , en vez de que todo el puerto A sea entrada, modificarlo para dejar unicamente desde el RA0 al RA3 como entrada y el RA4 como salida.
He hecho modificaciones de todas clases siguiendo diferentes tutoriales para configurar los puertos pero no hay manera humana de hacerlo, no me funciona ni a patadas.
No consigo encender el led del RA4
Os pongo parte del codigo en donde se realizan tales funciones.
;=================== Mapa de Memoria ======================
STATUS equ 0x03 ; Haciendo asignaciones
TRISA equ 0x05
TRISB equ 0x06
PORTA equ 0x05
PORTB equ 0x06
llaves equ 0x0C ; Almacenara el STATUS de las llaves
PDel0 equ 0x0D ; Variable para Demora
PDel1 equ 0x0E ; Variable para Demora2
PDel2 equ 0x0F ; Variable para Demora3
;============== Configuración de puertos ==================
ORG 0x0000
GOTO inicio
ORG 0x0005
inicio BSF STATUS,5 ; Cambio al banco 1 del pic
MOVLW 0x1f
MOVWF TRISA ; Asigna al puerto A como entrada
MOVLW 0x00
MOVWF TRISB ; y Al puerto B como salida
BCF STATUS,5 ; Regresa al banco 0
CLRF PORTA ; Limpia el puerto A
CLRF PORTB ; Limpia el puerto B
swich MOVF PORTA,0 ; Carga w con el puerto A
ANDLW 0x0F ; Retiene los 4 bits de interes (las llaves)
MOVWF llaves ; y los guarda en llaves
XORLW 0x00 ; Verifica si es el primer efecto de la tabla
BTFSC STATUS,2 ; si es así
CALL efect1 ; lo llama y lo ejecuta
MOVF llaves,0 ; sino, carga llaves en w
XORLW 0x01 ; y verifica si es el segundo efecto
BTFSC STATUS,2 ; si es así
CALL efect2 ; lo llama y lo ejecuta,etc
MOVF llaves,0
XORLW 0x02
BTFSC STATUS,2
CALL efect3
MOVF llaves,0
XORLW 0x03
BTFSC STATUS,2
CALL efect4
MOVF llaves,0
XORLW 0x04
BTFSC STATUS,2
CALL efect5
MOVF llaves,0
XORLW 0x05
BTFSC STATUS,2
CALL efect6
MOVF llaves,0
XORLW 0x06
BTFSC STATUS,2
CALL efect7
MOVF llaves,0
XORLW 0x07
BTFSC STATUS,2
CALL efect8
MOVF llaves,0
XORLW 0x08
BTFSC STATUS,2
CALL efect9
MOVF llaves,0
XORLW 0x09
BTFSC STATUS,2
CALL efect10
MOVF llaves,0
XORLW 0x0A
BTFSC STATUS,2
CALL efect11
MOVF llaves,0
XORLW 0x0B
BTFSC STATUS,2
CALL efect12
MOVF llaves,0
XORLW 0x0C
BTFSC STATUS,2
CALL efect13
MOVF llaves,0
XORLW 0x0D
BTFSC STATUS,2
CALL efect14
MOVF llaves,0
XORLW 0x0E
BTFSC STATUS,2
CALL efect15
MOVF llaves,0
XORLW 0x0F
BTFSC STATUS,2
CALL efect16
GOTO swich ; Comienza a revisar de nuevo
;======================== Primer efecto=========================
efect1 CLRF PORTB ; Limpia el puerto B
BSF PORTB,0 ; Enciende
CALL Demora1 ; 1 segundo
BCF PORTB,0 ; Apaga
CALL Demora1 ; 1 segundo
BSF PORTB,0 ; Enciende
CALL Demora1 ; 1 segundo
BCF PORTB,0 ; Apaga
CALL Demora1 ; 1 segundo
CALL UNO
CALL APAGA
CALL FIN
;------------------------------------------------------------- y a partir de aqui los demas efectos....
GRACIAS DE ANTEMANO A TODOS, como veis intento seguir aprendiendo, cosa que me cuesta horrores a mi edad.
Saludos
-
Jeje, veo que tú también has topado con el famoso RA4.
Lee esto, y verás la luz.
http://www.todopic.com.ar/foros/index.php?topic=8121.40
y también esto:
El PORTA de los PIC's y una de sus particularidades (http://picmania.garcia-cuervo.com/Conceptos.php#PORTA)
-
Gracias por la respuesta tan rapida.
Me estoy leyendo el tocho , pero para mi que no acaba de entender demasiado bien la cosa.
A ver si lo entiendo:
El RA4 va al revés?
O sea cuando es 1 lo que hace es no conducir.
Cuando es 0 lo que hace es conducir MASA (-).
Es correcto lo que digo?
No tengo ni idea de lo que es una resistenci pull-up.
Total que me he quedao compuesto y sin novia, pues nada, me toca volver a rehacer el codigo , desmontar el pic y probar y probar.
Al final daré con la solución.
Se me olvidaba, estoy usando un pic 16f84A y en el RA4 pretendo conectar un circuito musical .
Saludos
-
Ese pin es de colector abierto, lo cual significa que cuando saca un 0 lo hace bien, o sea, pone la señal a tierra.
Pero sin embargo, cuando la salida saca un 1, lo que hace es quedar flotando, y no leerás 5V en el pin.
Para ello, se le pone una resistencia a Vdd que suele llamarse Pullup. Con una de 10K irá bien, aunque ese valor dependerá del consumo que quieras proporcionar al circuito que reciba ese "1".
¿Lo pillas ahora?
-
Correctisimo, ahora si lo he pillao.
Es que ando más perdido que la leche.
Voy a probarlo ahora mismo.
Muchisimas gracias, no sé que haria sin vosotros.
Un saludo.
-
Ya está.
Con lo facil que era y me he tirado dos semanas liado con la patilla asquerosa esta.
Habia apartado dos pic pensando que estaban mal.
De verdad que tiene guasa la jodia patilla.
GRACIAS.
Saludos
Una pregunta más si no os molesta.
Con el pic 16f84 voy a intentar manejar un motorcillo de un belén en breve, y quiero poder regular la velocidad del mismo , digamos que tres velocidades diferentes.
He leido acerca de hacerlo mediante PWM, he comprado un NE555 para probar, pero no sé por donde empezar el código.
Creo que hay algo en un libro sobre pics de la editorial RAMA.
Sabeis donde puedo encontrar algún codigo con el que empezar?
Gracias de nuevo.
-
Si mal no recuerdo el 16f84a no tiene pwm por hardware, en todo caso lo tendrias que implementar por software, uno que si lo tiene es el 16f877a :D.