Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

30/05/2013 #21

Avatar de albertoxx

Releyendo un poco, si la búsqueda te está demorando más de 2" me dá la impresión que debe haber algo "más que ineficiente" en tu implementación. Porque no son tantos datos --> no debería demorar tanto.
Lo hice con memoria eeprom 24C32 y segun mis calculos para barrer con toda la informacion de una lista no indexada se tardaria mas de 2 segundos en buscarlas en varias eeprom y por motivos de urgencia se instalo asi pero quiero mejorar los tiempos para hacer esto como se ha dicho mas eficiente.

Y sobre todo usar el inventario con que cuento (muchas memorias simm,dimm) y con eso de que hay memorias en los CD me llama la atencion por que tengo muchos de desguace tambien voy a abrir uno y les cuento que memoria encontre.

Para ir aterrizando yo creo que lo ideal seria tener una lista de datos ordenada y solo el indice manejarlo en ram
30/05/2013 #22

Avatar de Meta

Hola:

Las EEPROM tipo 24LC32 son mucho más lenta en lectura y escritura que la RAM y se nota la diferencia como se nota que la RAM no deja los datos almacenados cuando pierde la alimentación.

La más moderna y mejoraja ahora es la 24LC32A. Esas son EEPROM preparadas para microcontroladores.

Vamos a sacar la máxima información para hacer el hardware adecuadno al menos en la protoboard.


http://www.hardwarebook.info/30_pin_SIMM



A leer algo básico para entender.
http://es.wikipedia.org/wiki/DRAM
http://www.myplace.nu/avr/dram/index.htm

Una tontería para tener claro mediante programación de alto nivel como el Visual C# como ejemplo, es tener una idea más clara.

https://www.youtube.com/watch?v=blLXcIyqVFw


http://foro.elhacker.net/hardware/gu...t220084.0.html

¿Aún sigues con intenciones de usar la RAM SIM 30 para hacer pruebas o te lo estás pensando?

Si lo tuviera lo haría en mi caso, jejjejeje.

Saludo.
30/05/2013 #23

Avatar de albertoxx

Pues mas o menos asi me quedo el codigo pero el refrescamiento a cada rato para que no pierda la info me hace descartar este tipo de memoria. Aqui esta el codigo y segun lo que me tiro si guarda y lee la informacion
Código:
void GuardarEnRAM(int Columna,int Fila,int Valor){
  set_tris_a(0);
  output_b(255); //todos high
  output_b( (Fila << 3)+0b110 );
  output_a(Valor);
  output_b( (Columna << 3)+0b00 );
  output_b(255); //todos high  
}

int LeerDeRAM(int Columna,int Fila){
  set_tris_a(1);
  output_b(255); //todos high
  output_b( (Fila << 3)+0b110 );
  output_b( (Columna << 3)+0b100 );
  output_b(255); //todos high  
  return( input_a() );
}

Y en la rutina principal

   delay_ms(50);
   printf("Iniciando\r\n");
   while(1){
     GuardarEnRAM(1,1,1);
     GuardarEnRAM(1,2,2);
     GuardarEnRAM(1,3,3);
     GuardarEnRAM(1,4,4);
     GuardarEnRAM(1,5,5);
     Dato1 = LeerDeRAM(1,5);
     Dato2 = LeerDeRAM(1,4);
     Dato3 = LeerDeRAM(1,3);
     Dato4 = LeerDeRAM(1,2);
     Dato5 = LeerDeRAM(1,1);
     printf("%u %u %u %u %u\r\n",Dato1,Dato2,Dato3,Dato4,Dato5);
     delay_ms(800);
   }

Y el resultado en terminal de windows fue

5 4 5 4 5
Asi que deplano sin el refresco no funciona
31/05/2013 #24

Avatar de Meta

Hola:

¿Lo que has hecho es un simulador o real con un microcontrolador?

Si lo hiciste funcionar. ¿Puedes subir imágenes del circuito?

Veo interesante estos temas.

Saludo.
31/05/2013 #25

Avatar de Scooter

