Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Ricerca personalizzata

Problemi lettura eprom esterna

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteMassimoB, Foto Utentexyz, Foto UtenteWALTERmwp

0
voti

[1] Problemi lettura eprom esterna

Messaggioda Foto Utentelucaking » 10 mar 2018, 11:06

Ciao a tutti, come accennato in un precedente tread, mi è capitato di usare arduino per leggere una MC27C64Q.
Senza grosse competenze scopiazzando qua e la ho messo su breadboard la suddetta e due CD4040 in cascata, che comandati da arduino uso per selezionare gli indirizzi.
Ho scritto diverse variazioni sul tema del seguente codice, dapprima sembravano funzionare, fino a quando ho confrontato gli output dopo diverse letture della stessa memoria (o porzione di essa) ed ho scoperto che il risultato spesso differiva. #-o
Codice: Seleziona tutto
static const int pulse = 12;
static const int reset = 13;
unsigned long maxAddr = 0;
boolean stringComplete = false;
char inChar;
byte outByte = 0;

void setup() {
    Serial.begin(9600);
    pinMode(pulse, OUTPUT);
    pinMode(reset, OUTPUT);
    for(int n=2; n<10; n++){  //inizializza i pin da 2 a 10 come ingressi
        pinMode(n, INPUT);
    }
}

void resetCounter(){
  digitalWrite(pulse, HIGH);
  digitalWrite(reset,HIGH);
  delay(1);
  digitalWrite(reset,LOW);
  delay(1);
}

int readByte(){
    outByte =0;
    for(int i=10; i>2; i--){            //Leggo lo stato degli 8 pin out della eprom
        int data = digitalRead(i);
//        Serial.print(data);
        outByte = outByte<<1;    //Compongo un unico byte.
        outByte = outByte | data;
        delay(1);
    }
    return outByte;
}

void loop(){
    if (stringComplete == true){
        resetCounter();
        for (unsigned int addr=0; addr<maxAddr; addr++){
            digitalWrite(pulse, LOW);
            delay(1);
            digitalWrite(pulse, HIGH);
            delay(1);
            readByte();
            Serial.print(outByte, HEX);
            Serial.print("    ");
        }
        stringComplete = false;
        maxAddr=0;
        Serial.println();
        Serial.flush();
    }
}

void serialEvent(){
    while(Serial.available()) {
        inChar=Serial.read();
        if(inChar == '\n'){
            stringComplete=true;
            break;
        }
        maxAddr*=10;
        maxAddr=((inChar-48)+maxAddr);
        if(maxAddr>65535){
            maxAddr=0;
            stringComplete=false;
            Serial.println("I can't manage such a big memory.");
        }
    }
}

In questo esempio lo scketch attende su seriale il numero di byte da leggere (che nel caso di una lettura completa dovrà corrispondere al numero massimo di byte della eprom), li legge e li printa stampa in esadecimale su seriale.
Questo è l' output dopo diverse letture dei primi 33 indirizzi.
Istantanea_2018-03-10_09-31-37.png

Ho provato ad allungare i vari delay, soprattutto tra l' avanzamento dell' indirizzo e la lettura dei pin, ad attendere la fine trasmissione su seriale (Serial.flush()) o a "svuotare" il buffer (Serial.read()) ma non mi pare cambiare nulla.
Sbaglio qualcosa ma non capisco cosa. ||O
Ogni suggerimento, anche di programmazione generale (che come avrete notato è piuttosto scarsa) è assai gradito.

Grazie per l' attenzione.
Avatar utente
Foto Utentelucaking
704 2 5 8
Sostenitore
Sostenitore
 
Messaggi: 636
Iscritto il: 29 mag 2015, 14:28

0
voti

[2] Re: Problemi lettura eprom esterna

Messaggioda Foto UtenteTardoFreak » 11 mar 2018, 1:21

Manca lo schema elettrico.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,3k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15959
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[3] Re: Problemi lettura eprom esterna

Messaggioda Foto Utentelucaking » 11 mar 2018, 9:26

Eh, in effetti l' errore stava proprio li, infatti avevo collegato gli output della eprom sui pin dal 2 al 9 di arduino e il ciclo for leggeva i pin dal 10 al 3, cosi mi perdevo il bit piu significativo.
La cosa strana è che pur non essendoci nulla collegato il pin 10 a volte tornava un valore alto e a volte basso, e quello mi ha confuso parecchio.

Ovviamente non ci sono arrivato da solo ma grazie all' aiuto di un amico.
Io era piu di una settimana che nel tempo libero mi ci scornavo ricontrollando il codice e i collegamenti senza vedere cio che avevo sotto gli occhi. ||O :oops:
Avatar utente
Foto Utentelucaking
704 2 5 8
Sostenitore
Sostenitore
 
Messaggi: 636
Iscritto il: 29 mag 2015, 14:28


Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite