Generare un'onda quadra

Tre onde quadre

Questa pagina contiene un confronto tra alcune modalità per generare un'onda quadra con un PIC18. Una sorta di approfondimento e di esempio di codifica.

Il diagramma temporale mostra i tre segnali, tutti nominalmente di 1 KHz, generati contemporaneamente dal codice riportato a fondo pagina. Al fine di garantire una migliore precisione del clock è stato utilizzato un quarzo esterno da 12 MHz:

  1. Il primo grafico BLU, canale A, è stato ottenuto utilizzando i modulo Timer1 e ECCP. Qui trovate la descrizione dettagliata del funzionamento.
  2. Il secondo grafico, RED, canale B, è stato ottenuto utilizzando Timer0. Qui trovate la descrizione dettagliata del funzionamento.
  3. Il terzo grafico, GREEN, canale C, è stato ottenuto con un ritardo software. Qui trovate la descrizione dettagliata del funzionamento.

Nel confronto della qualità del segnale generato dobbiamo tenere conto di due parametri:

Il primo grafico è perfetto, almeno stando alla precisione con cui è stata fatta la misura. Questo è dovuto al fatto che il periodo del segnale è interamente gestito dall'hardware di Timer1 e dal modulo ECCP. L'unica situazione critica potrebbe nascere dal ritardo eccessivo con cui viene gestita la ISR in un sistema molto carico, anche se ciò causerebbe problemi esclusivamente alla gestione del software della ISR e non alla frequenza con cui sono generate le interrupt.

Il secondo grafico presenta una leggera diminuzione della frequenza, causata dal fatto che, sebbene il periodo generato sia esattamente 1 ms, al software è richiesto un certo tempo per inizializzare Timer0 per un nuovo conteggio. Questo errore potrebbe essere corretto tenendo conto del tempo necessario al completamento del software presente nella ISR, soluzione valida solo se il processore non è eccessivamente carico. Anche il jitter risente della variabilità nell'esecuzione del codice

Il terzo grafico presenta una diminuzione significativa della frequenza, dovuta al fatto che il ritardo software (di per se preciso) è continuamente interrotto per l'esecuzione delle interrupt. Eventuali interventi sulla durata del ritardo risentono eccessivamente del numero di interrupt generate nel sistema ed in genere da quanto il processore è carico. Anche il jitter ovviamente risente di questi problemi.

Codice


Licenza Creative Commons Attribuzione 4.0 Internazionale


Pagina principaleAccessibilitàNote legaliPosta elettronicaXHTML 1.0 StrictCSS 3

Vai in cima