Buongiorno a tutti, ho una bella grana da risolvere e non riesco a venirne a capo quindi mi appello a voi con la speranza che qualche buona anima possa darmi qualche dritta. Ho costruito una scheda con l'integrato HCTL-2032 della Agilent (Avago) che =E8 un encoder counter. Accetta in ingresso dei segnali provenienti da un encoder (fase A e fase B sfasati di 90=B0) e restituisce in uscita il conteggio dell'encoder sotto forma di 32 bit che possono essere letti sequenzialmente a pacchetti di 8 bit agendo sui due selettori SL1 e SL2. Inoltre c'=E8 un bit chiamato OE (Output Enable) che mette a disposizione sui famosi 32 bit il conteggio attuale. Quindi la sequenza di lettura =E8 :
1) OE=3D0 (rendo disponibile i 32 bit) 2) SL1=3D 1, SL2=3D1 3) leggo 8 bit 3) SL1=3D1, SL2=3D0 4) leggo 8 bit 5) ... n) OE=3D1 (metto in tristate le uscite D0..D7)Ora veniamo al mio problema... Per andare a leggere gli 8 bit utilizzo la porta parallela in configurazione bidirezionale (EPP)
*** INGRESSI ***- D0..D7 (pin 2,3,4,5,6,7,8,9 della parallela) [data register =3D BASE]
*** USCITE ***- Strobe (pin 1 della parallela) [control register =3D BASE+2]: utilizzato come OE
- Linefeed (pin 14 della parallela) [control register =3D BASE+2]: utilizzato come SL1
- Initialize (pin 16 della parallela) [control register =3D BASE+2]: utilizzato come selezione dell'asse X/Y
- Select Printer (pin 17 della parallela) [control register =3D BASE+2]: utilizzato come SL2
il tutto funziona solo che a volte, con l'encoder fermo, vedo cambiare il conteggio dei 32bit. Analizzando meglio il problema vedo che uno (o pi=F9) dei 4 byte effettua una lettura errata. Ad esempio una lettura corretta =E8 :
0xFF, 0xFE, 0x34, 0xC4 che ogni tanto si tramuta in... 0xFF, 0xFE, 0x34, 0xFF