Sensori digitali Ds18b20.

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

Differenza tra comunicazione seriale e parallela
INGRESSI E USCITE.
INFORMATICA Altre Istruzioni di I/O
PROGETTO DI UN SISTEMA DI ACQUISIZIONE DATI
Informatica Generale Susanna Pelagatti
Introduzione al linguaggio C
Università degli Studi di Napoli Federico II Facoltà di Ingegneria Dipartimento di Informatica e Sistemistica Corso di Sistemi ad elevate prestazioni –
IL MICROCONTROLLORE ST6
Progetto di un circuito a microcontrollore per la gestione del ricetrasmettitore impiegato nel satellite Atmocube Laureando: Stefano Punis Relatore: Prof.
Programmazione in Ambiente Profibus DP
Tipologie di Controlli in Ambito Industriale
PLC PCD1 della SAIA-Burgess
Esercizi sulle architetture
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Caratteri e stringhe di caratteri
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
Tipi di dato e controllo del flusso Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – – SIENA.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
INTRODUZIONE AI CONVERTITORI ANALOGICO-DIGITALI (ADC)
Informatica di base A.A. 2003/2004 Algoritmi e programmi
Alcuni esercizi e domande per il compitino quali sono le parti principali dellarchitettura di von Neumann? citare le caratteristiche salienti della RAM.
1 III Modulo dei dispositivi elettronici del Laboratorio di Fisica.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Rappresentazione dellinformazione su calcolatore Anno Accademico 2009/2010.
Progetto e Simulazione di una Centralina per Reti di Domotica
Corso di Informatica per Giurisprudenza
Introduzione ai PLC.
Convertitore A/D e circuito S/H
Il Linguaggio Macchina
INFORMATICA Altre Istruzioni di I/O. © Piero Demichelis 2 Funzioni di I/O Per la lettura e la scrittura da videoterminale il C prevede numerose istruzioni.
3. Architettura Vengono descritte le principali componenti hardware di un calcolatore.
I File.
EVOLUZIONE DEL PC Legge di Moore: La potenza dei calcolatori raddoppia ogni 18 mesi Metà anni 80 (Personal Computer IBM AT) Architettura 16 bit interna,
GESTIONE DEI FILE Per poter mantenere disponibili i dati tra le diverse esecuzioni di un programma (persi-stenza dei dati) è necessario poterli archi-viare.
Sistemi di acquisizione
Piattaforma Arduino Arduino uno Arduino Mega.
L' ARCHITETTURA DI VON NEUMANN
Prova di verifica Fondamenti Informatica 1 15 Febbraio 2008.
CODIFICA Da flow-chart a C++.
Architettura del calcolatore
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
Registro a scorrimento
Unità centrale di processo
INSEGUITORE SOLARE CON ARDUINO
Xbee, Bluetooth, SD, Ethernet
LABVIEW Sommario Che cosa è uno strumento virtuale (VI) creato con LABVIEW Parti di un VI: pannello frontale diagramma a blocchi Confronto tra il principio.
ARDUINO Duemilanove Parte_5 Arduino e PHP
Architettura del calcolatore
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Vettori (a una dimensione)
Parte 3 Lo stato: variabili, espressioni ed assegnazioni

Sistemi Elettronici Programmabili (SELPR)
ADC – SCHEMA GENERALE I convertitori AD sono disponibili come circuiti integrati in diversi modelli, che differiscono fra loro per prezzo, prestazioni.
Corso di Laurea in Informatica Architettura degli elaboratori a.a La macchina programmata Instruction Set Architecture (2) Istruzioni I-type Indirizzamento.
Gestione dei dispositivi di I/O:
Temp Sentry: un sistema di rilevazione dati ambientali Guerra Alberto INFN-Sezione di Roma, P.le Aldo Moro, 2, I Roma, Italy Introduzione Il sistema.
1 Fabio Scotti – Università degli Studi di Milano Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( )
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
L’esecuzione dei programmi
Corso di Laurea in Biotecnologie corso di Informatica Paolo Mereghetti DISCo – Dipartimento di Informatica, Sistemistica e Comunicazione.
Conversione Analogico/Digitale Le grandezze fisiche che vogliamo misurare variano con continuità in un dato intervallo ed in funzione del tempo: sono descrivibili.
Hardware necessario Una board Intel galileo Un alimentatore Dc 7-15 v
Corso di Informatica Applicata Lezione 7 Università degli studi di Cassino Corso di Laurea in Ingegneria della Produzione Industriale Ing. Saverio De Vito.
Progetti con arduino e pic.  Il trasduttore è analogico  Trasforma la temperatura in tensione secondo la relazione V millivolts =10*t celsius Essendo.
Presentazione di sistemi Ambrosio Federica Anna Esposito 3C inf.
Il modello di Von Neumann
ISTITUTO TECNICO – SETTORE TECNOLOGICO
Transcript della presentazione:

