fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Avisos
Vaciar todo

Hacer portatil un programador Prometeo

19 Respuestas
4 Usuarios
0 Reactions
7,585 Visitas
jaba_ruben
Respuestas: 144
Topic starter
(@jaba_ruben)
Estimable Member
Registrado: hace 17 años

Buenas a todos:

Usare este tema como hilo conductor de mis pruebas asi como de las aportaciones que podais y querais hacer.

No se si conocereis el programador prometeo para tarjetas de 8 contactos. Lo usare como ejemplo.

Actualmente dicho programador hay que conectarlo al PC para enviarle comandos y recibir respuestas.
Me gustaria ahorrarme el PC, es decir, crear un circuito que me permita conectar por USB o por puerto serie o como sea el prometeo con este proyecto para poder manejarlo. Con un display led y algunos botones para moverme por los menus y poder elegir opciones.

Al principio digo que lo cojo como ejemplo porque mi idea es escalarlo a un GTPUSB Lite para poder programar los PICs sin necesidad de PC.

Quiero hacer todo portatil para poder evitarme tener que estar en casa y poder trabajar en el taller sin necesidad de un pc cerca.

Habia pensado en utilizar Arduino, programando un menu que envie por alguna salida un 0X49 a mi prometeo. La conexion que habia pensado pero que probablemente no se pueda (Perdonad porque siempre sere un novato, soy el eterno novato) seria cortar un USB Macho (B o grueso) y los 4 cables que tiene, conectarlos a arduino. ¿Como? Pues uno a positivo otro, a comun, y los dos que quedan son de datos, asi que imagino que usar uno como entrada y otro como salida de datos. Enviar por uno el 0x49 Hex y leer lo que venga del otro pin.....

¿Que os parece?

Gracias a todos de ante mano por si acaso 😀

Saludos

Responder
18 respuestas
jaba_ruben
Respuestas: 144
Topic starter
(@jaba_ruben)
Estimable Member
Registrado: hace 17 años

Gracias, pero me temo que no lo comprendo. He leido el datasheet, pero..... No me entero.

He visto las graficas del estado de los pines, y esas cosas.... pero no veo como enviar los datos, como seria el puerto, etc...... Perdoname pero en esto soy completamente nuevo.

nunca he transmitido y recibido datos desde un pic, o desde cualquier otra cosa. Tan solo los he conectado a motores, o a leds y cosas asi.

Responder
safareig
Respuestas: 29
(@safareig)
Eminent Member
Registrado: hace 16 años

Hola jaba_ruben

A ver si te puedo aclarar algún concepto.
Se trata de conectar los pines de la card (zócalo smardcard) a los pines de un microcontrolador. Se necesitan 5 pines del microcontrolador, cada uno de ellos maneja un pin de la card.

pines.th pines.th

Necesitarás configurar y manejar 5 pines del microcontrolador y estos serán:
RST (Reset, configurado como salida)
CLK (Clock, configurado como salida)
I/O (Entrada/salida de datos, configurado como entrada patra leer y como salida para escribir. Debe tener una resistencia pull-up)
FUS (Fuse, Configurado como salida)
PGM (Señal de escritura, configurado como salida)

Estas cards en realidad son una eeprom de 1600 bits (200 bytes) y el protocolo de comunicación es síncrono o lo que es lo mismo, en cada clock de reloj que le des al pin CLK la card te entrega por el pin I/O el estado del bit correspondiente en la eeprom. Si mandas otro clock, la card pasa al siguiente bit y te muestra su estado (1 o 0) por el pin I/O y así sucesivamente hasta el bit 1600.
Internamente el chip tiene un contador de dirección en eeprom que va desde 0 hasta 1599 (1600 bits), cada clock (ciclo) de reloj esta dirección se incrementa en uno. Cuando se llega a la posición 1599 y se le aplica otro clock este contador se resetea y vuelve a la posición 0 con lo que en el pin I/O de nuevo te muestra el estado del primer bit de la eeprom.

Lo primero es calcular que frecuencia de clock debes usar. En la página 20 del datasheet, la tabla 15-2 muestra todos los tiempos que hay que conocer, de momento el que interesa es el primero "Clock Cycle Time" que te dice: mínimo 3.3us. Lo que significa que la frecuencia de clock máxima a la que nos podemos comunicar es de 1/0,0000033s, o sea al rededor de los 300Khz. Como ves no hay estipulado un tiempo máximo de clock por lo que la frecuencia puede ser tan baja como queramos.
Por ejemplo puedes usar 50Khz, que será un tiempo de clock de 1/50000=0,00002s por ciclo. Así pues, puedes establecer un tiempo de clock de 0,00002 segundos.

Hay 5 funciones básicas que tu micro va a tener que hacer: Reset, lectura, borrado, escritura y presentar pin. Cada una de ellas la tienes documentada en el datasheet y con esquemas de la secuencia que hay que seguir. Para empezar podemos ver las dos primeras, reset y lectura

