Ejemplo: Test Leer Banda Magnética PIC16F873 en CCS

19 05 2008

Bueno, parece que al fin hemos conseguido hacer un programa que sea capaz de leer una tarjeta magnética y enviar su contenido al PC por línea de serie.

Se usa un lector de tarjetas magnéticas dorlet. Este lector envía los datos por la línea RDT conectada a PIN_C0, y un clock para la sincronización de la lectura de datos por la línea RCL conectada al PIN_B0.

La configuración es la misma que en el anterior Ejemplo: Test UART PIC16F873 en CCS.

El programa, una vez leída la tarjeta, envía los bloques leídos sin darles formato de carácteres ASCII legibles, ya que los bloques se quedan almacenados de la siguiente forma: P D3 D2 D1 D0 0 0 0, donde P es paridad y DX es un bit de dato de la tarjeta. Para transformarlos en carácteres legibles habría que eliminar el bit de paridad y rotar 3 veces a la derecha el byte del bloque.

Dejo el código:

Leer el resto de esta entrada »





Ejemplo: Test UART PIC16F873 en CCS

14 05 2008

Voy a explicar un ejemplo de un programa para un sencillo test de la UART (RS232) del PIC 16f873, programado en CCS C. En este programa, se envía una frase al PC y después se pasa a hacer eco de lo enviado por el PC al PIC.

Bien, para hacer este programa se ha usado la última versión del compilador de CCS C llamado PCW. Gracias al Project Wizard, se ha configurado el proyecto para lo siguiente:

  • Cristal de 4Mhz, XT
  • Power Up Timer, PWRT (retrasa el inicio del programa desde que se enciende el PIC para que el clock se estabilice)
  • Reset when Brown Out Detected, BODEN en ic-prog o BROWNOUT en PCW (resetea el PIC si ve que la alimentación baja hasta casi 0V)
  • Se desactiva Low Voltage Programming, NOLVP (así se podrá usar RB3)
  • Se activa RS232, sin paridad, 9600 baudios y siendo Transmit C6 y Receive C7
  • Se desactiva WDT, para que el PIC no se reinicie constantemente
  • Se activa la interrupción de RS232 receive data available (importante, esta interrupción salta cuando un byte está disponible para ser leído. Si no borramos ese byte haciendo getc(), volverá a saltar la interrupción porque no se habrá vaciado el buffer y lógicamente seguirá habiendo data available)
  • Se configuran los I/O Pins adecuadamente
  • Se setea tris_b con set_tris_b, ya que aunque el C se hace automáticamente, el b necesita ser seteado.

Para grabarlo se ha usado ic-prog. Los fuses serán: PWRT (PUT en CCS) y BODEN (BROWNOUT en CCS), además de XT.

Descargar Source

Leer el resto de esta entrada »





Lo que queda de el programa de los tornos

10 05 2008

Haber quedamos en que hariamos cada uno un paquete de los tornos y que liher haria la placa, así que ya puestos elijamos aqui los paquetes

Yo me pido Opaquete pregunta (soy ion)

Por cierto las funciones para pasar de String a byte etc son necesarias en los paquetes, esto lo cambiare Yo asi que no hurgueis, haced como si las tuvieseis





Ejemplos CCS C

9 05 2008

He encontrado un link en el que aparecen varios ejemplos de programación de PIC en CCS C.

Incluso hay un ejemplo de cómo usar la línea de serie con interrupciones.

Ejemplos CCS C





Conclusiones: PIC16f873, PCW, Micro PICTrainer y WinPIC8000

7 05 2008

Después de un largo rato realizando pruebas de grabación en el PIC16F873, se puede decir que:

CONCLUSIONES

*El led de RB3 no funcionaba por activar en ICProg LVP. El pin RB3 es también el de programación en bajo voltaje (LVP). Si se activa esta opción en IC-Prog, no se podrá usar este pin. Si no se activa, funciona correctamente.

*Las opciones a activar en IC-Prog para grabar el PIC16f873 son: BODEN y PWRT.

*El programa TESTLEDS funciona al 100%.

*El programa PCW compila perfectamente.

*El problema es la placa PICTrainer, tiene algún o algunos contactos: en un momento ha dejado de permitir las grabaciones en el PIC (error al validar la grabación in adress 0×0000h), y a la hora y media apretando por ahí a vuelto a permitirlo. Durante ese rato, al encender la placa se encendían leds aleatoriamente. De repente, al encenderla apretando de una forma que no recuerdo, no se han encendido leds, y sí se han medio-encendido los leds contiguos al primero, y el primero. Ahí sí ha permitido grabar. Por lo tanto no puede ser el PIC el que falle o esté quemado, ni tampoco la forma de grabarlo ni el código porque no he tocado ninguna configuración ni he tocado el código del programa.

