martedì 14 marzo 2017

Lettura codice rom sensore di temperatura DS18B20 tramite PIC16F886

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:



PIC16F886 + DS18B20
foto 1
PIC12F1840
foto 2


interfaccia rs232 microcontrollori pic
foto 3
interfaccia rs232 microcontrollori pic
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