Salta la barra di navigazione [1] - Vai alla barra di navigazione [3] - Scrivimi una mail [4]

Esercizio PIC18: usare un registro SIPO in assembly

Assembly PIC18 - PIC18 in C - Sommario - Novità - Tutorial - Progetti - Risorse - Non solo elettronica

PIC18 collegato ad un SIPO 74HC164

In fase di sviluppo Stesura preliminare In fase di sviluppo

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

1. Esame dei fogli tecnici

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:

I segnali utili per pilotare un SIPO 

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.

2. Hardware

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.

3. Il codice

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.

Semplice gestione dei pin

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:

  1. Configurare i tre pin del PIC come uscite
  2. Verificare che il clock sia inizialmente basso
  3. Resettare i flip-flop del SIPO (MR = 0 e subito dopo MR=1)
  4. Porre in uscita 1 (oppure 0)
  5. Fronte di salita del clock (fronte attivo)
  6. Fronte di discesa del clock
  7. Ripetere i punti 4 - 5 - 6 per otto volte, copiando le righe di codice e cambiando "casualmente" il valore del bit mandato in uscita
  8. Interrompere l'esecuzione

É 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.

Utilizzo di un loop

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.

Trasmissione continua di un byte fisso

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.

Trasmissione continua di un byte variabile

Il byte trasmesso nelle applicazioni reali in genere cambia continuamente. Possiamo scrivere un codice che trasmette:

Cambiamo hardware

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.

Note

  1. Cioè un bit alla volta, per otto volte
  2. Cioè, in questo contesto, trasmettendo su un filo separato il clock
  3. Ovviamente è bene avere un po' di 1 ed un po' di 0. Per esempio 0xA3 oppure 0xC5
  4. Quindi, se usate la scheda PICdemo, è comodo usare i pin di PORTC

Ultima modifica di questa pagina: 23 maggio 2016 - Una pagina simile: PIC18 come master SPI - Software (in C)


Assembly PIC18

Licenza Creative Commons Attribuzione 4.0 Internazionale


EN - Pagina principale - Sommario - Accessibilità - Note legali e privacy policy - Posta elettronica

XHTML 1.0 Strict - CSS 3