*Para asegurarme de que no eran las conexiones entre el PIC y la placa las que generaban errores, he intentado levantar el PIC y he roto un PIN del PIC.

*El programa para grabar PICs WinPIC8000 puede que funcione, pero hay que configurar la inversión de vcc, y no estoy seguro de cómo. Deja de ser interesante aunque autodetecte el PIC usado y demás, porque esta comprobado que IC-Prog funciona.

ASÍ QUE

*Hay que cambiar de placa.

*Hay que pedir un nuevo PIC16f873.

*Habrá que testear el programa de envío de byte.





PCW y sus cosas

5 05 2008

Bueno hoy después de estar mas desesperado que Paquirrin con su flequillo, hemos descubierto un par de cosas del PCW.

La primera de estas es que no tenemos ni puta idea por que no se enciende ese led, cuando movemos la misera palanca, y la segunda que a día de hoy es difícil, aunque supongo que sera como nos paso con asm, pero de verdad que desespera y mucho el misero compilador del PCW.

Por ello después de intentar hacer un programa que con la interrupción cogiera el byte y lo mandara, y ver los problemas que habia con las diversas funciones internas que usa el CSS, nos hemos dispuesto a buscar como hacerlo y diversa información para ello, dejo estas paginas útiles y espero que nos dejen ver esa luz al final del túnel, antes de tener que pillar a un gran irakasle de los que tenemos.

Manual_compilador_C_PCW(en PDF)

Haciendo funcionar el pic 16f873

Programacion basica de PICs en C

Por ultimo recordar una cosa que he hablado con Liher, pero que ha sido imposible comentar por que se me ha olvidado decirlo, es lo que hay no doy para mas, XD.

Hemos comentado que se debería añadir al informe, en algun lado que un usuario podra hacer una anulacion de la tarjeta, siempre y cuando se le haya perdido o este quiera hacerla, pero claro esta que se podra anular en la oficina donde se consiguen las tarjetas, o se podra llamar a un numero donde diciendo la id de tu tarjeta y tu DNI se pueda anular, esto mismo se debería hacer para anularla en la oficina.

Con esta respuesta, se soluciona el problema que decía, Dani de que alguien fuera y anulara tu tarjeta, menudo cabrón el tío ese ni que no tuviera otra cosa que hacer.

Creo que con esto termino el post.

Ser felices, agur.





RS232 a RS485

16 04 2008

Buenas he estado mirado el precio de estos conversores en ebay, y he encontrado estos tres.

El precio de cada uno de ellos no llega a 10 €, creo que tendriamos que mirar, decidir y pedir uno ya. Debeis de pensar que nos llegara en 15 dias mas o menos.

Nos vemos.





Seguridad de las tarjetas

8 04 2008

Bueno, aqui va una de las paranoias-visiones mas gordas que he tenido en mucho tiempo. Para aumentar la seguridad del sistema (que ahora mismo es practicamente nula, ya que cualquier pirata puede grabarse en una tarjeta una id aleatoria y pasar por un torno descontandole el dinero al que le toque) , he pensado que podria grabarse en la propia tarjeta otro dato adicional aparte de la id, ya que se pueden grabar otros 19 digitos que no usamos. Se podria grabar en la tarjeta la id y tambien el dinero que tiene, y que en cada uso de la tarjeta (y en la recarga) se grabe ese dato. Al pasar por el torno se haria una comprobacion de si estos dos datos se corresponden.Por lo tanto, si un pirata graba una id necesita saber cuanto dinero tiene esa tarjeta en ese momento, y si los datos no se corresponden se bloquee esa id en la base de datos, quedando inutilizable.





Esquema de las placas

7 04 2008

Esquema de la placa





Max485 o SN75176

2 04 2008

En una estación de Metro tendremos varios dispositivos para validar los accesos. Estos estarán conectados a un bus  RS485, que les conectará con el master, el PC. Es por ello que debemos convertir el bus RS485 a RS232. Además de ello, sabiendo que en cada dispositivo existe un microcontrolador que se enccarga de la transmisión y recepcion de datos, habrá que convertir la señal RS485 a TTL. ¿Convertiremos esta señal en cada dispositivo? ¿O la convertiremos una sola ve para todos los dispositivos? Nos decidimos por usar un sólo MAX485 o SN75176 para una única conversión. ¿Porqué?

 

Porque facilita el montaje de la placa, ya que lo que construyamos se tratrá de una demo. En el sistema real, debido a las distancias y al ruido, sería mejor añadir un módulo conversor RS485-TTL por cada dispositivo. La conversión del bus se hará una sola vez y no en cada PIC. Por lo tanto, obtienes un bus de 0v:5v.