Autor Tema: Datalogger de 2GB con PIC usando un Host USB: El VDIP1  (Leído 69310 veces)

0 Usuarios y 4 Visitantes están viendo este tema.

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Datalogger de 2GB con PIC usando un Host USB: El VDIP1
« Respuesta #45 en: 14 de Febrero de 2009, 06:21:40 »
Mira lo que he encontrado pululando por la web  :-/

I have implemented SPI to the Vinculum VDIP.  It is a little tricky, I did it by bit shifting.  See code below...

I am using a PIC18F4550:


/*
** SPI_Write_Char
*/
void SPI_Write_Char(char spi_data)
{
   char temp1,temp2;
     
   temp1 = (spi_data >> 3) | (0b10000000);
   temp2 = ((unsigned int)spi_data << 5);

   SPI_CS = 1;

   SSPBUF = temp1;
   while(!SSPIF); //wait until transmitted
   SSPIF = 0;
   SSPBUF = temp2;
   while(!SSPIF);
   SSPIF = 0;
   SPI_CS = 0;
}
/*
** SPI_Read_Char
*/
char SPI_Read_Char(void)
{
   unsigned char temp,temphi,templo;
   SPI_CS = 1; //set CS high
   SSPBUF = 0x60; //send read command
   while(!SSPIF); //wait until transmitted
   SSPIF = 0;
   temphi = SSPBUF;
   SSPBUF = 0; //send dummy value
   while(!SSPIF); //wait until transmitted
   SSPIF = 0;
   templo = SSPBUF; //read data
   SPI_CS = 0; // set CS low
   status = templo & 0x10;  //needs to verify
   temp = ( ((unsigned int)temphi) << 3) | (templo >> 5); //shift to make temp = D7-D0
   return temp;
}

Hope this helps





Ahora, se puede poner este trozo de código C dentro de un asm?
 Cómo hago para llamar a la rutina "SPI_write_char" y "SPI_read_char"?
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Datalogger de 2GB con PIC usando un Host USB: El VDIP1
« Respuesta #46 en: 14 de Febrero de 2009, 08:24:55 »
Hay un error conceptual en tu pregunta.
Desde C se pueden introducir lineas en assembler, pero a la inversa no.

Todas esas rutinas utilizan el modulo SPI interno, si lo hacen en C, hacerlo en assembler es una papita.
Yo leeria y reeleria como usar el SPI en assembler y traduciria estas rutinas a assembler. :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Datalogger de 2GB con PIC usando un Host USB: El VDIP1
« Respuesta #47 en: 14 de Febrero de 2009, 08:43:44 »
Si, ya se que usa parte bit shift y parte hardware SPI. EL tema es cómo mete los 3 primeros bits sin el SPI hardware, o sí lo hace por hardware?
 Ves que no entiendo de C?  :mrgreen:

Cómo compilo este pedacito de código para que me de un output .asm? qué me falta? Cómo declaro las variables en C? Cómo le declaro las directivas para el 18f4550? Son muchas preguntas?  :mrgreen:
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Datalogger de 2GB con PIC usando un Host USB: El VDIP1
« Respuesta #48 en: 14 de Febrero de 2009, 09:01:04 »
A ver si te ayudo.
El shift bit que hace en realidad no va al SPI, es una preparacion del dato a enviar por SPI.

