ciao Ste,
beh in realta mi sono reso conto, che usando le librerie mTouch di microchip, e quindi usando quanto già fatto da loto, tutto funziona già in interrupt mode.
ho quindi utilizzato questo stratagemma
:
Una volta captato il segnale, quindi il valore alto su MCLR faccio:
if (JUMPER == ON && FUNC_JUMP == OFF && FUNC_IN == ON && LED0 == OFF )
{
mTouch_DisableScanning();
__delay_ms(250);
while (ex > 0) //ciclo finche non arrivo a 0
{
__delay_ms(2); // delay 2 ms
if (FUNC_IN == ON) {ex = 12;} // se on riporto var a 12
if (FUNC_IN == OFF) {ex--;} // se trigger off decremento variabile e ricontrollo ogni 2 ms.
}
NOP();
ex = 12;
mTouch_EnableScanning();
}
poichè 12 * 2 è maggiore dei 10 ms sono sicuro che il segnale non è piu presente.
che te ne pare?
Ora però vorrei implementare qualcosa che mi controlla che il programma non sia andato in stallo o si sia bloccato. Cosa posso fare?
poi te ne sparo un'altra: xc8 sembra che abbia embedded il __delay_ms()ma non rispetta, almeno con il mio PIC, i tempi reali.
questo il clock:
OSCCON = 0b11110000; // 32 MHz Fosc w/ PLLEN_ON (config bit)
#define _XTAL_FREQ 32000000 // <-- Oscillator frequency of your MCU in Hz
Quando valorizzo la define a 32mhz i tempi di dalay non sono veritieri ma sono ok se lo imposto a 16Mhz. Why?
Ale