Entrada RA4 del PIC 16F84 no lee...

AlfredoB

Lanero Reconocido
23 Jun 2006
145
Hola a todos!
Me es de gran agrado haberme registrado en LANeros! Espero que me puedan ayudar y yo también a ustedes, ya que no sé poco. Hoy no lo haré xq no tengo tiempo... :\

Bien, y parto con mi primera pregunta.
Tengo un PIC 16F84 y su entrada RA4 también es para un timer (T0CKI), como sabrán. Ayer estuve haciendo un programa que leía esta entrada, pero no pasaba nada, o sea, el programa se supone que lee pero al meterle un lógico alto a esa pata... simplemente no ocurre nada! Me tinca que el T0CKI me está molestando en esto.
Entonces, qué se hace para que esta pata actúe como si fuera cualquier otra entrada? No quiero usar el T0CKI, no lo necesito. Además no puedo usar otra pata en su reemplazo porque están todas ocupadas y el circuito impreso ya está hecho...

Mi quieren ver lo que estoy haciendo en el programa, lo pongo aqui:
Si me pudieran decir cuál es la falla... sería excelente! Y lo he probado en 2 PICs.

STATUS EQU 0x03 ;Registro de estado (está en la dir. 03)
PORTA EQU 0x05 ;Puerta A
TRISA EQU 0x85 ;Aqui dice cómo va a ser l puerto A
PORTB EQU 0x06 ;Puerta B
TRISB EQU 0x86 ;Aqui dice cómo va a ser l puerto B

ORG 0 ;Vector de Reset
goto INICIO

ORG 5 ;Saltemos el vector de interrución
INICIO:
bsf STATUS, 5 ;Pasar al banco 1
movlw B'00010000' ;Setear el puerto A como salida con entrada en la pata RA4
movwf TRISA
movlw B'01000000'
movwf TRISB ;Setear puerto B como salida con una entrada (RB2)
bcf STATUS, 5 ;Pasar al banco 0

REVISION
btfss PORTA,4
bcf PORTA,0
btfsc PORTA,4
bsf PORTA,0

goto REVISION

END

Saludos!
 
AlfredoB dijo:
Hola a todos!
Me es de gran agrado haberme registrado en LANeros! Espero que me puedan ayudar y yo también a ustedes, ya que no sé poco. Hoy no lo haré xq no tengo tiempo... :\

Bien, y parto con mi primera pregunta.
Tengo un PIC 16F84 y su entrada RA4 también es para un timer (T0CKI), como sabrán. Ayer estuve haciendo un programa que leía esta entrada, pero no pasaba nada, o sea, el programa se supone que lee pero al meterle un lógico alto a esa pata... simplemente no ocurre nada! Me tinca que el T0CKI me está molestando en esto.
Entonces, qué se hace para que esta pata actúe como si fuera cualquier otra entrada? No quiero usar el T0CKI, no lo necesito. Además no puedo usar otra pata en su reemplazo porque están todas ocupadas y el circuito impreso ya está hecho...

Mi quieren ver lo que estoy haciendo en el programa, lo pongo aqui:
Si me pudieran decir cuál es la falla... sería excelente! Y lo he probado en 2 PICs.

STATUS EQU 0x03 ;Registro de estado (está en la dir. 03)
PORTA EQU 0x05 ;Puerta A
TRISA EQU 0x85 ;Aqui dice cómo va a ser l puerto A
PORTB EQU 0x06 ;Puerta B
TRISB EQU 0x86 ;Aqui dice cómo va a ser l puerto B

ORG 0 ;Vector de Reset
goto INICIO

ORG 5 ;Saltemos el vector de interrución
INICIO:
bsf STATUS, 5 ;Pasar al banco 1
movlw B'00010000' ;Setear el puerto A como salida con entrada en la pata RA4
movwf TRISA
movlw B'01000000'
movwf TRISB ;Setear puerto B como salida con una entrada (RB2)
bcf STATUS, 5 ;Pasar al banco 0

