SoloCodigo

Programación Específica => Microcontroladores => Mensaje iniciado por: Fossy en Sábado 29 de Mayo de 2004, 06:50

Título: Para Jonathan Y Otros Compañeros
Publicado por: Fossy en Sábado 29 de Mayo de 2004, 06:50
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.
Título: Re: Para Jonathan Y Otros Compañeros
Publicado por: Setha en Sábado 29 de Mayo de 2004, 13:02
Tienes muchísima información sobre todo este tema en
www.zackyfiles.com (http://www.zackyfiles.com).

Suerte.
Título: Re: Para Jonathan Y Otros Compañeros
Publicado por: Fossy en Sábado 29 de Mayo de 2004, 18:38
Hola Setha:

Gracias por la información. En esa web hay de todo, pero no hay absolutamente nada referente a la programación de PICs.

No sé si has confundido mi mensaje, pero me refiero a hacer programas para PIC, no a programar un PIC (en el sentido de meterle los datos). En esa web si viene cómo programar un PIC con ICPROG y demás, pero no es eso lo busco :).

Gracias de todas formas.
Título: Re: Para Jonathan Y Otros Compañeros
Publicado por: joajavi en Viernes 4 de Junio de 2004, 17:14
Hola Fossy:

Creo que el tema no es tan sencillo como tú te crees. A mí jamás se me ocurriría poner un PIC como mero puente entre datos de entrada y datos de salida. Es como hacer en curva una carretera (Intercalar el PIC) por cuya línea recta ya va una autopista (puente). El PIC nunca llegará a la velocidad por la que circula la luz entre dos puntos unidos electricamente. Además deberá atender posibles interrupciones.

Sin embargo y aunque así fuera (más veloz el PIC que la luz), yo usaría el PIC para algo más. Y ese algo más es lo que creo que hace cualquier PIC o cualquier tarjeta inteligente. HABLO DE ENCRIPTAR la información, es decir, aplicar un algoritmo de encriptación de datos para que no se pueda capturar facilmente la información. Aplicar un algoritmo de encriptación que puede ser tan sencillo como un NOT o tan complicado como AND + OR  + XOR + AND + XOR + NOT ....ETC, ETC. De hecho, yo mismo pongo el Copyright en todos los programas que hago para la serie 80x86 de Intel, salvo en el caso de encargos., en cuyo caso elimino la encriptación y el Copyright.
Título: Re: Para Jonathan Y Otros Compañeros
Publicado por: Fossy en Domingo 6 de Junio de 2004, 05:32
Hola Joajavi:

Pues ya lo he hecho, y me funciona perfectamente.

En una cosa si que estoy de acuerdo contigo..., que me ha costado un riñón poder hacer eso, porque he tenido que currarme el protocolo ISO 7816-3 enterito..., un proyecto de ingeniería y muy a bajo nivel sin duda.

Ah..., por si te sirve de ayuda, el PIC sin Xtal funciona dignamente a 4 Mhz., mientras que Tarjeta y Deco funcionan a 3.57 Mhz, o sea, que he tenido que "bajar" la velocidad del pic para sincronizar la entrada/salida de bits :).

Realmente no es que haya tenido que bajar la velocidad, sino que he tenido que poner Delays mas altos para restar velocidad y sincronizar con el estandar ISO.

Este protocolo tiene guasa amigo..., por supuesto el código nuevo que he implementado no tiene nada que ver con el que puse en el primer post, ya que en el ISO 7816-3 se utilizan StartBits, bloques de 8 bits, paridad, manejo del Reset y ATR, registros de control de bytes, y muchas cosas mas..., además requiere un perfecto dominio y conocimiento del PIC.

Hombre, yo entiendo que he empezado la casa por el tejado, pero no me arrepiento.

De todos modos muchas gracias a todos, y en lo que os pueda servir, por aquí andaré.

Un saludo.

P.D. Los bits no tienen nada que ver con la velocidad de la luz. Son simplemente secuencias de +5v - 0v enviados a gran velocidad (104 microsegundos entre uno y otro), que equivale a una comunicación aproximada de 9600 bits por segundo. Un PIC de 4 Mhz. puede llegar hasta aprox. 14.000 bits por segundo sin Delay.
Título: Re: Para Jonathan Y Otros Compañeros
Publicado por: pacocable en Martes 25 de Mayo de 2010, 17:23
Para Fossy:
¿Podrias postear el programa para el pic?
me gustaria estudiarlo y poderlo adapatar si fuera posible
muchas gracias