Sensori digitali Ds18b20

Introduzione Il sensore DS18B20 è un integrato della Dallas semiconductors Fornisce una temperatura in gradi Celsius L’uscita è un segnale digitale di 9-12 bit Ogni DS18B20 ha un codice seriale univoco a 64-bit, che permette di fare funzionare più sensori sullo stesso bus 1-Wire®. E’ possibile usare fino a 100 sensori su una linea di lunghezza che potrebbe arrivare fino a 300m, quindi, è facile utilizzare un solo microprocessore per controllare molti DS18B20 distribuiti in un’ampia area.

Schema a blocchi

Generalità Il sensore DS18B20 comunica tramite il protocollo 1-Wire®, un protocollo standard che permette di usare un solo filo di comunicazione (e massa) per il colloquio con un microprocessore centrale. E’in grado di misurare temperature da -55°C a 125°C con una precisione di 0.5°C nella gamma compresa tra -10°C a +85°C. Un'altra caratteristica del DS18B20 è la capacità di funzionare senza un’alimentazione esterna. L'alimentazione preferibilmente è assicurata tramite la resistenza di “Pull up” sulla linea 1-Wire®; quando il bus è alto, viene caricato un condensatore interno (c), che a sua volta fornisce l'alimentazione necessaria al dispositivo allorquando il bus si trova basso. Questo metodo di prelevare l'alimentazione dal bus 1-Wire® viene classificata come "alimentazione parassita.” Questo metodo si utilizza nel caso in cui il sensore è posto lontano dal sistema di acquisizione. In alternativa il DS18B20 può anche essere collegato ad un’alimentazione esterna. Come si vede dalla figura a pag 1, i pin laterali sono per GND e Vcc, il pin centrale è il sensore. Nella pagina successiva c’è lo schema per i collegamenti

DS18b20 con Arduino

DS18b20 con i pic

Misure di temperatura La temperatura può essere misurata a 9, 10, 11, 12 bit corrispondenti agli incrementi di 0.5, 0.25, 0.125, 0.0625, rispettivamente. L’accuratezza nella lettura è di 0.5 C in un range tra -10 C e +85 C

Memoria EEPROM Dallo schema a blocchi dl sensore si nota che esso è dotato di una memoria scratchpad, cioè veloce ma di tipo EEPROM 2 byte di memoria sono per la temperatura Il byte 0 e il byte 1 sono usati rispettivamente per la Tl (LSB) e la Th (MSB) I byte 2 e 3 forniscono l’accesso ai byte 0 e 1 Il byte 4 è di configurazione I byte 5, 6,7 sono di uso interno e non possono essere sovrascritti Nel byte 8 c’è il codice CRC generato per ogni conversione secondo il polinomio scritto nella ROM

Configurazione Il byte di configurazione è strutturato nel seguente modo: R0 R1 R2 R3 R4 R5 R6 R7 1 R0 R1 Risoluzione Tempi conv 9 93.75 ms (tconv/8) 1 10 187.5 ms (tconv/4) 11 375 ms (tconv/2) 12 750 ms(tconv)

Registri per la temperatura

Registri per la temperatura I registri per la temperatura fanno da memoria tampone per l’output seriale. Hanno la capacità di 1 Byte ciascuno per il totale di 2 Byte. Come si vede, i 5 bit più significativi indicano il segno della temperatura;1 indica i valori <0, 0 i valori >0. I 4 bit meno significativi sono le cifre decimali Dal IV bit al X bit si indicano i valori interi della temperatura. In più, permette l’accesso ai registri da 1 byte per i trigger di allarme massimo e minimo TH e TL, questi registri sono allocati in EEPROM non volatile, viene mantenuta così l’informazione anche in assenza di alimentazione. La memoria EEPROM contiene anche un registro per il settaggio della risoluzione

Codice identificativo Memoria ROM La ROM a 64-bit immagazzina il codice seriale univoco del dispositivo per permettere la trasmissione seriale di più dispositivi su un bus unico. La memoria ROM è di 64 bit così strutturata: CRC Codice identificativo Family code 8 bit 48 bit Il polinomio generatore della CRC è x^8+x^5+x^4+1