REVISION
btfss PORTA,4
bcf PORTA,0
btfsc PORTA,4
bsf PORTA,0

goto REVISION

END

Saludos!

1º Fijate en el datasheet pag 16 el seteo del OPTION_REG, ahi esta como establecer si RA4 es inputt o T0CKIN.
2º No logro entender la logica de tu codigo, que haria la funcion "REVISION" ??
Parece ser un ciclo infinito, que lo unico que hace es escribir en RA0 el dato que esta en RA4, es asi ?

Saludos
 
Parece ser la respuesta!

Hola Luquitas!
Lo que tu me dices parece ser la respuesta perfecta. No he revisado el datasheet todavía, pero seguramente es eso.

Con respecto al programa, es exactamente lo que hace: traspasar un lógico que entra por la RB4 y pasarlo a la RB0. Es para que se entienda mejor, porque si les pusiera el programa que realmente estoy haciendo... sería una lata que me lo revisen, no? jeje. Yapo, y este mismo lo he probado y ocurría lo que decía.
Gracias!
 
AlfredoB dijo:
STATUS EQU 0x03 ;Registro de estado (está en la dir. 03)
PORTA EQU 0x05 ;Puerta A
TRISA EQU 0x85 ;Aqui dice cómo va a ser l puerto A
PORTB EQU 0x06 ;Puerta B
TRISB EQU 0x86 ;Aqui dice cómo va a ser l puerto B

ORG 0 ;Vector de Reset
goto INICIO

ORG 5 ;Saltemos el vector de interrución
INICIO:
bsf STATUS, 5 ;Pasar al banco 1
movlw B'00010000' ;Setear el puerto A como salida con entrada en la pata RA4
movwf TRISA
movlw B'01000000'
movwf TRISB ;Setear puerto B como salida con una entrada (RB2)
bcf STATUS, 5 ;Pasar al banco 0

REVISION
btfss PORTA,4
bcf PORTA,0
btfsc PORTA,4
bsf PORTA,0

goto REVISION

END

Saludos!

Lo que yo veo es que en tu rutina de configuración de puertos estas colocando como entrada en el puerto A el pin RA1 y estas leyendo la RA4 que esta configurada como salida lo que tendrias que cambiar es algo así:

BTFSS PORTA, 1
BCF PORTA, 0

pero si lo que quieres es encender un led en RA0 de colocar así:

BTFSS PORTA, 1
BSF PORTA, 0



Saluds espero que te sea de ayuda!!!
 
Mmm, nop.

Hola cumpare!
Mmmm... nop. Fíjate que puse un B'00010000' en el TRISA ... eso es contado desde la derecha RA0 = 0; RA1 = 0; RA2 = 0; RA3 = 0; RA4 = 1; y el resto 0.
Lo que viste allí creo que era lo que le metí al RB1, pero es el RB y no el RA.
Gracias por tu ayuda!
 
AlfredoB dijo:
STATUS EQU 0x03 ;Registro de estado (está en la dir. 03)
PORTA EQU 0x05 ;Puerta A
TRISA EQU 0x85 ;Aqui dice cómo va a ser l puerto A
PORTB EQU 0x06 ;Puerta B
TRISB EQU 0x86 ;Aqui dice cómo va a ser l puerto B

ORG 0 ;Vector de Reset
goto INICIO

ORG 5 ;Saltemos el vector de interrución
INICIO:
bsf STATUS, 5 ;Pasar al banco 1
RA3
movlw B'00010000' ;Setear el puerto A como salida con entrada en la pata RA4
movwf TRISA
movlw B'01000000'
movwf TRISB ;Setear puerto B como salida con una entrada (RB2)
bcf STATUS, 5 ;Pasar al banco 0

REVISION RA4
btfss PORTA, 4
bcf PORTA,0 RA4
btfsc PORTA, 4
bsf PORTA,0

goto REVISIO

