La passione per l'elettronica mi ha portato a creare questo blog nel tentativo di condividere alcuni progetti da me realizzati, utilizzando prevalentemente microcontrollori della Microchip e programmando in linguaggio C utilizzando l'ambiente di sviluppo Mikroc pro.
Lettura indirizzo sensore di temperatura DS18B20 tramite PIC16F886
Il progetto si propone di acquisire il codice rom del sensore di temperatura DS18B20 e di
visualizzarlo tramite terminale USART.
La conoscenza del codice rom è necessario quando su un bus 1-wire sono collegati piu sensori.
Il codice rom, costituito da 8 byte, rappresenta l'indirizzo del sensore.
L'hardware utilizzato è lo stesso presentato in questo progetto.
Questo è lo schema elettrico.
Il sensore DS18B20 è collegato al pin RA5 del pic. Il programma caricato sul pic, interroga il
sensore e riceve il codice rom ad ogni reset (pulsante premuto e rilasciato). Il codice rom viene
inviato al PC tramite seriale e visualizzato tramite un terminale USART.Nel nostro caso si è
utilizzato Mikroelektronika Usart Terminal contenuto nei tool dell' IDE.
Adesso qualche foto:
foto 1
foto 2
foto 3
foto 4
La foto 4 ritrae il Terminal USART di Mikroelektonika. Gli 8 byte evidenziati nel riquardo receive rappresentano il codice rom del sensore.
Adesso passiamo al codice in Mikroc caricato sul pic :
/*******************************************************************************
MCU : pic16f886 osc : oscillatore interno impostato a 8 Mhz realizzato da : Ciro Marinelli data : 13/03/2017
******************************************************************************** *******************************************************************************/
#define OW_READ_ROM 0x33
//****************************************************************************** // variabili globali //******************************************************************************
unsigned char *ID; unsigned char a ;
//****************************************************************************** // dichiarazione funzioni //******************************************************************************
void inizializza(void); void OWReadRom(unsigned char *ID);
//****************************************************************************** // funzioni //******************************************************************************
void OWReadRom(unsigned char *ID) { OW_Reset(&porta,5); // resetto la linea one-wire OW_Write(&porta,5,OW_READ_ROM); // invio il comando readrom for(a=0; a<8; a++) // ciclo per leggere gli 8 byte restituiti dal dispositivo { ID[a]=OW_Read(&porta,5); // memorizzo i byte ricevuti } }
//*****funzione impostazioni iniziali PIC***************************************
void init_pic(void) { OSCCON = 0X70; // imposto l'oscillatore interno a 8MHz trisa = 0x00; // imposta porta come output trisb = 0x00; // imposta portb come output trisc = 0x00; // imposta portc come output porta = 0x00; // azzera porta portb = 0x00; // azzera portb portc = 0x00; // azzera portc ansel=0x00; // disabilito gli ingressi analogici anselh=0x00; // c1on_bit=0x00; // disabilito i comparatori c2on_bit=0x00; // UART1_Init(9600); // inizializza il modulo seriale 1 a 9600 baud delay_ms(1000); }
//*****funzione principale******************************************************
void main() { init_pic(); OWReadRom(ID); if (UART1_Tx_Idle() == 1) { UART1_Write(ID[0]); UART1_Write(ID[1]); UART1_Write(ID[2]); UART1_Write(ID[3]); UART1_Write(ID[4]); UART1_Write(ID[5]); UART1_Write(ID[6]); UART1_Write(ID[7]); } }
Per snellire la parte Hardware di questo progetto si è intervenuto eliminando l'interfaccia rs232 auto
costruita sostituendola con un adattatore SERIALE/USB del tipo FTD1232, facilmente reperibile in
rete a pochi euro.
quest'adattatore può comunicare con dispositivi alimentati sia a 5Vcc che a 3.3Vcc. Nel nostro
caso usiamo un'alimentazione di 5Vcc, quindi spostiamo l'apposito jumper presente sulla scheda
verso i 5Vcc.
Ecco lo schema elettrico.
Come si vede i collegamenti tra il PIC e l'interfaccia FTD1232 si riduce a quattro fili, due per
l'alimentazione e due per i dati (TX, RX).
Per rendere compatto l' hardware si è realizzato una scheda d'interfaccia tra PIC e FTD132, come
si vede dalle seguenti immagini.
Acquisizione temperatura e umidità con PIC12F1480 e DHT22
Il progetto si propone di acquisire temperatura e umidità dell'ambiente circostante e d' inviare i dati al
pc dove vengono visualizzati tramite un software realizzato in C#. Quest'ultimo permette la
visualizzazione dei dati in real-time ed il salvataggio per eventuali elaborazioni
iniziamo analizzando lo schema elettrico.
Dallo schema elettrico si nota che il tutto si riduce a pochissimi componenti. Per ridurre le
dimensioni della scheda e risparmiare componenti, si è deciso di non implementare il circuito ICSP.
Sul pin MCRL del microcontrollore si nota la solita configurazione per il reset. la resistenza da 10KΩ
garantisce i 5V durante il normale funzionamento, mentre la resistenza da 100Ω insieme al contatto
collegato a massa resetta il PIC.
Il condensatore da 100nF filtra i disturbi provenienti dall'alimentazione.
Il sensore DHT22 prevede il condensatore da 100nF per il filtraggio dell'alimentazione e la resistenza
di pull-up da 10KΩ sulla linea dati.
Per comunicare con il PC è stato creata l'interfaccia rs232 costituita dal chip MAX232 con i relativi
quattro condensatori da 10mF e la resistenza di pull-up da 1KΩ posta sulla linea TX del PIC.
Il circuito viene alimentato tramite la porta USB del PC.
La visualizzazione a video dei parametri è affidata al software T-RH appositamente creato per questo
hardware e scaricabile qui.
Per far funzionare il software è necessario che sul pc sia installato NET Framework.
Attenzione, se durante l'esecuzione il software visualizza valori senza la virgola, bisogna andare a
sostituire la virgola con il punto in pannello di controllo/ lingua/ cambia ora, data e formato dei numeri/.
Adesso qualche foto della realizzazione: