Autor Tema: tarjeta para transporte publico  (Leído 7599 veces)

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

Desconectado ceci_lamorocha

  • PIC12
  • **
  • Mensajes: 94
Re: tarjeta para transporte publico
« Respuesta #30 en: 28 de Septiembre de 2015, 10:41:58 »
porque anti ccs ??  :D

cual usas para hacer el programa y cual en lugar de Proteus ??

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: tarjeta para transporte publico
« Respuesta #31 en: 28 de Septiembre de 2015, 13:27:42 »
Los Compiladores es gusto de cada uno. Si estas feliz con CCS segui. Lo que voy a decir a continuacion no incluye a toda la poblacion claramente. Hay gente que es muy capaz, y gente que no lo es.

Yo uso XC8 por que me permite el manejo de registros que es lo que me gusta (Casi parecido al ASM). No tengo directivas que no se que hacen o agregan al micro, etc.
Puedo discutir que sea malo optimizando el codigo, PERO tambien depende mucho de la forma en que se programa, Una ves hice una comparacion entre XC8 y un codigo ASM para un calculo, y rebuscandola logre que consuma casi la misma cantidad de ciclos que el ASM incluso usando el compilador FREE y estando en C. Seguro que CCS se puede hacer tambien lo mismo. Pero todos los codigos que vi terminan agregando la definicion de cada registro.

Si quiero abstraerme del HW, creo mi propia libreria nuevamente modificando los registros a mi gusto. Y se exactamente que hacen las librerias, ejemplo el caso de un LCD, un TFT, etc. (Esto tambien lo podes hacer en CCS, pero es muy raro encontrar que ocurra cuando te dan la libreria a mano), ocurre que la diferencia esta que cuando no funciona una libreria, o se tienen que poner a ver el codigo y entenderlo, o terminan bajando librerias de internet a lo loco, hasta que una funcione. Un gran ejemplo es cuando terminan con librerias simulando un SPI por software, cuando tranquilamente podrian haber usado el SPI por HW, pero no son capaces de traducir eso al HW y poder usarlo con interrupciones por ejemplo lo cual haria mas eficiente.

Proteus lo usaba, luego lo quite de mi cabeza, cuando solo dependes del Proteus para probar tus programas y ocurre que tenes que probar algo que no da soporte Proteus ahi comienzan las dudas, problemas y terminas corriendo en circulos como pollo sin cabeza. (Al menos fue mi caso cuando todo lo mio circulaba alrededor de Proteus)
Proteus como que te da la seguridad de escribir el codigo y tirarselo a Proteus, y ver si funciona, muy distinto es cuando tenes que hacer el codigo pensando que todo tiene que funcionar. Se reducen muchos "bug" (obviamente hay bugs) aunque lo hace un poco mas dificil luego de resolverlo el no tener ese simulador. A no ser que termines usando un debugger.
Por eso elimine el Proteus de mi PC y nunca mas lo instale. Preferia grabar el micro con un codigo que me encienda un par de leds para indicarme donde quedo etc. o si tiene UART con la PC aun mejor ya que envias los datos a la PC y podes debuggearlo con la informacion enviada. Y por ultima el osciloscopio, ya que no poseo un analizador logico.

En fin esto no quiere decir que CCS sea malo, poner una linea y que te haga un UART por software no esta nada mal. o con simple 3 lineas mas un include y ya tenes un USB funcionando. Es otra ventaja del CCS.
Por eso mismo puse al principio, es gusto de cada uno.
« Última modificación: 28 de Septiembre de 2015, 13:41:41 por KILLERJC »

Desconectado ceci_lamorocha

  • PIC12
  • **
  • Mensajes: 94
Re: tarjeta para transporte publico
« Respuesta #32 en: 28 de Septiembre de 2015, 18:06:56 »
A mi me recomendaron mucho el ALTIUM me dijieron que todas las empresas,,, digamos serias... estan usando ese porque es mas profesional que cualquier otro
lo que no se es si es solo para hacer la PCB o se podra simular el circuito?  probaste el Altium ? o se conseguira un demo para ver que tal ?  :)

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: tarjeta para transporte publico
« Respuesta #33 en: 28 de Septiembre de 2015, 18:53:38 »
Lo tengo solo para las PCB, y solo se usarlo basicamente, nada serio ni complejo todavia. Pero si te sobra el Proteus para las cosas que haces, no vale la pena complicarse la vida. Ademas empresa que use Altium debe gastar mucho dinero en solo las licencias.

