TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: tecno1814 en 06 de Noviembre de 2017, 01:31:18

Título: Leer byte de un puerto entero
Publicado por: tecno1814 en 06 de Noviembre de 2017, 01:31:18
Bien, para comenzar os explico lo que quiero hacer:
Pienso hacer un reloj de cuenta regresiva, un pic 16f877a como "maestro" y un 16f84a como "esclavo". El "maestro" tendrá 2 displays de 7 segmentos y un teclado de 12 botones(10 de numeros y 2 de acciones(reset y play/stop)), este es el que va a tener cerca el usuario y le va a poner los minutos que quiera a la cuenta regresiva, el "maestro" le va a enviar los datos al "esclavo" que está a unos 4 metros de distancia usando 5 pines para transmitir los minutos y 2 pines para acciones que es la parte sencilla; la parte que se me complica es a la hora de leer los bits que le envió al esclavo... no quiero pasarme la vida haciendo if's en el codigo asi que quiero leer el byte que se forma y usarlo directamente como dato, ya que el esclavo se va a encargar de la cuenta regresiva y de mostrarlo en 4 display de 7 segmentos multiplexados.

mi super problema es el de leer el byte del puerto (quizas del puerto A por tener justo los pines que necesito) y usarlo como variable en mi cuenta regresiva.

De antemano muchas gracias por su atención.
Título: Re:Leer byte de un puerto entero
Publicado por: KILLERJC en 06 de Noviembre de 2017, 08:21:23
¿Y por que no usar uno de los modulos que esta presente en ambos y solucionarte la vida?

Por ejemplo SPI, UART, I2C
Título: Re:Leer byte de un puerto entero
Publicado por: nico en 06 de Noviembre de 2017, 11:32:54
Buenas, independientemente de que como dice Killer puede ser mas fácil, en que lenguaje programas?

Leerlo en CCS es de una manera, en ASM de otra, en fín...

Salutes.
Título: Re:Leer byte de un puerto entero
Publicado por: KILLERJC en 06 de Noviembre de 2017, 12:22:53
Es que leer los puertos de esa manera requiere al menos un uso de una señal de sincronismo, controlar tiempos, etc. Por eso evité seguir con el tema que el queria.

Mientras que con usar un módulo es poner el dato y olvidarse, además de usar menos pines.
Título: Re:Leer byte de un puerto entero
Publicado por: fuente en 06 de Noviembre de 2017, 13:37:45
El problema es que el 16f84a viene bastante "pelado" en cuanto a módulos, y no tiene ni SPI ni UART ni I2C.
¿Por qué el 16f84a? está bastante desfasado ya y los hay más baratos y con más módulos y memoria.
Título: Re:Leer byte de un puerto entero
Publicado por: KILLERJC en 06 de Noviembre de 2017, 14:05:02
No me habia fijado en que PICs usaba, pero si, no tiene sentido ya a estas alturas usar un PIC16F84A cuando su coste es mucho mayor que otros con mas prestaciones.
Título: Re:Leer byte de un puerto entero
Publicado por: tecno1814 en 07 de Noviembre de 2017, 15:44:40
mis razones para usar esos pics es porque son los que tengo a la mano, programo en ccs.

habia visto por ahi la función "input" y sus respectivas variantes... como podria usarlas a mi proyecto?
además, queria usar i2c pero mi distancia es muy larga(4 mts) y uart no me apetece usarlo(y menos que el f84 no lo tiene)

De antemano gracias por tomarse el tiempo en responder.
Título: Re:Leer byte de un puerto entero
Publicado por: KILLERJC en 07 de Noviembre de 2017, 22:08:18
Como no queres estar preguntando con un if continuamente entonces te queda esta solucion:

Primero implementar un pin para "sincronizar" (cuando tomar las entradas).
El unico pin que se activa por flanco es RB0, asi que deberia ser ese.

Usar FAST_IO asi no te cambia el estado del puerto que uses para leer los datos ( al usar input o output ).
Setear los tris con set_tris_x , donde x es el puerto, sea a o b ( ej. set_tris_a(0x15) ) asi lo seleccionas como entrada o salida
Activar la interrupcion por RB0, creo que se llama EXT.
En la interrupcion leer los datos con input_a input_b, segun el puerto que desees usar.
Guardarlo en donde mas desees ( variable que te guste, array, etc).
Fin.

Luego en el programa principal, leeras esa variable.