Autor Tema: Problema con Transferencia de archivos  (Leído 1824 veces)

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

Desconectado Palomino86

  • PIC16
  • ***
  • Mensajes: 180
Problema con Transferencia de archivos
« en: 30 de Septiembre de 2009, 20:18:40 »
Que tal bit pic. soy nuevo por aqui y quiero ver si puedo obtener un poco de ayuda

Lo que pasa es que estoy haciendo una proyecto con microcontroladores en la que tengo que abrir, leer y enviar los datos (ficheros .txt) que estan guardados en una memoria SD. Ya puedo abrir y leer los datos que estan dentro de ella. Mi problema radica en la transferencia y la recepción de archivos via rs232 ya que no tengo idea de como mandar tales o por lo menos en el copilador que uso (CCS compiler) no he hallado algun ejemplo similar. La idea es que un pic este como maestro (el cual tiene la sd card) el cual enviara los archivos de la tarjeta y otro como esclavo el cual recibira los archivos y los almecenara y enviara a la pc.

Lo que llevo de codigo es lo siguiente:


#include "18F452.h"                                                             //Libreria del PIC a utilizar

#fuses H4,NOWDT,NOPROTECT,NOWRT,NOWRTD,NOLVP,BORV27,PUT,STVREN,NODEBUG,NOWRTB   //Configuraciones de salida Generales
#use DELAY(CLOCK = 20MHZ,RESTART_WDT)                                           //Configuración del Oscilador
#use RS232(BAUD=57600, PARITY=N, XMIT=PIN_C6, RCV=PIN_C7,/*ERRORS*/)            //Configuración de RS232, para la transmisión serie


/*----------------------------------------------------------------------------*/
/*                        Cabecera para memoria SD                            */
#include "HDD Driver.c"
/*----------------------------------------------------------------------------*/

/*----------------------------------------------------------------------------*/
/*                              Principal                                     */
/*----------------------------------------------------------------------------*/
void main()
{
int error,error0;/*r1,i,j,error1*/
int16 rec_no;
int16 rec_size;/*index,int32 offset;*/
char fname[32],buff0[MMC_BUFF_SIZE+1],buff1[MMC_BUFF_SIZE+1];/*char c;*/


/*----------------------------------------------------------------------------*/
/*                       Configuracion de Puertos                             */
/*--------------------------------------------------------------------------- */

   set_tris_c(0b10010011);                 //c7=rx I, c6=tx O, c5= SDO O,c4= SDI
   
   output_high(_CS);

   printf("\r\n**** Leyendo SD/MMC FAT16 **** ");
   printf("\r\n");
   Delay_ms(500);
   printf("\rAbriendo archivo(s)....");
   printf("\r\n");
   Delay_ms(500);

/*----------------------------------------------------------------------------*/
/*               Protocolo para lectura de memoria (SPI)                      */
/*----------------------------------------------------------------------------*/

SETUP_SPI(SPI_MASTER|SPI_SS_DISABLED|SPI_H_TO_L|SPI_CLK_DIV_16|SPI_XMIT_L_TO_H);

   buff0[MMC_BUFF_SIZE] = 0;
   buff1[MMC_BUFF_SIZE] = 0;
   rec_no = 0;

/*----------------------------------------------------------------------------*/
/*                  Inicializacion de la tarjeta                              */
/*----------------------------------------------------------------------------*/   

   error = init_MMC(10);
   
   if (error > 0)
   {
   goto mmc_exit;
   }

   printf("\n\rMMC Inicializada \n\r");
   rec_size = MMC_BUFF_SIZE;
   
   strcpy(fname,"lectura1.txt");
   rec_size = MMC_BUFF_SIZE;
   error0 = open_file(0,fname,rec_size);

   if (error0 > 0) {
   printf("\n\rArchivo(s) Abiertos : 0 Error Fallido = %U\n\r",error);
   goto mmc_exit;
   }
   else printf("\n\rArchivo Abierto %s with rec size %lu \n\r\r",fname,rec_size);

   do
   {

   error0 = file_read(0,buff0);

   if (error0 > 0 && error0 < 255 )
   
   {
   printf("\n\rArchivo(s) Leído(s) = 0 Error Fallido = %U\n\r",error0);
   break;
   }

   printf("%s",buff0);

   rec_no++;

   }
   
   while (error0 == 0);

   mmc_exit:
   
   printf("\r\n\rdone winhex adj= %lu \n\r",winhex_adj);
   while(true);
   }

Algun ejemplo de transferencia de archivos, articulo o lo que sea, para ccs sera bien recibido

Gracias

mi correo es jpalomino@alerta.com.mx ó jorgeluis.gutierrezpalomino@gmail.com
Lo que no me destruye, me fortalece

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema con Transferencia de archivos
« Respuesta #1 en: 30 de Septiembre de 2009, 20:24:17 »
Para enviar por el puerto serial un buffer seria de la siguiente manera:

Código: C
  1. int16 i;
  2.  
  3. for(i=0;i<512;i++) putc(Buffer[i]);  /* 512 como ejemplo pensado que lees una memoria SD */

Nota: No es suficiente con un solo PIC?

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado Palomino86

  • PIC16
  • ***
  • Mensajes: 180
Re: Problema con Transferencia de archivos
« Respuesta #2 en: 30 de Septiembre de 2009, 20:52:09 »

for (i=0;i<512;i++);
putc(buffer);

Hola que tal suky. No se si ya ando muy ciclado pero no entendi tu codigo... lo que quiero hacer es enviar cualquier archivo *.txt que se encuentre dentro de la memoria por medio de rs232

No se si haya algun ejemplo por aqui para basarme en el o algo asi..

Gracias

Saludos
Lo que no me destruye, me fortalece

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema con Transferencia de archivos
« Respuesta #3 en: 30 de Septiembre de 2009, 21:27:48 »
Tu vas a realizar la lectura de la memoria y las vas a guardar en algún Buffer en el PIC, y lo que hace el código que mostré, no el que pusiste, es enviar de a uno los 512 elementos que tiene el buffer.

Otra forma seria:

Código: C
  1. printf("%s",Buffer);

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Problema con Transferencia de archivos
« Respuesta #4 en: 30 de Septiembre de 2009, 23:17:52 »
Hola.

Que si es .txt o no, eso lo detecta el PC. Si lo quieres pasar por RS232, debes hacerte un programa para PC que te reciba los bytes enviados desde el PIC, tal como lo menciona el señor Suky y al terminar el envío le das el formato, pero eso lo haces en el programa, puede ser Visual C o cualquier otro. Por hyperterminal tambien se puede hacer pero debes sequir los siguientes pasos:

1. Abrir el hyperterminal  :mrgreen:
2. Seleccionar: Transfer/Capture text
3. Asignar la ruta y el formato del archivo
4. Darle click a START y listo!!!
5. Comenzar la transmision desde el PIC.

Una vez hallas finalizado la transmision vas a la misma ruta Transfer/Capture text/Stop.

Otra opcion es trabajarlo con USB tipo MSD.

Saludos
El papel lo aguanta todo


 

anything