Disculpa tienes razón, pero
Tu mismo te acabas de dar la respuesta allí te resalte el bit que estas configurando como entrada y el bit que esta leyendo como entrada, revisa bien, configuras RA3 como entrada y lees RA4, allí veo el error

Slds.
 
Mmmmmmm, averr... según yo... veo que efectivamente estoy configurando la RA4 como entrada y la estoy leyendo también... mira, si estuviese leyendo la RA3 saldría algo como

btfss PORTA,3

Si te fijas, si leo la RA0 saldría

btfss PORTA,0

Con esto quiero decir, que se parte contando desde 0. Y entonces es 0,1,2,3,4 y en el TRISA el bit menos significativo es el de la derecha... entonces creo que está bien.
Oye, discúlpame si no te estoy entendiendo, no te enojes ;)

Igual veo que hay algo que está al revéz allí: el bsf con el bcf... todo esto será por eso solamente? Ohh noo, me voy a volver loco.
Pero igual sé que la pata RA4 es rara, hay que tratarla de manera especial para que funcione... y, si luquitas me pudiera decir cuál bit del OPTION_REG es, porque hay dos bits que tienen algo que ver con la RA4, pero no entendí muy bien ninguno de los dos...

Muchas gracias!! y Jeancarzamb, plis sigue escribiendo si estoy mal... y no te enojes conmigo, jeje.
Gracias!
 
no me estas entendiendo

en la palabra que le estas introducciendo al TRISA es esta:

b'00010000' ; cierto?

Segun lo que tu mismo me dices contando los bits desde cero tenemos

los bits del registro y la palabra que tu estas introducciendo

RA0 RA1 RA2 RA3 RA4 RA5 RA6 RA7
--0-----0------0-----1-----0-----0------0-----0

como te puedes dar cuenta estas configurando RA3 como entrada y estas leyendo RA4 que es salida, me entiendes???

Sino busca la pagina 21 o capitulo 5 de datasheet del PIC 16F84 y veras lo que te digo, lo que te dice luquitas es para activar el TOCK1 cuando esta esta activada como entrada de otra forma por default esta queda como entrada simple.

Slds...
 
No o compadre, entoendo porqué lo dices pero estás al revéz. Y según Datasheet también estás al revéz:

Se cuenta desde la derecha hacia la izquierda, porque el bit de la derecha es el menos significativo. Es así:

RA7 RA6 RA5 RA4 RA3 RA2 RA1 RA0
--0-----0------0-----1-----0-----0------0-----0

Aquí está nuestra pequeña discrepancia...

Según lo que dices, y he vuelto a revisar el datasheet, el option_reg parte enterito en 1, por lo tanto, como dices, predeterminadamente el RA4 es input/output común... entonces... por qué no funciona?? ooh,...
Gracias!
 
Jeancarzamb dijo:
no me estas entendiendo

en la palabra que le estas introducciendo al TRISA es esta:

b'00010000' ; cierto?

Segun lo que tu mismo me dices contando los bits desde cero tenemos

los bits del registro y la palabra que tu estas introducciendo

RA0 RA1 RA2 RA3 RA4 RA5 RA6 RA7
--0-----0------0-----1-----0-----0------0-----0

como te puedes dar cuenta estas configurando RA3 como entrada y estas leyendo RA4 que es salida, me entiendes???

Sino busca la pagina 21 o capitulo 5 de datasheet del PIC 16F84 y veras lo que te digo, lo que te dice luquitas es para activar el TOCK1 cuando esta esta activada como entrada de otra forma por default esta queda como entrada simple.

Slds...

Lo siento, que necedades estoy diciendo!!!:D
estaba confundido :rolleyes:

ya probaste cambiando de pinb y colocando RA3 por ejemplo???
 
Hoola! jajaja, no te preocupes. Suele pasar...
Bueno, si, he probado con otros, también del puerto A, y eso es lo que me vuelve más loco: siempre funciona, menos el RA4 ... esa es mi gran duda. Un amigo que también programa también prefiere evitar usar el RA4, el también tiene dudas...