Desconectado ceci_lamorocha

  • PIC12
  • **
  • Mensajes: 94
Re: tarjeta para transporte publico
« Respuesta #34 en: 30 de Septiembre de 2015, 16:42:05 »
SI, por ahora seguiré con proteus !  :mrgreen:

volviendo al tema del SPI, pude lograr la comunicacion  Master_Slave y  Slave Master  pero tiene unas cosas raras que no se porque las hace  :shock:

1) cada uno de los dos pics tiene una pantalla LCD para mostrar el valor que recibe. Primero el Master le envia un valor al Slave y luego el Slave le devuelve el mismo valor al Master.  Lo raro es que al comenzar,en el Display del Master en lugar de verse un 0 (cero) (porque supuestamente todavia el Slave no le devolvió nada)  sale un numero 105, como si el buffer del SPI tuviera ese valor cargado? habrá que limpiar el buffer al comienzo ? bueno...... probé hacerlo con:  spi_write(0x00);  pero despues todo funcionaba mal , asi que no se ....

2)otra cosa rara es que en el Debugger del SPI del Proteus se ven bien los valores 1 ,2 ,3 ...etc que entrega el master al esclavo,,, pero los valores del esclavo al master no son 1, 2, 3 .....etc!!   pero en los Displays se ven bien !!   

Creo que todavia no se pueden adjuntar los archivos y la simulacion para pasarselos pero si me mandan un mje con el mail se los envio



Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: tarjeta para transporte publico
« Respuesta #35 en: 30 de Septiembre de 2015, 17:03:42 »
No entiendo CCS, lamentablemente es muy complicado para mi entender que hace la funcion spi_write() por que no tengo el codigo de spi_write(), entonces no te puedo decir que estas haciendo mal o no. Por eso mismo soy anti CCS.

Tenes que dividir tu problema. Por un lado el envio de datos. Supone que tenes que enviar 4 bytes. Y tenes que mostrar en el LCD eso.
- Entonces el SPI lo que hace es tomar esos 4 bytes guardarlos en un lugar y luego avisar con un flag o con algo diciendo que ya esta completo el dato y lo copias a otro buffer de igual tamaño. Esto por interrupciones obviamente
- En el programa principal preguntas cuando el dato esta completo, si esta completo ( es decir llegaron los 4 datos ) escribis eso en el LCD y pones en 0 el bit de dato completo.

Entonces...

La recepcion no depende del LCD para nada. lo unico que hace la recepcion es justamente recibir 4 bytes guardarlos y avisar. Si nadie lo usa entonces se terminara sobre escribiendo. SOLO y UNICAMENTE cuando reciba otros 4 bytes.

La rutina del LCD tampoco "depende" del SPI , toma el valor de un flag para saber si actualizar o no, toma el valor de una variable y lo muestra.

Si lo pensas son como 2 programas corriendo a la misma ves, uno a traves de las interrupciones y otro en el programa principal. el SPI con entradas desde el SPI hardware y salidas el flag de que se completo la transmision y el dato transmitido.
El LCD entrada, un flag indicando cuando tiene que actualizar, y un dato que no le importa de donde venga.

Si haces asi tus programas si en algun momento decidis cambiar el SPI por la UART por ejemplo, lo unico que tenes que hacer es cambiar la rutina de SPI por una de UART. respetando que al final de la rutina de UART tenga un flag y un dato como salida. Y sin necesidad de cambiar nada del programa principal (LCD).

De tal forma que si haces un programa asi por ejmeplo:
Código: [Seleccionar]
main(){
   //Configuraion aca
  while(1) {
   dato = 0x2030;   // Estos valores son fijos para prueba, pero serian asignados en el SPI, por como esta programado deberia ser igual hacer esto que si estuviera el SPI
   flag = 1;
   if( flag = 1 ) { LCD_Muestra(); }
  }
}

Podes poner cualquier valor de "dato" o "flag" y probarlo sin necesidad de que este funcionando exactamente tu SPI. de esa forma probar el LCD que funciona correctamente.

Son los unicos consejos que te puedo dar. Y espero que me entiendas lo que intente transmitir. Entonces con eso te podes centrar en algo especifico y no pensarlo como un TODO.

--------------------

Respecto al SPI, tenes que notar que cuando el maestro envia un byte, tambien recibe un byte. Es imposible que sepas por "adelantado" lo que te va a enviar el maestro para que le respondas con lo mismo, asi que si envias 2 bytes, toda la transferencia ocuparia 3 bytes.

