In questa pagina vengono mostrati i passi per arrivare a scrivere il codice di un trasmettitore seriale (nota 1) sincrono (nota 2): per esempio un byte potrà essere letto da 8 interruttori collegati direttamente al PIC18 e quindi trasferito serialmente dal PIC18 ad un registro SIPO 74HC164 a cui sono collegati 8 LED.
Si tratta di un esercizio e quindi non è presente alcun codice di esempio.
Una soluzione alternativa hardware è descritta alla pagina MSSP/SPI in assembly
Ovviamente prima di progettare il software e l'hardware occorre individuare nei fogli tecnici le funzioni dei pin del registro SIPO, in particolare il clock ed il dato in ingresso. L'uso del reset in questo caso potrebbe essere anche tralasciato, ma per chiarezza è consigliabile azzerare tutte le uscita prima di trasmettere il byte.
E' necessario disegnare il diagramma temporale che si desidera ottenere e dare nomi significativi ai pin, da utilizzare anche successivamente all'interno del codice.
Il diagramma temporale seguente è reale e mostra quanto è lecito attendersi. Dall'alto:
SI noti che il valore del dato è significativo solo in corrispondenza del fronte attivo del clock (quale?). Per esempio, il terzo breve impulso sulla linea del dato seriale non ha alcun significato.
Le otto uscite del SIPO 74HC164 vanno collegate ad altrettanti LED (con resistenza in serie!). I tre ingressi vanno collegati a tre uscite qualunque del PIC18. Per comodità è bene usare uscite su cui sono presenti dei LED, per poter monitorare facilmente l'effettivo funzionamento durante l'esecuzione passo-passo del programma (nota 4).
Da non dimenticale massa ed alimentazione, le stesse del PIC18. Da segnalare che, se per qualche ragione si usa un diverso alimentatore, è necessario collegare almeno le masse del PIC e del SIPO.
Di seguito una possibile implementazione, riportata limitatamente ai collegamenti rilevanti per questo esercizio. Si noi che i tre pin del PIC sono stati scelti arbitrariamente... per ragioni grafiche.
Quando si scrive codice e contemporaneamente si realizza l'hardware rimane sempre il problema di scoprire se gli errori, SEMPRE presenti, derivano dall'uno o dall'altro. Per questo è bene procedere per piccoli passi, salvando una copia dei passaggi intermedi.
Inizialmente è bene verificare il funzionamento del collegamento tra PIC e SIPO scrivendo il codice che invia un po' di bit ad uno ed un po' di bit a zero senza utilizzare cicli. Per esempio secondo il seguente pseudo-linguaggio:
É utile osservare l'esecuzione del programma passo-passo, per vedere sia l'andamento dei tre pin di ingresso al SIPO che degli otto pin in uscita.
La procedura precedente è estremamente rigida. Decisamente meglio utilizzare una variabile in cui memorizzare un byte qualunque (nota 3) da far scorrere per otto volte all'interno di un loop e cosi leggere e trasmettere un bit alla volta.
É bene sospendere l'esecuzione del programma al termine della trasmissione di un byte
É utile osservare l'esecuzione del programma passo-passo.
Se si inserisce il codice precedente all'interno di un loop infinito il byte viene continuamente ritrasmesso. In questo caso i segnali sono agevolmente osservabili con un oscilloscopio oltre che durante l'esecuzione passo-passo.
É bene inserire dopo la trasmissione di un byte un breve intervallo, utile solo agli umani che osservano i LED.
Il byte trasmesso nelle applicazioni reali in genere cambia continuamente. Possiamo scrivere un codice che trasmette:
Il circuito presenta un fastidioso difetto: i LED che dovrebbero essere spenti in realtà sono leggermente illuminati... Perché? Meglio usare un CD4094?
E se usassimo qualcosa di più complesso di un SIPO? Per esempio un DAC.
Ultima modifica di questa pagina: 23 maggio 2016 - Una pagina simile: PIC18 come master SPI - Software (in C)
Assembly PIC18 - Versione 0.5 - aprile 2018
Copyright 2016-2018, Vincenzo Villa (https://www.vincenzov.net)
Assembly PIC18 di Vincenzo Villa è distribuito con Licenza Creative Commons Attribuzione 4.0 Internazionale