Flag di errore Quando il micro inizia a dialogare deve inviare sulla linea un "impulso di reset" che consiste nel mettere la linea a ZERO e mantenerla per un tempo compreso fra i 480 e i 960us. Dopo l'impulso di reset il micro si mette in ascolto. A questo punto la sonda, dopo avere interpretato l'impulso di reset risponde con un impulso di presenza che consiste nel mettere la linea a ZERO a partire da 15-60us dall'impulso di reset e per un tempo compreso fra i 60 e i 240us. Il flag errore vale UNO se il micro non ha trovato la sonda, ovvero se non vi è stato alcun impulso di “presence” sulla linea. Appena il flag di errore vale 0, inizia la comunicazione vera e propria. Dopo l'inizializzazione il bus-master, cioè il micro, può finalmente dialogare con la sonda

Sequenza di comandi per la lettura della temperatura 1) Il master invia un impulso di reset sul bus 2) I vari slave rispondono con il “Presence Pulse” 3) Il master invia un comando “Mach ROM” 0×55 4) Il master invia la ROM del sensore che vuole leggere 5) Il master invia il comando 0×44 per la conversione di temperatura 6) Il master invia un nuovo impulso di reset 7) Gli slave rispondono con il “Presence Pulse” 8) Il master invia un comando “Mach ROM” 0×55 9) Il master invia la ROM del sensore che vuole leggere 10) Il master invia un comando 0xBE per leggere la memoria del sensore 11) Il master legge i 9 bytes della memoria e lo slave li invia sequenzialmente.

Protocollo in dettaglio Reset SEARCH ROM(f0h) Appena il sistema viene alimentato, il master bus si attiva per il riconoscimento della ROM READ ROM (33h) Viene utilizzato quando c’è un solo slave sul bus. In questo caso non si utilizza searh ROM. MATCH ROM(55h) Una volta letta la ROM, il master viene indirizzato verso un bus slave specifico. Un solo slave alla volta può rispondere al segnale. Skip ROM (0xcc) Subito dopo l'inizializzazione il master bus invia alla sonda un comando che si chiama "SKIP ROM" XCC. Quando la sonda riceve questo comando sa che subito dopo deve attendersi un comando diretto ad essa che riguarda le sue funzioni di "sonda". Il comando “SKIP ROM” dice alla sonda di "saltare"'invio del codice univoco da 64 bit che nel nostro caso è perfettamente inutile avendo a che fare con una sola sonda.

ALARM SEARCH (Ech) Questa operazione è simile all’operazione di search ROM eccetto il fatto che solo gli slave con allarme possono rispondere Start conversion(0x44) Esiste anche all’occorrenza, una "configuration word" che può essere programmata e una memoria in cui memorizzare un valore di temperatura in base al quale la sonda può fare da allarme settando un flag quando la temperatura supera tale valore, in questo caso non è stato utilizzata questa. opzione. Dopo il comando "converti temperatura" (OX44) la sonda ha esaurito il suo ciclo di operazioni e ha bisogno di essere reindirizzata. La routine principale quindi dovrà eseguire di nuovo un impulso di reset per inizializzare nuovamente la sonda.

Protocollo READ SCRATCHPAD (OXBE) Si legge la "SCRATCHPAD" cioè la memoria in cui viene memorizzato l'ultimo valore di temperatura convertito. I invia il comando "LEGGI SCRATCHPAD" OXBE, il quale dice alla sonda che subito dopo dovrà inviarci il dato di temperatura. I dati dell'uscita DS18B20 sono in gradi centigradi e sono memorizzati a 16 bit nel registro di temperatura . Viene effettuata la lettura del dato che ci viene inviato a partire dal bit meno significativo e continua fino al nono byte (Byte 8 – CRC). Inoltre abbiamo il flag di controllo rappresentato dal bit 0 del registro "errore". Nel caso in cui tale bit valga 1 il contenuto dei temp1 e temp2 è da ignorare perchè la sonda non è presente anche se le istruzioni di lettura vengono comunque eseguite. WRITE SCRATCHPAD (Beh) Questo comando porta il master a scrivere 3 byte nella memoria scratchpad: nel byte 2 il valore di Th, nel byte 3 il valore di Tl e nel byte 4 la configurazione

Protocollo COPY SCRATCHPAD [48h] Copia i valori dei byte 2,3,4 nella EEPROM RECALL E2 [B8h] Operazione automatica READ POWER SUPPLY [B4h] Indica il tipo di alimentazione se esterna o con potenza parassita

DS18B20 con Arduino #include <OneWire.h> /* DS18S20 Temperature chip i/o */ OneWire ds(10); // on pin 10 void setup(void) {   Serial.begin(9600); } void loop(void) {   byte i;   byte present = 0;   byte data[12];    byte addr[8];      if ( !ds.search(addr)) {      Serial.print("No more addresses.\n");     ds.reset_search();     delay(250);     return 0;   }      

