Come ti scrivevo, l'impiego che fai del "do/while", con quel test, non è corretto.
I tempi che rilevi con l'oscilloscopio credo siano coerenti.
La gestione del timer 0 è corretta.
La forma d'onda che tu vuoi ottenere, nelle intenzioni, in pratica è un frenetico (microsecondi rispetto ai millisecondi) passaggio da 1 a 0 a 1 ... delle uscite.
Infatti, se hai un sensore attivo (esempio "FRONTinhibitedPort"), il flusso del programma, a prescindere dal valore che in quel momento ha la variabile "tempo" (può anche essere a 0, 1, 2 ... non importa), ti porta ad accedere a ...
- Codice: Seleziona tutto
while(FRONTinhibitedPort)
{ // entri qui ...
do
{ // ... ed entri qui ...
MOTORE1OUTpos=1; // ... e sequenzialmente fai questo ...
MOTORE2OUTpos=1; // ... poi fai questo ...
}
while(tempo==15); // ... a prescindere dal valore di tempo
do
{ // ... quindi entri anche qui ...
MOTORE1OUTpos=0; // ... e fai anche questo ...
MOTORE2OUTpos=0; // ... e poi fai anche questo.
}
while(tempo==200); // ... sempre a prescindere dal valore di tempo
}
... dove sequenzialmente (senza quindi rispettare i periodi da te desiderati) le due variabili vengono prima poste a 1(uno) e poi a 0(zero) in quanto lo statement "do/while" lo esegui
sempre, almeno una volta, pur non risultando valida la condizione che lo governa.
Ogni tanto, però, potresti riuscire a vedere un impulso corrispondente a poco più di 100 microsecondi.
Chiarito ciò, puoi trovare la soluzione (una soluzione) all'inghippo.
Puoi fare in diversi modi, proponine uno.
Saluti
W - U.H.F.