Hola amigos:
Ante todo, mi nombre es Jose, y soy nuevo en este foro. Un saludo para todo el mundo.
Bueno, os voy a explicar algo que me trae de cabeza..., yo soy nuevo en el tema de la programación de PICs (aunque domino Pascal y Delphi), pero como ya hice muchas pruebas con Leds, me he metido un poquito mas a fondo, y os cuento lo que estoy haciendo (que no me sale)...
Yo tengo un receptor de satélite con una tarjeta (no se asusten que no pretendo hacer nada malo, de hecho soy abonado a la TV digital y pago religiosamente las cuotas, es simplemente que no tengo otros aparatos digitales para hacer pruebas y aprender). Hace tres días compré una tarjeta educativa llamada Pic Card. La tarjeta es muy simple, porque sólo trae el PIC 16F84 A y viene ya preparada de fábrica con todas las conexiones receptor-tarjeta. El esquema de conexión es el siguiente:
Receptor <- Tarjeta educativa PIC <- Tarjeta de abonado
Como ven, la tarjeta educativa tiene un Smart Card para meterle la tarjeta de abonado dentro.
¿Y para que sirve la tarjeta educativa con el PIC?...
Es muy sencillo, el PIC sólo hace de árbitro. La tarjeta educativa realmente es un puente entre el receptor y la tarjeta de abonado menos una pista, que evidentemente llega al Pin RB7 y luego sale otra del Pin RB0 a la tarjeta de abonado.
Esto quiere decir que todo lo que el receptor le mande a la tarjeta pasa por el PIC, y lógicamente, todo lo que la tarjeta le mande al receptor también pasa por el PIC. El esquema es el siguiente:
Receptor <----> RB7 (PIC 16F84) RB0 <----> Tarjeta de abonado
Bien, dicho esto, os explico en que consiste el programa que he hecho para el PIC, que es muy simple...
Lo que quiero hacer es un "puente" con el PIC, es decir, quiero interceptar los datos que el receptor le manda al PIC, y que el propio PIC se los mande a la tarjeta. Y cuando la tarjeta conteste, intercepto los datos con el PIC y se los mando al receptor..., lo dicho..., es un simple puente. Realmente cuando esto funcione, todo debe ir como si la tarjeta educativa no existiera, y realmente es una tontería, pero a mi me habrá servido de muuucho, porque habré aprendido a controlar datos de entrada y salida con el PIC, pero el problema es que aunque creo que lo hago todo bien, cuando inserto la tarjeta educativa en el receptor y con la tarjeta de abonado puesta, el receptor me dice "Inserte tarjeta de abonado". O sea, que es una clara evidencia de que mi invento no está funcionando. El PIC no está realizando el puente de datos correctamente.
El programa lo he hecho en MikroPascal (un compilador de Pascal para PIC's), pero no se preocupen si no lo entienden, porque lo voy a comentar todo, y además utiliza todo lo estándar del ensamblador, con lo que verdaderamente me podréis dar soluciones técnicas, que yo ya eso lo llevo a la programación. Bueno, aquí os mando un fichero en RTF (se puede abrir con cualquier procesador de textos, incluso con WordPad de Windows) que contiene el pequeño programa y todos sus comentarios.
Yo sugiero que primero le echen un vistazo al programilla y ahora sigan leyendo...
Bueno, pues como habrán visto, es fácil lo que quiero hacer..., pues primero pongo los pines RB0 y RB7 en modo entrada, y a esperar una interrupción...
Cuando la interrupción se produce, detecto si el bit ha entrado por RB0 o RB7..., si ha entrado por RB0, le mando el mismo valor a RB7, y si ha entrado por RB7, le mando el mismo valor a RB0 (valores que sólo pueden ser 0 y 1 por supuesto).
Supuestamente este programa me debería funcionar en mi tarjeta educativa haciendo de simple puente de datos como ya he dicho anteriormente, pero no es así..., algo falla. Algo no estoy haciendo bien y no sé lo que es.
Lo único que se me ocurre es que pueda ser un fallo de sincronización a la hora de recibir o enviar bits, pero si fuera eso, ¿cómo lo puedo solucionar?.
La tarjeta educativa no tiene fallos, eso os lo garantizo, porque es una tarjeta educativa exclusivamente para hacer experimentos con receptores y tarjetas de abonado, y la venden de fábrica ya hecha y montada con su PIC y todo.
He leido algo sobre el Timer0 pero no me aclaro mucho con esto..., que según parece es para sincronizar datos (no estoy muy seguro), pero aún así no sé como utilizarlo, ni siquiera sé ciertamente si el Timer ese sirve para esto.
Agradecería que me ayudéis, y si alguno sabe algo de C y me puede hacer un trozo de código donde yo luego pueda traducir eso a Pascal, le estaré muy agradecido. De todos modos, aquí lo que importa son los datos técnicos, no la programación, porque también me basta que alguien me diga que me falta "esto o aquello", que yo ya eso lo traduzco a Pascal (ustedes me entienden).
Bueno, espero que no se me haya escapado ningún detalle.
Desde ya, muchas gracias a todos.
Un saludo.
Jose.