He visto en algunos planos que al usarlo de salida o de entrada hay que ponerle una resistencia .... a tierra creo, les recuerda a algo eso?

Gracias Jeancarzamb!!
 
AlfredoB dijo:
Hoola! jajaja, no te preocupes. Suele pasar...
Bueno, si, he probado con otros, también del puerto A, y eso es lo que me vuelve más loco: siempre funciona, menos el RA4 ... esa es mi gran duda. Un amigo que también programa también prefiere evitar usar el RA4, el también tiene dudas...

He visto en algunos planos que al usarlo de salida o de entrada hay que ponerle una resistencia .... a tierra creo, les recuerda a algo eso?

Gracias Jeancarzamb!!

pic223e.gif

este es el port a del 0 al 3

RA4 o PORTA, 4 es un pin diferente por ser open drain (creo que colector abierto o algo asi) osea que hay que ponerle un pull up externo porque el internamente no lo hace

pic229e.gif

este es el porta 4

De todas maneras no les recomiendo usar el 16F84 o el 16F84A es algo como el opamp741 es algo antiquisimo que sale en todos los libros precisamente porque es antiquisimo y obsoleto

pueden usar otros pics mas modernos como el 16f628 que tiene oscilador interno y PWM y que es el "16f84 de hoy en dia"

PD: en realidad el reemplazo del 16f84 seria el 16f88 que si incluye el ADC pero para los proyectos básicos que no usan ADC es el 16f628

yo creo que el 16f84 lo siguen vendiendo porque sale en los libros, pero si vas a comprar un 16f73 te venden el 16f873 porque el 16f73 " ya no viene"
pues yo les recomiendo un 16f876 para 28 pines y 877 para 40
con esos pueden hacer cualquier proyecto

para principiantes que todavia queman pines pues el 16f628 por el precio

y para los que ya escupen el 16f877 pues pasen a los 18f
 
  • Me gusta
Reacciones: 2 personas
En español:
si van a usar RA4 como una salida lógica le ponen una resitencia de 4.7k ente RA4 y 5v

si van a usar RA4 para prender un led pongan el positivo del led a 5v y el negativo a RA4
para activar el led ponen RA4 a 0 y para apagarlo a 1.

PD: al led ponganle una resistencia en serie !!!!!
 
Holaa! Muchas gracias! eso es algo que estaba a punto de preguntar también.
Ahora, para dar un último apretón de tuercas,
si te entendí bien, que si quiero poner un led, tengo que poner el led con su positivo a +5V, con su negativo hacia el RA4, una resistencia de 4,7K por estar usándolo como salida, y además una resistencia para el led, una de 330 Ohm en serie con ella para que no se me queme con los 5V. Es todo esto? Ok.

Y segunda pregunta para terminar, qué tengo que hacer cuando uso el RA4 como entrada? También tengo que poner alguna resistencia?

Gracias a todos!!
 
Pull up?

AlfredoB dijo:
Holaa! Muchas gracias! eso es algo que estaba a punto de preguntar también.
Ahora, para dar un último apretón de tuercas,
si te entendí bien, que si quiero poner un led, tengo que poner el led con su positivo a +5V, con su negativo hacia el RA4, una resistencia de 4,7K por estar usándolo como salida, y además una resistencia para el led, una de 330 Ohm en serie con ella para que no se me queme con los 5V. Es todo esto? Ok.

Y segunda pregunta para terminar, qué tengo que hacer cuando uso el RA4 como entrada? También tengo que poner alguna resistencia?

Gracias a todos!!

si lo vas a usar para el led no es precisamente una salida lógica, solo lo estas usando para potencia. osea que no es necesario la resistencia de 4.7k.
ahora si en vez de el led lo vas a conectar a compuertas lógicas u otro PIc, etc
ahi si es necesario el pull up de 4.7k
 

Los últimos temas