/*
** SPI_Write_Char
*/
void SPI_Write_Char(char spi_data)   <<<< el byte a transmitir se pasa al llamar la funcion, equivale a cargarlo en W y llamar a la rutina en assembler
{
   char temp1,temp2;          <<<<<<<    Aqui declara dos datos de un byte cada uno
     
   temp1 = (spi_data >> 3) | (0b10000000); <<<<  prepara el dato, rota 3 posiciones a la derecha y hace un OR para dejar activo el bit de mayor peso.

   temp2 = ((unsigned int)spi_data << 5); <<<< formatea el dato a un byte luego de una rotacion de 5 posiciones

   SPI_CS = 1;  <<<< pone el pin chip select del SPI en 1 (recien aqui empieza la comunicacion)

   SSPBUF = temp1;  <<<< Carga el dato en el buffer del SPI por hardware
   while(!SSPIF); //wait until transmitted  <<< espera a que el hardware termine de transmitir
   SSPIF = 0;  <<<< creo que limpia la bandera de interrupcion (ver documentacion)
   SSPBUF = temp2;  <<<<< ahora carga el segundo byte que preparo al principio para enviarlo por SPI
   while(!SSPIF);  <<< espera a que el hardware termine de transmitir
   SSPIF = 0; <<<< creo que limpia la bandera de interrupcion (ver documentacion)
   SPI_CS = 0; <<<< pone el pin chip select del SPI en 0 (aqui termina la comunicacion)
}
/*
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Datalogger de 2GB con PIC usando un Host USB: El VDIP1
« Respuesta #49 en: 14 de Febrero de 2009, 11:02:13 »
 :shock:

Pero, en teoría debería enviar 3 bits que indican si se escribe o se lee  100 o 110 , luego manda o recibe el byte de datos, luego hace 1 clock mas para poder leer un bit de status por SDI si la lectura/escritura es correcta y cierra CS, luego debería hacer otro clock más antes de repetir la operación que se desee.
Esa es la teoría y lo que indica el datasheet. Aquí entonces no sé que hace enviando 16 bits en 2 datos  :?
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Datalogger de 2GB con PIC usando un Host USB: El VDIP1
« Respuesta #50 en: 14 de Febrero de 2009, 11:45:00 »
No se puede enviar solo 3 bits por SPI por hardware, hay que enviar el byte completo.
Lo que no se es porque poner el bit de mayor peso en 1 al enviarlo.
El byte de datos es de 5 bits, para escribir que??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Datalogger de 2GB con PIC usando un Host USB: El VDIP1
« Respuesta #51 en: 14 de Febrero de 2009, 17:02:34 »
A menos que esté tratando de engañar al VDIP. O sea que puede que mueva el byte inicial al SSPBUF , cuente 5 pulsos de reloj y ENTONCES active el CS para que el VDIP comience a leer desde el 5 bits en adelante. O sea que el VDIP lea solo 3 bits. Puede ser?
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Datalogger de 2GB con PIC usando un Host USB: El VDIP1
« Respuesta #52 en: 14 de Febrero de 2009, 18:48:26 »
Ahi vas a tener que conocer si el Vdip lo admite, y hacer tu rutina a mano...
No usarias el SPI por hardware.
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Datalogger de 2GB con PIC usando un Host USB: El VDIP1
« Respuesta #53 en: 15 de Febrero de 2009, 06:15:25 »
Esto va a terminar mal.
Ya me veo haciendo la rutina de comunicación por EUSART.  :(
Pero es que esta gente es tonta o que?
No podrían haber hecho un firmware que le mandes 1 byte entero de comando como se hace para manejar las E2prom SPI? Al que diseñó el integrado habría que colgarlo de una plaza pública.  :x
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Datalogger de 2GB con PIC usando un Host USB: El VDIP1
« Respuesta #54 en: 15 de Febrero de 2009, 22:36:34 »
Podrias tomarte el trabajo de publicar aqui como es el tema de comunicacion SPI con el VDIP, segun su manual??

Eso ayudaria a que pudieramos ayudarte mejor. :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Datalogger de 2GB con PIC usando un Host USB: El VDIP1
« Respuesta #55 en: 16 de Febrero de 2009, 04:47:05 »
Como no, señor ser supremo !

En este puedes observar el ciclo de escritura:





y en este el de lectura



Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Datalogger de 2GB con PIC usando un Host USB: El VDIP1
« Respuesta #56 en: 16 de Febrero de 2009, 09:48:20 »
Ya he abandonado la idea de hacerlo por SPI, he probado de mil maneras y nada.
 Podría seguir intentando pero tampoco voy sobrado de tiempo. Voy a probar por UART y os cuento.
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Datalogger de 2GB con PIC usando un Host USB: El VDIP1
« Respuesta #57 en: 16 de Febrero de 2009, 15:28:48 »
Bueeno. Al menos ahora inicializa cuando le conectas el pendrive, cosa que en el modo SPI no hacía ni aunque le amenazase de tirarlo por la ventana  :mrgreen:

Ahora bien, ahora creo que el problemita que tengo es "entenderme" con él. O sea los comandos que si son cortos, que si extendidos, que si ascii , que si hex. Pero ya casi lo tengo, me falta un pelín.  :-/
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Datalogger de 2GB con PIC usando un Host USB: El VDIP1
« Respuesta #58 en: 16 de Febrero de 2009, 15:38:37 »
Ese VDIP, para que tiene el USB??
Ademas de hacer la funcion de guardado de datos que cosa te ofrece que no puedas hacer desde el 4550 sin el VDIP?? :shock:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Datalogger de 2GB con PIC usando un Host USB: El VDIP1
« Respuesta #59 en: 16 de Febrero de 2009, 15:49:29 »
Que el 4550 no es HOST. No puedes meterle un pendrive así como si nada al 4550 porque ambos ,tanto el pendrive como el 4550 ,son USB slaves.
Por eso el VDIP es un USB host que te permite comunicarte con un periférico slave cualquiera .
Por ejemplo: Una PC tiene USB host . EL VDIP (con su integrado y su firmware) simula un host de una PC, por así decirlo.
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"


 

anything