Página 2 de 5

Re: Comprobador de Memorias 4116, 4164 y quizás 41464

Publicado: 19 Ago 2020, 15:24
por Kyp
Popopo escribió: 19 Ago 2020, 11:47 cómo la protegerías?
Estoy haciendome ya la placa de pruebas para la serie 4164 y diseñando el software, me gustaría saber como la proteges.
He dicho que hay que tenerlo en cuenta, no que sepa como hacerlo :)) :)) :))
Buscaría algún tipo de chip regulador que tenga ese tipo de protección, aunque, bueno, la mayoría la tienen :|
Se puede controlar con un sensor de corriente (una resistencia) y si sube mucho cortar la alimentación por ejemplo.

Yo el principal problema que le veo es que no va a haber pines suficientes para todo con un Arduino. Recuerdo que había un problema con eso. Esas memorias necesitan refresco. Normalmente el hecho de leer/escribir toda la memoria sirve de refresco, pero si se lee/escribe a base de cambiar pines individualmente el Arduino es muy lento y no se cumplen los timings necesarios para el refresco, había que usar un método que cambia grupos de pines a la vez y en ese caso no hay tantos pines como parece.

Re: Comprobador de Memorias 4116, 4164 y quizás 41464

Publicado: 19 Ago 2020, 16:44
por dandare
La manera trivial (y efectiva) de controlar la corriente maxima de una fuente es poner una resistencia en serie.

Re: Comprobador de Memorias 4116, 4164 y quizás 41464

Publicado: 19 Ago 2020, 17:10
por Popopo
Kyp escribió: 19 Ago 2020, 15:24
Popopo escribió: 19 Ago 2020, 11:47 cómo la protegerías?
Estoy haciendome ya la placa de pruebas para la serie 4164 y diseñando el software, me gustaría saber como la proteges.
He dicho que hay que tenerlo en cuenta, no que sepa como hacerlo :)) :)) :))
Buscaría algún tipo de chip regulador que tenga ese tipo de protección, aunque, bueno, la mayoría la tienen :|
Se puede controlar con un sensor de corriente (una resistencia) y si sube mucho cortar la alimentación por ejemplo.

Yo el principal problema que le veo es que no va a haber pines suficientes para todo con un Arduino. Recuerdo que había un problema con eso. Esas memorias necesitan refresco. Normalmente el hecho de leer/escribir toda la memoria sirve de refresco, pero si se lee/escribe a base de cambiar pines individualmente el Arduino es muy lento y no se cumplen los timings necesarios para el refresco, había que usar un método que cambia grupos de pines a la vez y en ese caso no hay tantos pines como parece.
:) no es la idea, quiero decir cambiar pines continuamente. La configuración de pines es variable y a la vez estática. No será un problema. Me han dicho que puedo configurar los pines análogicos como digitales, eso me da mucha vida, ahora lo que debo de saber es que pines no puedo usar porque son dedicados a algo, por ejemplo D0 y D1 se que no puedo usarlos porque son para la comunicación serie.

Ahora andaba indagando donde poner los pulsadores para cual quiera de las dos configuraciones iniciales que pretendo en la primera etapa, la del 4116 y 4164, así como dos pines más para los dos diodos que sustituyen a la pantalla.

Re: Comprobador de Memorias 4116, 4164 y quizás 41464

Publicado: 19 Ago 2020, 17:11
por Popopo
Ben-kenobi escribió: 19 Ago 2020, 16:09 Me apunto a uno
¿con qué menú de selección? quiero decir, ¿pantalla, carcasa, condensador de fluzo?...

Re: Comprobador de Memorias 4116, 4164 y quizás 41464

Publicado: 19 Ago 2020, 17:14
por Popopo
dandare escribió: 19 Ago 2020, 16:44La manera trivial (y efectiva) de controlar la corriente maxima de una fuente es poner una resistencia en serie.
Es justo lo que me ha recomendado Llopis, me ha surgido por tanto una duda... la alimentación máx que me da el Arduino nano son 5v, la tensión para un 4164 son 5v, si a cada pin de conexión le meto una resistencia... ¿no cae la tensión demasiado para que de fallos de comunicación?.

