Autor Tema: Puerto serie bidireccional pic16f84  (Leído 1738 veces)

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

Desconectado mizzard

  • PIC10
  • *
  • Mensajes: 32
Puerto serie bidireccional pic16f84
« en: 26 de Abril de 2009, 20:36:50 »
Hola gente!, os comento.
Mi situacion es la siguiente, me encuentro realizando unas pruebas de comunicación entre un pic18f2550 y una tarjeta goldwafer (pic16f84 + eeprom) en CCS. La eeprom de momento no trabajo con ella.
El caso es que como el 16f84 necesita reloj para trabajar, le genero uno a 1 MHz con el pwm del 2550 y me queda una linea libre para comunicarme con el pic.
Habia pensado utilizar el puerto serie, pero como solo dispongo de una linea y me interesa que la comunicación sea bidireccional, se me ha ocurrido hacer unas pruebas simples haciendo uso de los fprintf y los fgetc (usando un stream con un nombre diciendo que el pin es de entrada y cuando me interesa, indicar q es el otro stream q pone el mismo pin de salida).


Bueno en primer lugar realizo la siguiente prueba:
   Envio una serie de caracteres ascii desde la tarjeta al 2550 (diciendo a la tarjeta q use stream de salida por el pin b7, y mientras tanto el 2550 con fgetc recoge los caracteres y lo almacena en un buffer (con el stream de entrada por el pin c7).
Una vez q tengo recogido en el buffer lo q envia la tarjeta, me quedo con unas posiciones (la 0 y la 1, por ejemplo) y si son las que espero, hago en el 2550 un fprintf (con el stream que pone el pin c7 como salida) mandando otro mensaje.

Esto lo pruebo por el puerto serie del pc (viendo la comunicación en la linea, y funciona). El problema es cuando intento que la tarjeta reciba, por el mismo metodo, con un fgetc, la cadena mandada por el 2550.
El problema consiste, en que si la comunicación es:
Tarjeta envia info al 2550, el 2550 la interpreta y contesta -> comunicación ok
Tarjeta envia info al 2550, el 2550 la interpreta y contesta, la tarjeta con fgetc recoge los caracteres -> la info mandada por el 2550 una vez interpretado el mensaje no es legible (lo compruebo pinchando la linea de comunicación y viendola por puerto serie).


Mi pregunta es si lo q intento hacer es correcto o debería hacerlo de otra forma?

Agradezco cualquier ayuda, un saludo.

Si necesitais codigo, decidmelo y lo posteo, gracias


 

anything