El problema de una memoria externa es que no la puedes indizar etc, si se puede hay que usar memoria interna.
Si usas una memoria externa estática de acceso paralelo necesitas al menos tres puertos y además las señales de lectura y escritura para 64k y eso son demasiados pines. Si pones registros de desplazamiento o similares ahorras pines pero gastas mas circuitos... mejor sería una memoria serie.
Al precio y a la velocidad que van las SDs creo que son ideales porque matas dos pájaros de un tiro, vale que el número de escrituras es limitado, pero son millones, si cuidas no machacar un sector creo que podría ir.
Una memoria SD de clase 10 tiene una tasa de escritura de 10MB/s que es mucho mas de lo que un pic "normal" puede enviarle en un uso normal, no se si esa tasa baja mucho en modo SPI, pero sería cuestión de pensar en unsar el interface SD "ancho".
31/05/2013 #26

Avatar de Eduardo

No entiendo por que preferís complicar el hardware para poder usar un algoritmo pedorro (una lectura secuencial) en lugar de mejorar el algoritmo. Hay veces que no se puede, pero en este caso, un índice de apenas 16 o 32 entradas ya te acelera drásticamente el proceso.
31/05/2013 #27

Avatar de albertoxx

Aqui va la foto que pidio Meta, funciona dos tres, pero totalmente no adecuada para un pic como dice scooter se comio todos los pines del pic y eso que solo use 3 pines para address, ademas del refresco que tiene que tener cada 64ms minimo y no es que prefiera complicarme sino que no sabia como se usaban esas memorias, si tenia muchas de desguase pues economicamente pense que me podian servir, ahora 2 preguntas viendo ya como funcionan los simms como le hace la computadora para calcular cuanta memoria le han puesto y la segunda estaba viendo la memoria SD el CCS ya trae librerias para accesar a esa memoria o hay que buscar algunas de las que andan por el internet?
Imágenes Adjuntas
Tipo de Archivo: jpg Photo-0041.jpg (48,3 KB (Kilobytes), 38 visitas)
31/05/2013 #28

Avatar de Meta

Muy buenas la foto.



Esas memorias son rápidas para un PIC, hay PIC32 que te funciona de maravilla. Por cierto, si te preocupa de los pines, hay de 40, 60, 80 y 100 pines, también puedes entrelazar varios PIC para ese módulo.

Lo bueno es saber si realmente, aunque use las DDR3 o futuras DDR4 funcionen con un PIC tipo 16F887 o el 18F4550 a una lenta velicidad, eso es lo que no se.



http://www.pcactual.com/articulo/lab..._ram_ddr3.html

En cuanto del PC, como sabe la RAM que tiene instalada y la marca incluida.


http://www.yio.com.ar/imprimir.php?sid=176

En cuanto el PC sabe que marca tiene instalada y la capacidad sin leer todas las celdas de memoria es porque está grabada en una EEPROM, por cierto, puedes modificarla hasta con un TE20x.


Fíjate que tiene 5 integrados, uno en el centro muy pequeño y 4 iguales que son IC de RAM. El pequeño del centro es la EEPROM. Hay otros elementos como condensadores SMD para estabilizar las tensiones de la RAM. Antes había como un multiplexor en el módulo de RAM, luego lo pusieron en la placa base. Así escoge el IC de RAM adecuado como intenta hacer nuestro amigo albertoxx.

Intenta usar un PIC de 40 pines, a lo mejor te da. En esta vida hay memorias en serie y en paralelo.

En serie suelen ser más lenta, requiere protocolo de comunicación y más electrónica. En paralelo es mucho más rápida pero requiere mucho cableado y pines a cambio de menos electrónica. Hay ventajas y desventajas. Luego hay que saber si esas memorias son unificadas, todoas en un mismo segmentos o memorias segmentadas como los PIC a la hora de programarlos que tienes que cambiar de banco cada dos por tres, menos mal que en C no pasa esto.

Ahora puedes hacer más pruebas de lectura escritura.

Si tienes intención de hacer pruebas con las SIMM 30, puedes usar un PIC con más pines y experimentar, agradezco las imágenes. Por cierto, ¿usas CCS o el C18?
31/05/2013 #29

Avatar de albertoxx