Por otro lado, tendría que estar controlando en cada N ciclos que la tensión es adecuada, ¿no? en caso de corto la tensión cae a 0 y la que tendría es la de la resistencia, tendría que estar escaneando cada puerto analógico (y no se si tengo suficientes (no, no tengo suficientes) para detectarla, así como el problema del refresco. No sé si ando muy desencaminado, pero por ello andaba pensando en quizás usar un buffer o Mosfet.
¿Qué opinas?

Re: Comprobador de Memorias 4116, 4164 y quizás 41464

Publicado: 19 Ago 2020, 18:07
por dandare
Normalmente, la impedancia de entrada de los chips es muy alta, por lo que la resistencia en serie no provoca caídas de tensión significativas.
No hace falta comprobar nada analógicamente, si limitas la corriente a menos del maximo IO de un pin de arduino, lo más que circulara será eso. Digamos unos 5mA. Para eso necesitarás resistencias de 1K

Re: Comprobador de Memorias 4116, 4164 y quizás 41464

Publicado: 19 Ago 2020, 18:25
por Kyp
No hace falta controlar todos los pines, basta con poner la resistencia en serie con la alimentación. Es una resistencia pequeña, de unos pocos ohmios, que a un consumo normal de unos pocos mA el voltaje que cae en la R es un 0 lógico y si hay un corto entonces sube la tensión hasta dar un nivel lógico alto que puedes detectar y en ese caso apagar la fuente.

Re: Test de Memorias 4116, 4164 y 41464 - NEWS

Publicado: 22 Ago 2020, 12:38
por papanillu
Bueno,

Hoy he tenido algo de tiempo, y he hecho lo que seria la "concept proof" del software del tester.
Yo para estas cosas uso un Arduino uno, que tengo montado junto a unas placas de estas de pruebas.

He grabado un video del funcionamiento y lo he enviado al grupo de telegram, Luego miro de subirlo aquí.
de momento aquí esta el fuente para cargarlo en un Arduino y probar.

No esta afinado, ni depurado ya que no tenia demasiado tiempo, y necesitaba hacer el menú.
Mide unos 4 Kb, mas los 3 de cada test de memoria en bruto, serian unos 12 -13 Kb, o sea, por memoria todavía nos cabe,

Enlace al video;



Y el codigo:


#include <Wire.h> // Library for I2C communication
#include <LiquidCrystal_I2C.h> // Library for LCD
LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 20, 4);

const int buttonPin = 2; // Pin asignado al pulsador, es el primero despues de RX y TX
//const int ledPin = 13; // Pin asignado al led de test de desarrollo,
// Al ser el por defecto y tener un led instalado no necesitamos cablear nada durante el desarrollo
// variables Globales,
int buttonState = 0; // para leer el pulsador
int contadormenu = 0; // Para cargar el valor seleccionado
int action = 0; // Vamos incializando variables
int OKMenu = 0; // esta es para la cuando damos pulsacion larga y convertimos en OK
char mostrar[5]; // Para mostrar valores en pantalla
#define MAXMENU 4 // Numeo Maximo de opciones de menu

