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]);
}
}
Nessun commento:
Posta un commento