Autor Tema: Leer pin de salida PIC10F322  (Leído 3153 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ericksm

  • PIC10
  • *
  • Mensajes: 19
Leer pin de salida PIC10F322
« en: 02 de Agosto de 2017, 21:47:43 »
Hola,
Se puede hacer esto?
El compilador es el xc8 1.3v
El pin RA1 es seteado como salida

uint8_t estado_anterior = 0;

...
estado_anterior = PORTAbits.RA1;
...

esta bien o se pueden tener lecturas erradas?, al PIC se le hace dormir por una hora luego al despertar lee el estado del pin RA1.
El estado del pin se setea segun ciertas condiciones y este se mantiene incluso cuando duerme el PIC

Gracias de antemano.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Leer pin de salida PIC10F322
« Respuesta #1 en: 02 de Agosto de 2017, 21:52:47 »
Si, Y estarias leyendo el valor de salida que posee el pin. Es decir el valor que tenes EN EL PIN y no lo que lo pusiste. ( bien recalcado esa parte ). Si se mantiene el valor entonces deberias tener lo mismo. Cualquier cosa doy un ejemplo para que te des cuenta a que me refiero de con "el pin"

Hago esta diferencia porque en los PIC18 tenes el registro LATx, y podes leer el valor en el pin con PORTx o el valor que vos seteaste de salida con el registro LATx.
Pero en esos PIC es todo 1 solo. Asi que lees el PORTx para saber en que estado se encuentra. Lo que si y eso queda a averiguar es si las salidas pierden o mantienen su estado cuando lo pones a SLEEP, ya que nunca maneje ese PIC, en otros PICs tenes distintas formas de ponerlo a SLEEP y algunos incluyen esa opcion de dejar las salidas activas y otros modos no.

Desconectado ericksm

  • PIC10
  • *
  • Mensajes: 19
Re:Leer pin de salida PIC10F322
« Respuesta #2 en: 02 de Agosto de 2017, 21:55:09 »
Gracias por la respuesta pero los pic10f322 tambien tienen el registro LAT.
Para lecturas utilizo el PORT y para escribir el LAT.


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Leer pin de salida PIC10F322
« Respuesta #3 en: 02 de Agosto de 2017, 22:08:44 »
Crei que era algo de los PIC18F en adelante, pero ultimamente vi los PIC16F con las mismas caracteristicas, parece que buscan incorporarlos a la mayoria

Entonces:

Si lees el LATx leerias el valor que deberia tener el pin. Es decir si vos pusiste tu salida a 1, el bit del LAT deberia estar a 1. Esto no quiere decir que el voltaje en el PIN pueda ser considerado un 1.

En cambio el PORTx lees el valor actual del PIN y no del valor que pusiste en la salida.

Un ejemplo para que te guies a que me refiero seria: pensa que tenes una gran capacidad conectada en el pin RA0, vos pones el LATA0 a 1 de esa forma el pin deberia ir a VCC, pero como hay una gran capacidad el voltaje real en el pin va a ir creciendo lentamente. Suponete que en ese momento lees el PORTA0, y dependiendo de donde este la tension puede ser que tengas un 0 o un 1. Mientras que la salida esta a 1 por mas que la tension en el pin no llego a un valor alto.

Y vuelvo a repetir el PORTx te da la lectura lo que hay en el pin fisico.
Si lees el LATx vas a leer el valor de lo que pusiste sobre esa salida.

Por ende, si quisiera saber si yo antes habia puesto el pin en 1 o en 0, yo leeria el LATx.

PD: Espero no haberte complicado mas las cosas.

Desconectado ericksm

  • PIC10
  • *
  • Mensajes: 19
Re:Leer pin de salida PIC10F322
« Respuesta #4 en: 03 de Agosto de 2017, 01:16:27 »
Gracias por la explicacion , lo lei un par de veces para entenderlo..
pero no tengo una gran capacidad en el pin, solo un control por opto (moc3022) con su triac.

Como mencione, hago lecturas luego de una hora que el PIC estuvo dormido, para ese tiempo los niveles de tensión para los registros LAT y PORT deben ser estables por lo que debería ser lo mismo leer cualquiera.

Por otro lado:
Es lo mismo

estado_anterior = PORTAbits.RA1

que esto

if (PORTAbits.RA1 == 1)
estado_anterior = 1;
else
estado_anterior = 0;

o hay alguna diferencia?
Gracias.


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Leer pin de salida PIC10F322
« Respuesta #5 en: 03 de Agosto de 2017, 16:54:22 »
Ninguna diferencia entre ambos codigos. Ya que PORTAbits.RA1 devuelve 0 o 1.

Y el tema esta si es necesario realmente tener la variable "estado_anterior", ya que tendrias algo asi:

Código: C
  1. if (PORTAbits.RA1 == 1)
  2. estado_anterior = 1;
  3. else
  4. estado_anterior = 0;
  5.  
  6. if(estado_anterior==0)
  7. {
  8.    //hago algo
  9. }
  10. else
  11. {
  12.   //hago otra cosa
  13. }

Mientras que podrias omitir todo y basarte directamente en el pin

Código: C
  1. if (PORTAbits.RA1 == 0)
  2. {
  3.     //hago algo
  4. }
  5. else
  6. {
  7.    //hago otra cosa
  8. }

Todo depende de como sea tu programa

Desconectado ericksm

  • PIC10
  • *
  • Mensajes: 19
Re:Leer pin de salida PIC10F322
« Respuesta #6 en: 06 de Agosto de 2017, 14:23:15 »
Gracias por la respuesta.
Utilizo el estado anterior para leer el estado anterior y ejecutar acciones .

Según entiendo el LATA es como una etiqueta que almacena la configuración de salida del puerto y el PORTA es el puerto físico, estoy entendiendo bien?
Entonces el preferible leer LATA ya que leer PORTA puede traer errores en la lectura del puerto físico aun asi el pin este es un estado (H o L) estable.

Gracias.
« Última modificación: 06 de Agosto de 2017, 14:26:00 por ericksm »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Leer pin de salida PIC10F322
« Respuesta #7 en: 06 de Agosto de 2017, 14:55:13 »
Citar
Según entiendo el LATA es como una etiqueta que almacena la configuración de salida del puerto y el PORTA es el puerto físico, estoy entendiendo bien?

Exacto