unsigned long Tinicio; //Momento en que se pulsa el pulsador
unsigned long Tfin; //Momento en que se libera el pulsador
unsigned long Tpulsacion; //Diferencia Tfin-Tinicio
long Retardopulsacion = 500; //Tiempo pulsacion larga,
//Hay que afinar este tiempo, ya que parece no cuadran los milisegundos leidos con tiempo real
void setup() {

lcd.init();
lcd.backlight();
// initialize the LED pin as an output:
// pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}

void menuread()
{
Tinicio= millis();
buttonState = digitalRead(buttonPin);
// check if the pushbutton is pressed. If it is, the buttonState is HIGH:
if (buttonState == HIGH)
{
do {
buttonState = digitalRead(buttonPin);
Tfin = millis();
} while (buttonState == HIGH);
Tpulsacion = (Tfin-Tinicio);
if (Tpulsacion > Retardopulsacion)
{
// significa pulsacion larga, No hay que incrementar opcion de menu y activar OK
OKMenu=1; //Asignamos 1 como OK
} else {
// Enciende LED
// digitalWrite(ledPin, HIGH); // Para control visual de bonton pulsado, luqego quitar
OKMenu=0; //Asignamos 0 como no OK
++contadormenu;
if (contadormenu > MAXMENU ) contadormenu=1;
}
} else {
// turn LED off:
// digitalWrite(ledPin, LOW);
}
}

void ramtest()
{

// Aqui vendra la rutina de testear memoria;
// de momento ponemos una espera de unos cuantos segundos, y un contador para que sea mas visual

int espera=1000;
lcd.setCursor(12,2);
lcd.print(" 0%");
delay(espera);
lcd.setCursor(12,2);
lcd.print("10%");
delay(espera);
lcd.setCursor(12,2);
lcd.print("30%");
delay(espera);
lcd.setCursor(12,2);
lcd.print("50%");
delay(espera);
lcd.setCursor(12,2);
lcd.print("70%");
delay(espera);
lcd.setCursor(12,2);
lcd.print("90%");
delay(espera);
lcd.setCursor(11,2);
lcd.print("100%");
OKMenu=0;
action=0;
lcd.setCursor(0,3);
lcd.print("RAM OK, Press.....");
do
{
buttonState = digitalRead(buttonPin);
Tfin = millis();
} while (buttonState == LOW); //Esperamos hasta que se pulse el boton

// Inicializamos y volvemos al Inicio.
delay(1000);
contadormenu=0; // Si no inicializamos, permacera activo la ultima seleccionada
}

void loop() {
// (Columna, Fila) Comenzando por 0
lcd.setCursor(0, 0);
lcd.print("Ram Tester VDR 0.1 ");
lcd.setCursor(0,1);
lcd.print("No chip Selected ");
lcd.setCursor(0,2);
lcd.print("Short press change ");
lcd.setCursor(0,3);
lcd.print("long press OK ");


// Bucle donde controlamos el menu
do
{
menuread();
switch (contadormenu)
{
case 1:
lcd.setCursor(0,1);
lcd.print(" 4464 ");
break;
case 2:
lcd.setCursor(0,1);
lcd.print(" 4116 ");
break;
case 3:
lcd.setCursor(0,1);
lcd.print(" 4164 ");
break;
case 4:
lcd.setCursor(0,1);
lcd.print("41464 ");
break;
}

if (OKMenu==1 && contadormenu != 0 ) action=1; //Validando contadormenu nos aseguramos que no se lanza un test sin opcion.

}while (action==0);

lcd.setCursor(0,2);
lcd.print("Testing... ");
lcd.setCursor(0,3);
lcd.print(" ");
ramtest();
}

Re: Test de Memorias 4116, 4164 y 41464 - NEWS

Publicado: 22 Ago 2020, 13:26
por flopping
Buena prueba de concepto, no sabia yo que ese tipo de pantallas se podian gobernar con dos pines solo, ¿tienes el esquema de conexionado del circuito, aunque sea escrito a mano?, salu2.

Re: Test de Memorias 4116, 4164 y 41464 - NEWS

Publicado: 22 Ago 2020, 13:45
por Popopo
► Mostrar Spoiler
Muchas gracias papanillu, estaba haciendo el menú a base de LEDs y escribiendo la estructura en los huecos, en caso de que no tuvieras el tiempo para hacerlo que se que andas bastante liado.
Gracias

PD: veo que finalmente has optado por usar un solo pulsador :) esta muy bien, la mía tira a usar dos, pero claramente si al final no tengo pines suficientes haré como habíamos hablado y como has hecho tu... 1 solo pulsador para gobernarlos a todos :)