Autor Tema: Comunicación serial, I2C, almacenamiento e impresión  (Leído 1989 veces)

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

Desconectado Oskario

  • PIC10
  • *
  • Mensajes: 8
Comunicación serial, I2C, almacenamiento e impresión
« en: 14 de Febrero de 2007, 16:12:56 »
HOla amigos,

Necesito el sabio consejo de ustedes, estoy armando un recolector de datos, la lógica es la siguiente, Desde el PC paso una base de datos de equipos al sistema microcontrolado, luego en cualquiermomento accedo manualmente a través de un teclado matricial a cualquiera de los registros de la base de datos y agrego algunos valores adicionales, luego tengo dos opciones o imprimo un reporte de dicho registro, o lo mantego almacenado en una memoria flash eeprom serial (IIC ó I2C).  :-/ :-/

El paso final es volver a descargar los nuevos datos al PC (los datos agregados manualmente con sus respectivos ID) para que mi programa que está realizado en delphi, genere un archivo ascii para uso posterior. :mrgreen: :mrgreen:

El diseño del sistema microcontrolado está basado en el PIC 16F877, un teclado matricial de 4X4, una memoria serial de tipo 24LC1024, y tengo habilitada la salida serial de la usart, tanto para comunicación con la PC (subida y bajada de datos), como con una impresorita serial.

La consulta es la siguiente: cada registro de la base de datos consta de 256 bytes (mi memoria tiene capacidad de almacenar 512 registros de 256 bytes), Fuera ideal  usarlo todo pero bueno... me conformo con habilitar 256 registros...

Lo anterior significa que al momento del paso (carga de base de datos desde PC a sistema microcontrolado (SuC)) voy a tener que pasar de un paso 256 registros de 256 bytes cada uno, es decir 65536 bytes. Al tiempo que el SuC recibe los datos, los debe ir almacenando en la memoria serial. Si alguien tuviera o conoce una rutina para hacerlo (yo he intentado usando un buffer de 64 bytes en la RAM) de una forma que se vuelva muy engorrosa y sobre todo LENTA, le suplicaría me ayude...

Ojo que la idea es intentar pasar de un solo saque, por lo menos 256 bytes de cada registro...


SAludos y gracias de antemano....  :-/ :-/ :-/ :-/ :-/ :-/ :-/ :-/

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re: Comunicación serial, I2C, almacenamiento e impresión
« Respuesta #1 en: 14 de Febrero de 2007, 17:02:57 »
Que tal Oskario,

En que lenguajes estas programando?

Te comento que debido al microntrolador que estas usando es necesario el buffer de 64 bytes en RAM para almacenar los datos, de esta no te salvas. Lo que debes pensar es en como almacenar los datos en la EEPROM externa. No se como es que lo haces, pero te comento a grandes rasgos una opciion de hacerlo.

Si lo que estas haciendo despues de recibir los 64 bytes es enviar a la EEPROM uno por uno los bytes, eso hace que tu escritura sea muy lenta debido a que realizas una esciritura de byte simple, esto hace que cada bute se escriba en un lapso de 5 ms, entonces 64 X 5 ms = 320 ms, pero necesitas escibir 256 bytes, esto hace que sean 4 bloques de 320 ms, dando un total de 1.28 segundos, pero ademas necesitas grabar 256 bloques de 1.28 segundos, esto es un total de 327.68 segundos, o sea 5 minutos 27.68 segundos!!!!!!!!.  Eso es demasiado tiempo.

En cambio si lo hicieras en modo burst el timepo se reduciria bastante. Veamos porque, dependiendo del fabricante de la memoria esta puede tener un buffer de 128 o 256 bytes, esto quiere decir que puedes grabar esta cantidad de bytes en un solo lapso de tiempo de 5 ms. Ahora bien vamos a suponer que la memoria que tienes tiene un buffer de 128 bytes, entonces los 64 bytes recibidos y almacenados en tu ram caben perfectamente, esto queire decir entonces que;
64 bytes se escribiran en 5 ms, y se ocupan 4 bloques de 64 bytes (para completar 256 bytes), entonces 5ms X 4 = 20 ms. Esto quiere decir que 256 bytes los escribiras en solo 20 ms. Pero tu necesitas escribir 256 bloques de 256 bytes, esto es 256 x 20 ms = 5.12 segundos!!!!!!!!!!!!!

Mucho mejor eh. ya no son 5 minutos, ahora son 5.12 segundos.

Ahora que recordando, este PIC tiene 4 bancos de memoria, lo que quiere decir que se puede realizar al menos un buffer de 128 byteslo que equivaldria a realizar la grabacion de datos en la mitad del tiempo es decir en solamente 2.56 segundos!!!!!!!!!!!!!!!!!!!!

Bueno un poco mas debido al tiempo que se necesita para enviar los datos y los comandos a la memoria I2C sobre el bus, pero de cualqueir manera el tiempo se reduce bastante.

Me gustaria ayudarte en este proyecto, lo que necesito saber es quien es el fabricnate de la memoria que estas usando y en que lenguaje lo estas programando. De igual manera puede servir si ya tienes un codigo inicial.

Saludos.

Elreypic.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Comunicación serial, I2C, almacenamiento e impresión
« Respuesta #2 en: 14 de Febrero de 2007, 17:35:00 »
Un dato que no es menor, por más que la memoria pueda soportar una escritura de 256 bytes en page mode cada 5 mseg, la pc no le podrá transmitir a semejante velocidad al pic por el puerto serie.  Yo no me preocuparía tanto por esto y he aquí la razón:

5mseg / 256bytes = 19.5 useg por byte = 512.000bps de velocidad de USART.

Saludos


- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Oskario

  • PIC10
  • *
  • Mensajes: 8
Re: Comunicación serial, I2C, almacenamiento e impresión
« Respuesta #3 en: 16 de Febrero de 2007, 15:08:54 »
Hola amigos,

Gracias por responder tan rápido...   :-/ :-/ :-/ :-/

- Yo realizo todos mis programas en lenguaje ensamblador, y mediante el MPLAB Ide 7.51
- El fabricante de la memoria es Atmel. Y si no me equivoco viene paginada en bancos de 256 bytes. es decir tengo 512 páginas de 256 bytes cada una.

- Y bueno donde sí voy a tener muchos problemas va a ser a la hora del paso inicial, es decir cuando pase la base de datos completa desde la PC al SuC...

- De todas maneras voy a intentar subir todo lo que tengo para que lo vean... y ver si me pueden ayudar un poquitín...

Gracias de antemano

Desconectado Oskario

  • PIC10
  • *
  • Mensajes: 8
Re: Comunicación serial, I2C, almacenamiento e impresión
« Respuesta #4 en: 26 de Febrero de 2007, 19:41:31 »
Gracias por el tiempo...


Voy a abandonar un poco este proyecto porque tengo otro que es una obra social  por un amigo...

Asi que seguro que voy a necesitar ayuda... pero voy a abrir otro hilo... para no cambiar el tema en este...


Bye

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Comunicación serial, I2C, almacenamiento e impresión
« Respuesta #5 en: 26 de Febrero de 2007, 22:17:10 »
Muy bien, de todas formas gracias por avisar. ;)

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)


 

anything