Con razon las pcs antiguas al no traer esa eeprom se ponian a barrer la memoria antes de encender para ver cuanto de ram tenian por que las simm de 30 pines no traen la eeprom sino directamente los modulos de memoria, con respecto a tu pregunta Meta lo hize en ccs.

Salu2
31/05/2013 #30

Avatar de Meta

Buenas:

Algunas BIOS modernas (las nuevas se llaman UEFI) tiene la capacidad de testear la RAM completa paso a paso, puede tardar hasta media hora ya que pureba escritura y lectura en cada posición de memoria.

Adios a la BIOS, bienvenida la UEFI que acelera el arranque del ordenador

http://www.tusequipos.com/2010/10/09...del-ordenador/

Cierto, en los PC antiguos leía al encender dichos módulos de RAM y lo podíamos ver. Había posibilidad de hacer el test o no en la BIOS.

En cuanto a la RAM del PC, estaba haciendo algunas pruebas con estos ejemplos.
http://www.jarloo.com/reading-and-writing-to-memory/
http://stackoverflow.com/questions/5...s-and-variable

Ahora te toca rellenar toda posición de la memoria con un solo dato, el 0x33 por poner un ejemplo. Se que la smemorias actuales tienen direcciones de hasta 64 bits, con usar pues a poner solo 0x3333333333333333 si es en PC con DDR3, ejjejee.

En CCS:
Código:
/*Ejemplos básicos para la simulación.

Empleo del direccionamiento indirecto para rellenar un área de memoria con un
mismo valor. El área o buffer de memoria está comprendida entre las posiciones
0x30 y 0x3F. */

#include <16f886.h>                        //Incluir definiciones en C para el PIC16F886

int Valor;                                //Valor de relleno
int Contador;                            //Variable de contaje

int Buffer[16];                            //Reserva para el buffer a rellenar

main()
{
    for(Contador=0;Contador<16;Contador++)    //Repetir 16 veces
        Buffer[Contador]=Valor;                //Almacenar en buffer el valor de relleno
}
En asm:
Código:
;Ejemplos básicos para la simulación.
;
;Empleo del direccionamiento indirecto para rellenar un área de memoria con un
;mismo valor. El área o buffer de memoria está comprendida entre las posiciones
;0x30 y 0x3F.
        
            List    p=16F886        ;Tipo de procesador
            include    "P16F886.INC"    ;Definiciones de registros internos

            cblock 0x20                ;Reserva de variables a partir de 0x20
                Valor                ;Valor de relleno
                Contador            ;Variable de contaje
            endc

            org    0x00
            goto    Inicio            ;Vector de reset
            org    0x05    

;Programa principal
Inicio        movlw    .16    
            movwf    Contador        ;Un contador se carga con el nº de bytes de relleno

            movlw    0x30
            movwf    FSR                ;Inicia el registro índice con 1ª dirección del buffer
Loop_1        movf    Valor,W            ;Carga en W el valor de relleno
            movwf    INDF            ;Lo almacena en el buffer
            incf    FSR,F            ;Siguiente dirección del buffer
            decfsz    Contador        ;Es el último byte a rellenar ??
            goto    Loop_1            ;No, siguiente byte

            goto    Inicio            ;Si. Ejecutar de nuevo

            end                        ;Fin del programa fuente
Espero que puedas hacer pruebas con las SIMM 30 que posees con un PIC mayor en pines o usas dos más de los pequeños.
31/05/2013 #31

Avatar de albertoxx

Lei el articulo de jardoo y hacer eso me suena como tutorial para crakear o hacker alguna aplicacion, aunque windows si no estoy mal maneja memoria protegida y no deja que tu aplicacion acceseda a esta memoria de echo ya en el windows xp no deja accesar directamente a las interrupciones tal y como se hacia en DOS
31/05/2013 #32

Avatar de Meta

No me acordaba esa parte de la protección. Hay distribuiciones Linux que te dejan hacer de todo. Lo hacen así para dificultar a los hacker las lecturas de la RAM, claro que no es imposible y MicroSoft lo sabe.

Si lo vas a usar con un PIC, pues no tendrás esos problemas porque el Windows está diseñado así adrede por protección.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.