Jump to content
PLC Forum


EMU SP-12 non funziona


ez9
 Share

Recommended Posts

16V8, combinatoria. Se protetta, ci vuole pazienza, ma è fattibile. Quelle con la R al posto della V sono sequenziali, possono essere parecchio complicate.

Quando tutto funzionerà, metti una bella foto della scheda con tutti chip, e anche dell'oggetto in funzione.

 

Link to comment
Share on other sites

  • 6 months later...

 

 

Ri aggiorno dopo alcuni mesi di assenza dove non ho avuto proprio tempo di guardare l'EMU, provo a rimettermi al lavoro per completare i test e...con grande sorpresa l'EMU si accende ma non carica piu' la rom di debug, non capisco il perche', sono sicuro che dopo aver sostituito il PAL la rom di debug veniva letta ,ho anche una foto che conferma sul display il boot in debug "Diagnostic 1.8 Enter Test #". ora non piu', sul display mi da "SP-12 Turbo vers. 2.6 1/20/87". Con  la rom originale parte correttamente e mi chiede di selezionare la traccia da suonare. Pensavo quindi alla rom di debug rovinata, mi sono procurato un lettore di ROM ho provato a leggere la rom di debug con un file trovato in rete ed e' identica, ho poi anche programmato un'altra ROM 74C64 con il file preso dalla rete e messo su, ma non carica piu' la diagnostica...non capisco quale possa essere il problema.

Ora mi mangio le mani per non aver fatto le diagnosi prima quando la leggeva ma purtroppo non ho avuto tempo.

com'e' possibile che legga una ROM si e l'altra no?

 

Allego la foto della board principale montata

 

EMU-SP12.png

Link to comment
Share on other sites

  • 4 months later...

