è un'idea
ci ho lavorato più o meno tra il 2004 e il 2005... mi pare che bisognava dare corrente a una coppia e leggere i valori sui 2 fili restanti, poi invertire e rifare... tipo ponte di Wheatstone... non so se ho lo schema ma di sicuro ho il sorgente, asp
switch(AnaState) {
case 0:
TRISB=0b00000101;
LATB &= 0b11110000; // NON altero PORTB
LATB |= 0b00000010; // do corrente a Y (preparo a leggere X)...
SetChanADC(ADC_CH0);
break;
case 1:
ConvertADC(); // parte la conversione...
break;
case 2:
// leggo il valore di X, come da lettura impostata poco fa...
mouXPos=(ReadADC() / 16); // ReadADC= 0..1023
// tolgo corrente a Y
TRISB=0b00001010;
LATB &= 0b11110000; // NON altero PORTB
LATB |= 0b00000001; // do corrente a X (preparo a leggere Y)...
SetChanADC(ADC_CH1);
break;
case 3:
ConvertADC(); // parte la conversione...
break;
case 4:
// leggo il valore di Y, come da lettura impostata poco fa...
mouYPos=31-(ReadADC() / 16); // ReadADC= 0..1023
// l'asse Y è di solito invertito (voglio l'org in alto-sinistra)
break;
case 5: // tolgo corrente
TRISB=0b00001001;
LATB &= 0b11110000; // NON altero PORTB
LATB |= 0b00000010; // do corrente per leggere Z (su X+)...
SetChanADC(ADC_CH0);
break;
case 6: // tolgo corrente
ConvertADC(); // parte la conversione...
break;
case 7:
scanAnaState8:
// leggo il valore di Y, come da lettura impostata poco fa...
mouZPos=(ReadADC() / 32); // ReadADC= 0..1023
// sublw 00011111b ; se leggessi l'altro ramo...
// sembra che bisognerebbe compensare un po', la Z diminuisce man mano che le Y aumentano...
// movfw mouZPos
if(mouZPos > MOV_THRS_OK-1) {
if(!(FLAGS & (1 << TRIGM2))) { // ...SOLO la 1° volta (nell'ambito di una pressione; evita AUTO_REPEAT!)!
if(mouXPos < (ANA_OFS_X-1))
goto noTrigM;
if(mouXPos >= (ANA_SIZE_X-ANA_OFS_X))
goto noTrigM;
if(mouYPos >= (ANA_OFS_Y-1))
goto noTrigM;
if(mouXPos <= (ANA_SIZE_Y-ANA_OFS_Y))
goto noTrigM;
FLAGS |= (1 << TRIGM);
goto scanAnalogFine;
}
}
else {
noTrigM:
FLAGS &= ~(1 << TRIGM);
FLAGS &= ~(1 << TRIGM2);
}
break;
default: // stati intermedi di attesa (2006)
break;
} // switch AnaState