iot

In questo terzo post vedremo come comunicare con il PIC18LF24K40 utilizzando il canale seriale RS232. Lo scopo è quello di collegare il PIC al nostro desktop e attivare una comunicazione bidirezionale. Nei successivi post vedremo come fare un collegamento wireless con computer e telefoni, al momento ci serve un canale affidabile per poter effettuare test e debug.

Per fare questo ci occorre un convertitore TTL/EIA in grado di lavorare a 3V (NS-RS232-01) e un convertitore RS232/USB (PL-2303RA).

post3

Lato computer si potrà comunicare con il micro tramite un programma terminale come ad esempio CoolTerm 

Apriamo l'ide e lanciamo il plugin MCC; andremo adesso a configurare i registri del pic per attivare il canale seriale (EUSART).

Schermata 2017 11 29 alle 17.21.28 

Nella colonna di sinistra sotto la voce Peripherals cliccare due volte sulla voce EUSART. Si aprirà "Easy Setup" nella finestra centrale in cui sarà possibile abilitare e impostare la seriale. I valori da utilizzare nell'esempio sono quelli indicati in figura. Il PIC ha la trasmissione seriale impostata sulla porta  RC6, la ricezione può essere impostata su qualunque altra porta tra B e C (questo indica il lucchetto aperto arancione di figura); ho scelto la porta RC7 per la ricezione cliccando sulla casella Port C 7 (lucchetto verde). Riassumendo è necessario collegare il convertitore TTL/EIA ai seguenti pin:

  • PIC TX RC6 -> ingresso (RX) del convertitore
  • PIC RX RC7 -> uscita (TX) del convertitore

Abilitando la funzione "Redirect STDIO to USART" si dice al compilatore di veicolare sulla seriale l'output di funzioni come "printf()"; questo ci semplifica la vita volendo inviare al computer esterno delle stringhe di testo.

Infine ho spuntato il box "Enable EUSART Interrupts" in modo da avere un IRQ tutte le volte che il computer esterno invia delle stringhe al PIC, l'alternativa sarebbe stata quella di monitorare ad ogni ciclo lo stato del buffer di ricezione. Ragionamento simile per l'IRQ in uscita che permette di inviare stringhe di testo senza preoccuparsi di verificare di volta in volta se il buffer di trasmissione è libero.

Cliccare su Project Resource - System - Pin Module per disabilitare la funzione analogica dai pin della seriale:

Schermata 2017 11 29 alle 17.18.36 

Cliccando sul bottone "Generate" terminiamo l'impostazione dei registri del PIC.

MCC ha creato per noi nuovi files di configurazione e ha aggiornato files precedentemente creati. Per motivi di chiarezza ho rinominato la porta di uscita a cui è collegato il LED questo ha comportato la riscrittura del file pin_manager.c in cui il programma ha rinominato la porta e tutte le funzioni che si riferivano ad essa; comodo no?

MCC ha inoltre creato per noi i files interrupt_manager.c e eusart.c, quando sarà il momento approfondiremo come funzionano questi files, la cosa importante adesso è approfittare di queste comodità per inviare al computer esterno una stringa di testo. Non c'è niente di più facile, come dimostra la funzione main() esposta di seguito. Come suggerito da MCC è necessario abilitare gli interrupt globali e quelli di periferica poi con l'istruzione printf() inviamo al mondo esterno via RS232 le stringhe di testo.

Schermata 2017 11 30 alle 13.24.44 Ed ecco la verifica di quanto inviato lato desktop:

Schermata 2017 11 30 alle 13.22.51

 

Nota personale importante (28/02/2018)

A volte accadono cose inspiegabili. L'esempio è stato eseguito utilizzando la versione a 3V del micro PIC18LF24K40. Lo stesso micro a 5V (PIC18F24K40 - 1633Q1J) non funziona. In particolare non funziona l'istruzione printf() e persino memset() e memcpy(). Fino ad aggiornamento ne sconsiglio l'uso.

 

download project