Paso a paso enviar 0x1234 y recibir 0x1234 del esclavo.

1- Maestro envia 0x12 y descarta lo recibido, Receptor recibe 0x12 y pone en el buffer 0x12.
2- Maestro envia 0x34 y recibe 0x12 , Receptor recibe 0x34 y pone en el buffer 0x34
3- Maestro envia cualqueir cosa ( 0x00 ) y recibe 0x34 , Receptor descarta este valor y pone en el buffer lo que le guste ya que va a ser descartado.

Creo que serian los paso a hacer.
Estas haciendolo asi ?

--------------------


Citar
2)otra cosa rara es que en el Debugger del SPI del Proteus se ven bien los valores 1 ,2 ,3 ...etc que entrega el master al esclavo,,, pero los valores del esclavo al master no son 1, 2, 3 .....etc!!   pero en los Displays se ven bien !!  

O el debugger esta mal, o esta mal tu programa :)
« Última modificación: 30 de Septiembre de 2015, 17:14:56 por KILLERJC »

Desconectado ceci_lamorocha

  • PIC12
  • **
  • Mensajes: 94
Re: tarjeta para transporte publico
« Respuesta #36 en: 01 de Octubre de 2015, 19:00:58 »
Lo que pasa es que me parece que el Maestro recibe un dato ANTES de enviarle uno al esclavo  :shock: por eso decia que capaz el buffer del SPI se carga con algun valor al iniciarlo, y el Maestro lo esta leyendo (es el 105 que sale en el Diplay del Maestro), tampoco puedo insertar imagenes para que lo puedan ver  :(  espero que se solucione este problema pronto y lo adjunto


voy a darle mas vueltas al programa siguiendo esos consejos a ver si logro resolverlo





Desconectado ceci_lamorocha

  • PIC12
  • **
  • Mensajes: 94
Re: tarjeta para transporte publico
« Respuesta #37 en: 02 de Octubre de 2015, 11:57:54 »
Bueno suponiendo que la Comunicacion SPI ya esta bien  :mrgreen: 
queria pasar a usar el modulo RC522  asi que me puse a leer y buscar informacion

encontre un blog donde un chico aporta una libreria para usar este modulo pero la verdad que como no tengo mucha idea del tema se me complica mucho entenderla
les paso el link:
http://simplesoftmx.blogspot.com.ar/2015/04/pic-16f628a-16f627a-lector-rfid-rc522.html


la libreria se puede usar para SPI ?  porque en el programa que pone de ejemplo coloca esta linea: #use rs232(baud=9600,xmit=PIN_B2,rcv=PIN_B1,bits=8) 

en lugar de #use spi(....) 

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: tarjeta para transporte publico
« Respuesta #38 en: 02 de Octubre de 2015, 12:16:03 »
rs232 es la uart, no el spi,

Desconectado ceci_lamorocha

  • PIC12
  • **
  • Mensajes: 94
Re: tarjeta para transporte publico
« Respuesta #39 en: 02 de Octubre de 2015, 20:13:58 »
que hace el & en esta linea ?


if(MFRC522_isCard(&TagType)) //busca tarjeta 


para que el &  ?


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: tarjeta para transporte publico
« Respuesta #40 en: 02 de Octubre de 2015, 20:39:33 »
Es la direccion de donde esta alojado la variable TagType, Luego eso se accede con un puntero.

El tema de punteros es GRANDE y util tambien, pero por ahi medio difcil, podes buscar tutoriales en internet para entenderle. un ejemplo simple seria el de enviar un mensaje al LCD, donde el LCD se hace una funcion de enviarle una letra por ves, por ejemplo

Código: C
  1. const char mi_string[] = "bla bla bla bla";
  2.  
  3. void main()
  4. {
  5.     Enviar_por_LCD(mi_string);   // En un array si no se le pone el indice es lo mismo que hacer &mi_string[0] es decir la DIRECCION del primer elemento
  6. }
  7.  
  8. Enviar_por_LCD(char *ptr){
  9.   while(*ptr)    //Mientras que no sea un caracter nulo, cuando se termina el string que hay un caracter nulo sale
  10.    {
  11.       LCD_Escribir_Letra(*ptr++);  // Pongo letra por letra en el LCD, Pongo esa letra y luego avanzo en la direcion
  12.     }
  13. }

Hay muchas mas aplicaciones ademas de esta