Visualizza messaggio singolo
Vecchio 06 luglio 07, 22:20   #41 (permalink)  Top
MSchiepp
User
 
L'avatar di MSchiepp
 
Data registr.: 21-01-2004
Residenza: Milano
Messaggi: 989
Citazione:
Originalmente inviato da Mrk89
...Nel "main" si leggono gli ADC e si pilotano altri dispositivi ( lettura pulsanti vari, pilotaggio display) e con l'interrupt si genera la trama degli 8 canali...quindi il timer interno deve dare un'interrupt ogni 20ms...giusto??
Dato che mi sembra tu non abbia particolare dimestichezza con le macchine a stati, che come ha consigliato RIVP6, sono la Soluzione (con la S maiuscola...) puoi incominciare con una semplificazione che puoi far evolvere in modo semplice e che non usa interrupt. Dato che mi sembra che tu stia usando un PIC supponiamo di avere un PIC a 4Mhz (è sufficiente per fare tutto, se poi vai più veloce, meglio).
All'inizio del ciclo di main carichi il timer0 (con prescaler /128) a 99d e azzeri il bit T0IF; il timer scatterà dopo 20 mS. Nel frattempo leggi i convertitori ed i tasti; se vedi che facendo tutto quello che devi fare rischi di superare i 20mS, dividi le operazioni in due: ad ogni giro di main fai una volta la lettura dei convertitori e la volta dopo la lettura dei tasti. Alla fine di ogni ciclo aspetti che il T0IF vada ad uno, il che segnala che sono passati i 20mS; ricarichi il timer a 99d, azzeri T0IF e generi gli otto impulsi usando il timer1 a 16 bit con risoluzione 1uS: azzeri il bit TMR1IF e carichi il timer con 65535-il valore in uS del ritardo che vuoi ottenere, setti il bit di uscita e aspetti che TMR1IF vada ad 1: nel caso peggiore hai un errore di 2 uS; quando hai finito di inviare i dati di ogni canale riprendi il loop principale e ti ritroverai ad aspettare il timer0 che segnala la fine dei 20mS... e così via.

Alla prossima puntata (se ci sarà) come trasformare questa struttura in una macchina a stati.

Michele
__________________
__________________________________________________
The worst day flying is better than the best day working.
MSchiepp non è collegato   Rispondi citando