Arduino Serial.print("R="); for( i = 0; i < 8; i++) { Serial.print(addr[i], HEX); Serial.print(" "); } if ( OneWire::crc8( addr, 7) != addr[7]) { Serial.print("CRC is not valid!\n"); return 0; } if ( addr[0] != 0x10) { Serial.print("Device is not a DS18S20 family device.\n"); return; } ds.reset();

Arduino ds.select(addr); ds.write(0x44,1); delay(1000);   present = ds.reset();   ds.select(addr);   ds.write(0xBE);   Serial.print("P=");    Serial.print(present,HEX);    Serial.print(" ");    for ( i = 0; i < 9; i++) {     data[i] = ds.read();      Serial.print(data[i], HEX);     Serial.print(" ");   }    Serial.print(" CRC=");   Serial.print( OneWire::crc8( data, 8), HEX);   Serial.println(); }

Arduino

DS18B20 con PIC // LCD module connections sbit LCD_RS at RB4_bit; sbit LCD_EN at RB5_bit; sbit LCD_D4 at RB0_bit; sbit LCD_D5 at RB1_bit; sbit LCD_D6 at RB2_bit; sbit LCD_D7 at RB3_bit; sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D4_Direction at TRISB0_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB3_bit; // End LCD module connections //  Set TEMP_RESOLUTION to the corresponding resolution of used DS18x20 sensor: //  18S20: 9  (default setting; can be 9,10,11,or 12) //  18B20: 12 const unsigned short TEMP_RESOLUTION = 12; char *text = "000.0000"; unsigned temp;

DS18b20 con i pic void Display_Temperature(unsigned int temp2write) {   const unsigned short RES_SHIFT = TEMP_RESOLUTION - 8;   char temp_whole;   unsigned int temp_fraction;   // Check if temperature is negative   if (temp2write & 0x8000) {     text[0] = '-';     temp2write = ~temp2write + 1;   }   // Extract temp_whole   temp_whole = temp2write >> RES_SHIFT ;   // Convert temp_whole to characters   if (text[0] != '-') {     if (temp_whole/100)       text[0] = temp_whole/100  + 48;     else       text[0] = '0';   }   text[1] = (temp_whole/10)%10 + 48;             // Extract tens digit   text[2] =  temp_whole%10     + 48;             // Extract ones digit   // Extract temp_fraction and convert it to unsigned int   temp_fraction  = temp2write << (4-RES_SHIFT);   temp_fraction &= 0x000F;   temp_fraction *= 625;   // Convert temp_fraction to characters   text[4] =  temp_fraction/1000    + 48;         // Extract thousands digit   text[5] = (temp_fraction/100)%10 + 48;         // Extract hundreds digit   text[6] = (temp_fraction/10)%10  + 48;         // Extract tens digit   text[7] =  temp_fraction%10      + 48;         // Extract ones digit   // Print temperature on LCD   Lcd_Out(2, 5, text); }

PIC void main() {   ADCON1 = 0b00000110;                            // all ADC ports digital   TRISE.B2 = 1;                             // Configure RE2 pin as input   Sound_Init(&PORTD, 0); //assignment of port and initialization   Sound_Play(880, 1000); // Play Sound at 880 Mhz for 1 sec   Lcd_Init();                                    // Initialize LCD   Lcd_Cmd(_LCD_CLEAR);                           // Clear LCD   Lcd_Cmd(_LCD_CURSOR_OFF);                      // Turn cursor off   Lcd_Out(1, 1, " Temperature:   ");   Lcd_Chr(2,13,223);                             // Print degree character, 'C' for Centigrades                                                  // Different LCD displays have different char code for degree                                                  // If you see greek alpha letter try typing 178 instead of 223   Lcd_Chr(2,14,'C');   // Main loop   do {     // Perform temperature reading     Ow_Reset(&PORTE, 2);                         // Onewire reset signal     Ow_Write(&PORTE, 2, 0xCC);                   // Issue command SKIP_ROM     Ow_Write(&PORTE, 2, 0x44);                   // Issue command CONVERT_T     Delay_us(120);

PIC     Ow_Reset(&PORTE, 2);     Ow_Write(&PORTE, 2, 0xCC);                   // Issue command SKIP_ROM     Ow_Write(&PORTE, 2, 0xBE);                   // Issue command READ_SCRATCHPAD     temp =  Ow_Read(&PORTE, 2);     temp = ((Ow_Read(&PORTE, 2)) << 8) + temp;     // Format and display result on Lcd     Display_Temperature(temp);     Delay_ms(500);       //alarm stage..... if(*text>=38) {  Sound_Play(880, 1000); // beep ini..1 seconds delay_ms(500); } else if (*text<=38) { }   }  while (1); }

PIC