Buongiorno! torno dopo mesi ad occuparmi dell EMU (purtroppo il tempo per giocare e' sempre poco)

A questo punto visto che il boot normale va ma in diagnostica no e il problema non e' la ROM, penso che ci sia qualche RAM che non funziona correttamente.

in questa configurazione Turbo ci sono 29 chip 8464-15L 64K RAM a 8 Bit. Tensione di alimentazione e massa arriva correttamente a tutti i chip.

Ho pensato di procedere con un tester per le ram.

Ho preso un arduino Mega per avere tutte le uscite ingressi necesari e mi ho fatto un loop per testare tutti gli indirizzi.

Ho fatto un loop che scrive e poi legge per ogni singolo indirizzo della RAM da 0 a 8191 una sequenza di bit variabili in questo modo:

 

00000000

00000001

00000011

00000111

.....

11111111

01111111

00111111

...

0000000

 

in pratica sono 17 scritture/ letture per ogni indirizzo

 

Ho letto qualcosa a riguardo e questa dovrebbe essere una procedura corretta per minimizzare i i cicli di lettura/scrittura e velocizzare il test.

Secondo voi puo' essere un test attendibile fatto in questo modo?

l'ho fatto partire su una ram ma dopo circa 10 min era solamente a meta'... ho messo un delay di 2 millisecondi ad ogni cambio dello stato tra lettura e scrittura, forse potrei scendere a 1 in teoria la RAM dovrebbe avere tempo di accesso di 150 nS

 

Link to comment
Share on other sites

Sono zoccolate, non hai un semplice programmatore di Eprom che testa anche le RAM?

Altrimenti, per fare prima, scrivi in ogni indirizzo 0x55 e poi rileggilo con una piccola pausa. Se va  bene passa al successivo. Al termine, scrivi e rileggi da capo 0xAA. Se per ogni scrittura/lettura impieghi 1us, ci dovresti mettere un totale di 131ms per entrambe le operazioni (sono in tutto 65536x2 scritture/letture).

Ma anche nel tuo caso, 17 operazioni diciamo a 500ns (150n+pausa+150n), dovresti fare 17x65536 cicli = 1,114,112 cicli => 556ms.

Ma mettendo un ritardo di 2ms tra ciclo e ciclo, hai in totale 2.23s solo per le pause, quindi non mi torna lo stesso come mai il test è così lento.

 

Ah, perché quei due valori? 0x55 è 01010101b e 0xAA è 10101010, come si vede si alternano i bit di ogni byte, quindi con due soli valori si testano i cambi di stato di tutti e 8 i bit.

Edited by Ctec
Link to comment
Share on other sites

No purtroppo no non ho tester per le ram. Comunque posso provare a ridurre i cicli di scrittura come da te suggerito poi posso sempre rifare i test se ho dubbi con cicli più lunghi 

Link to comment
Share on other sites

  • 3 weeks later...

Allora ho fatto qualche test ma praticamente tutte le RAM mi danno qualche errore (circa 100-170 errori) su un ciclo di 2 scritture totali quindi 16382 letture/scritture

 

Inizio a dubitare che il test non sia affidabile, ho provato anche ad allungare i tempi ma non cambia nulla.

 

inizialmente avevo messo scritte sul serial output su ogni operazione ma poi ho visto che rallenta molto e quindi ho lasciato solo in caso di errore.

 

il test fa una scrittura completa di tutta la Ram con valore 0x55, poi ripassa a leggere per verifica, poi riscrive tutta la ram con 0xAA e verifica di nuovo.

Ripetendo il test non sempre gli errori capitano sugli stessi indirizzi.

Ho provato anche a testare un singolo indirizzo segnalato dagli errori e provando tutte le combinazioni da da 0 a 255 e a volte e' passato senza problemi

 

metto qui il loop di scrittura:

 

void writeData (int addressCounter, byte dataCounter)
{
  //Set data Pin modes to output
  for (int i=0;i<8;i++)
  {
    pinMode (dataPins[i], OUTPUT);
  }
  // Disable Outputs
  digitalWrite(GPin, HIGH);
  // Enable CE1 Outputs
  digitalWrite(E1Pin, LOW);
  // Enable CE2 Outputs
  digitalWrite(E2Pin, HIGH);
  // Setup address Bits
  for (int i=0;i<13;i++)
  {
    if (bitRead(addressCounter, i)==1)
    {
      digitalWrite(addPins[i],HIGH);
    }
    else
    {
      digitalWrite(addPins[i],LOW);
    }  
  }
   // Setup Data Bits
  for (int i=0;i<8;i++)
  {
    if (bitRead(dataCounter, i)==1)
    {
      digitalWrite(dataPins[i],HIGH);
    }
    else
    {
      digitalWrite(dataPins[i],LOW);
    }  
  }
// Set Write mode
digitalWrite(WPin, LOW);
delay (2);
// Set Read mode
digitalWrite(WPin, HIGH);
// Disable CE1 Outputs
  digitalWrite(E1Pin, HIGH);
  // Disable CE2 Outputs
  digitalWrite(E2Pin, LOW);
}

 

Allego ciclo di scrittura della Ram 8464

 

Si puo' allegare il codice arduino? vedo che negli allegati accetta solo formati immagine

RAM8464-Write.jpg

Edited by ez9
Link to comment
Share on other sites

Livio Orsini

Non è detto che siano le memorie difettose, ci possono essere problemi sul bus, anzi per mia esperienza è più facile che si tratti di spikes e rumori sul bus e sull'alimentazione

Io solitamente usavo cicli di scrittura di un byte = 55h alternato a AAh,al termine rileggevo; poi ripetevo partendo con AAh alternato a 55H. Questo permette di capire ancora meglio se ha problemi la memoria. Se è un problema di memoria trovi esempre i medesimi errori ai medesimi indirizzi; se gli errori e gli indirizzi variano è molto probabile che sia un problema legato al bus o all'eccesiva "rumorosità".

Mi è capitato, con alimentazione non ben filtrata, di avere numerosi errori random dovuti a spikes presenti sull'alimentazione.

Link to comment
Share on other sites

ok, grazie del consiglio, al momento sto alimentato la RAM con l'uscita di arduino, che e' alimentato dalla USB del pc. vedo di rifare i test usando un alimentatore esterno

Link to comment
Share on other sites

Ho provato a rifare i test con un alimentazione esterna e la situazione e' un pochino migliorata sono sceso da una media di 180 errori a circa 50 errori, su circa 16300 letture/scritture.

Quello che non capisco che all'improvviso si creano dei distrurbi su tutte le uscite/ingressi si Arduino che mi falsano il risultato. visibili anche con l'oscilloscopio, qui in foto anche non molto evidenti ma a volte i picchi sono molto pronunciati.

PS. la ram l'ho montata su una breadboard e i fili per collegare il bus e gli indirizzi saranno lunghi al max 10 cm. potrebbe essere questo il problema?

sinceramente pensavo fosse piu' semplice testarle con arduino.

 

magari potrei introdurre un loop di scrittura lettura che se entro 3-5 tentativi non riesce ad ottenere il dato corretto mi fallisce il test e passa all'indirizzo successivo, pero' se i distrubi permangono temo che anche questo ulteriore controllo possa fallire.

 

 

 

Distrubi.jpg

Edited by ez9
Link to comment
Share on other sites

Livio Orsini

Arduino lo alimenti da usb?

prova ad alimentarlo esternamente tramite un alimentatore serio e ben filtrato; usa un alimentatore che eroghi circa 9V e possa erogare almeno 0,5A di corrente.

Anche il collegamento con fili volanti potrebbe raccogliere disturbi.

 

Sono verifiche delicate dove anche il layout del sistema di test ha influenza.

Link to comment
Share on other sites

Inizialmente si, alimentavo da USB, poi ho messo alimentatore stabilizzato  (0-70V regolabile max 10A ) e' un alimentatore professionale.

Ho anche scollegato la USB, in numero di errori e' sceso molto ma anche cosi qualche errore lo da. (circa una media di 50 errori) su 16000 letture/scritture

 

 

 

Edited by ez9
Link to comment
Share on other sites

Livio Orsini

Sono sempre propenso a considerare i disturbi come causa degli errori. Gli errori, se fossero dovuti a difetti delle memorie, serebbero sempre algi stessi indirizzi. Se, come hai scritto, si presentano ad indirizzi differenti allora è questione di disturbi, o di comandi non ben sincronizzati con i dati e gli indirizzi. Per esempio se hai del jitter sul comando di write e sei un po' al limite con i tempi, ti può capitare di scrivere male.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...