Actualmente estoy tratando de probar algunas NVSRAM antiguas para asegurarme de que funcionan antes de ponerlas en uso. Me gustaría probarlos de forma independiente y estoy pensando que un arduino podría ser el truco. En teoría, ¿debería un arduino mega ser capaz de manejar esto?
PUERTO = DQ0-DQ7
PORTA = A0-A7
#define E 2
#define G 3
#define W 4
void fillOne();
void setup() {
Serial.begin(9600);
pinMode(E, OUTPUT);
pinMode(G, OUTPUT);
pinMode(W, OUTPUT);
DDRA = B11111111; // sets port a to output
DDRC = B11111111; // set port c to output
digitalWrite(E, HIGH);
digitalWrite(G, HIGH);
digitalWrite(W, HIGH);
}
void loop() {
fillOne();
}
//Test One
void fillOne()
{
int fail = 0;
int address = 0;
PORTC = B11111111; // Sets Dataline to one
Serial.print("Test Start");
for (address = 0; address < 256; address++)
{
PORTA = address;
digitalWrite(W, LOW);
digitalWrite(E, LOW);
digitalWrite(W, HIGH);
}
//Read Back and check for One
// Sets Datalines to one
digitalWrite(W, HIGH);
digitalWrite(E, HIGH);
PORTC = 0x00;
DDRC = 0x00;
for(address = 0; address < 256; address++)
{
PORTA = address;
digitalWrite(G, LOW);
digitalWrite(E, LOW);
if(PORTC != B11111111)
fail ++;
digitalWrite(G, HIGH);
}
if(fail > 0)
{
Serial.print("FAIL");
Serial.print(fail);
while(1);
}
Serial.print("PASS");
while(1);
}
Actualización: lo configuré para usar solo A0-A7 hasta que funcione, luego se expandirá a otros bits. También lo estoy programando solo con 1, por lo que es más fácil de depurar por ahora. No está funcionando del todo, creo que es el direccionamiento. Tengo la dirección establecida en INT y va de 0 a 256. Si envío el int a un PUERTO, debería enviar ese número en binario, ¿correcto?
Sí, deberías poder hacer eso. La parte que está utilizando requiere 21 pines para direccionamiento, 8 pines para datos y un par de pines para habilitar escritura, etc. El Arduino Mega tiene 54 pines IO digitales, por lo que debería poder conectarlo y listo.
Sin embargo, cosas que debe verificar: verifique los voltajes esperados para los pines en la SRAM para ver cómo definen los niveles lógicos alto/bajo, y asegúrese de que corresponda con lo que está enviando su Arduino. En el peor de los casos, es posible que necesite alguna conversión de nivel en el medio. También es posible que necesite resistencias desplegables en los pines SRAM para asegurarse de que las cosas estén en 0 cuando espera que estén. Y verifique la resistencia interna / el consumo de corriente en el chip para asegurarse de que no intente absorber más corriente de la que pueden entregar los pines IO digitales de Arduino. De lo contrario, podría dañar el Arduino.
No hay razón por la que no funcionaría. Solo requiere muchos pines. Dependiendo de la cantidad de pines de E/S que tenga su chip, es posible que deba usar expansores de puertos, registros de desplazamiento, pestillos/flip flops u otros componentes para obtener suficientes pines. Un método común para interactuar con RAM con buses de direcciones anchas es usar latches de direcciones para multiplexar las líneas de direcciones de orden alto con las líneas de direcciones de orden bajo.
usuario_1818839
usuario39382
quimica hibrida
bruce abbott
bruce abbott