RESET
Esta función pondrá el contador de dirección interno a cero. Te encuentres en la dirección que te encuentres en la eeprom, si haces una secuencia de reset, vuelves a la posición cero.
Según el datasheet, en la página 16 tabla 14-1 apartado "RESET" te dice: "With CLK low, a falling edge on the RST pin will reset the address counter to address 0."
Así que teniendo el pin CLK a 0 un paso de 1 a 0 del pin RST te lleva a la dirección 0 de eeprom. Lo que es lo mismo:
CLK = 0
RST = 1
delay(0.00001s) (esperamos la mitad de un cliclo 0.00002/2)
RST = 0

LECTURA
Esta función lee bit a bit la direccion de eeprom donde te encuentres. En la misma tabla de la pag. 16 sección READ dice dos cosas a tener en cuenta:
"RST and PGM pins must be low."
"The address counter is incremented on the falling edge of CLK."
Así que para leer hay que mantener los pines RST y PGM a 0. El contador de dirección se incrementa en cada descenso del pin CLK.

// Primero hacemos un reset para ir a la posición 0 de la eeprom
CLK = 0
RST = 1
delay(0.00001s) (esperamos la mitad de un cliclo 0.00002/2)
RST = 0

PGM = 0 // Te aseguras que el pin PGM está a 0

// empezamos a leer bits de eeprom
delay(0.00001s) (esperamos la mitad de un cliclo 0.00002/2)
Lees pin I/O (primera posición eeprom)
CLK = 1
delay(0.00001s) (esperamos la mitad de un cliclo 0.00002/2)
CLK = 0
delay(0.00001s) (esperamos la mitad de un cliclo 0.00002/2)
Lees pin I/O (segunda posición eeprom)
CLK = 1
delay(0.00001s) (esperamos la mitad de un cliclo 0.00002/2)
CLK = 0
delay(0.00001s) (esperamos la mitad de un cliclo 0.00002/2)
Lees pin I/O (tercera posición eeprom)
... y así hasta la posición que quieras leer

Las dos funciones en C para WinAVR utilizando el puerto D:

Esta función resetea la dirección interna de la card y te coloca en la posición a la que quieras desplazarte. Si utilizas "Clockear(0);" solo resetea y se queda en la primera posición.
void Clockear(unsigned int direcion)
{
// Reseteamos card y nos colocamos en el bit 0 de la eeprom
cbi(PORTD,4); // CLK a 0
sbi(PORTD,3); // Reset a 1
delay_us(10);
cbi(PORTD,3); // Reset a 0
delay_us(10);
// Subimos tantos bits como marca "direcion"
// Si "direcion" es 0 no nos movemos
while (direcion)
{
sbi(PORTD,4); // CLK a 1
delay_us(10);
cbi(PORTD,4); // CLK a 0
delay_us(10);
direcion--;
}
}

Esta lee 8 bits seguidos y te los devuelve en un byte. Antes debes colocarte en el bit en el que quieras empezar a leer con la función "Clockear(n);"
unsigned char Lee_Byte(void)
{
unsigned char rec=0, i=8;
cbi(DDRD,2); // Pin I/O como Entrada
sbi(PORTD,2); // Pin I/0 a Pull-Up

while (i){ // Bucle de lectura de 8 bits de datos
cbi(PORTD,4); // CLK a 0
delay_us(10);
rec<<=1; // Consideramos que recibimos un cero
if (inp(PIND)&4) rec|=1; // Si recibimos un 1 por I/O
sbi(PORTD,4); // CLK a 1
delay_us(10);
i--;
}
cbi(PORTD,4); // CLK a 0
return rec;
}

Vaya, menudo tocho. Espero no haberte liado mas de lo que ya estabas. No se, ¿como lo ves?

Un saludo...

Responder
jaba_ruben
Respuestas: 144
Topic starter
(@jaba_ruben)
Estimable Member
Registrado: hace 17 años

Lo veo y muy bien! 😀 jejeje
pero algo me intriga, pregunta de novato: Puedo porgramar en C para pic??? y de ser la respuesta si, que compilador tengo para MAC OSX ????

Estoy un poco perdido con estas cosas.....ainsssss la falta de tiempo que mala es 😀

Responder
safareig
Respuestas: 29
(@safareig)
Eminent Member
Registrado: hace 16 años

Hola,

Claro que puedes programar en C para pic. Sobre lo del compilador para MAC no tengo ni idea, supongo que alguno de los foreros te podrá orientar mejor que yo.

Un saludo...

Responder
jaba_ruben
Respuestas: 144
Topic starter
(@jaba_ruben)
Estimable Member
Registrado: hace 17 años

He retomado el proyecto. Lo que me comentastes funciona perfectamente, pero ahora tengo problemas para autentificarme. Cuando pongo el pin para poder ver el mapa completo, en cada pulso o ciclo del reloj, cuando pasa de alta a baja, le voy mandando el pin, y como dice el datasheet, justo al acabar, tengo que escribir en la siguiente posicion que seria el numero de reintentos, bien. En este punto se supone que valida el pin, pero a mi se me bloquea la tarjeta.

Responder
Página 3 / 4
Compartir: