Go Down

Topic: ds18b20 non riconosciuti (Read 4101 times) previous topic - next topic

zinco_mp

Ciao a tutti, vi scrivo per un problema che sto riscontrando e non riesco a venirne a capo.
Ho collegato delle sonde Ds18b20 in modalità external power con i pin DATA ed una resistenza da 4K7 ad arduino.
Caricando i vari sketch che si trovano in rete, o gli stessi degli esempi nelle librerie DallasTemperature non ci sono problemi, se non quando, ad essere collegati sono 4 sensori.
Fino a tre sensori, le letture degli indirizzi e delle temperature sono perfetti. All'aggiunta del quarto sensore o più, non ottengo più nulla...nè indirizzi, nè temperature....NULLA. Oppure mi vengono letti solo i primi tre indirizzi e sul serial monitor continua la ricerca di n dispositivi all'infinito.
Provando a scollegare il pin Data di uno dei quattro sensori, sul serial monitor, riprendono correttamente le letture.
Sapreste aiutarmi?
Ve ne sarei più che grato ed imparerei qualcosa...credo.  :smiley-sweat:

marinaio67

Puoi descrivere meglio lo schema disegnandolo o facendo una foto?

zinco_mp

Sì, scusate per la risoluzione, ma credo che si capisca perchè è proprio semplice...

zinco_mp

Anche se si nota poco, la resistenza è collegata tra Vcc e Pin

marinaio67

Come da schema sul datasheet, userei un alimentazione esterna (+5V) con il GND in comune... e aggiungerei un condensatore da 100nF tra Vdd e GND.

zinco_mp

Grazie "marinaio67" per la risposta.
Ho provato a seguire il tuo consiglio, ma in questo modo, avviando le letture dal serial monitor, non mi riconosce proprio i sensori. Continua sempre a fare la ricerca, ma senza mai trovarli. Hai altri suggerimenti?

marinaio67

Dato che c'è senza dubbio qualche errore nel circuito, devi fare nuovamente una foto che possibilmente si veda tutto.

zinco_mp

Ciao ancora...., sono stato un po' impegnato, ma alla fine ho rifatto i cablaggi e usato un'alimentazione esterna collegando l'alimentatore 12V in dotazione arduino che eroga 500mA direttamente sulla breadboard e con degli LM7805 (3 in tutto) e dei condensatori da 47uF lato 12V e 63pF lato 5V ho una tensione stabile di 5,5-5,8V misurata col tester.
Il problema però sembrava essersi risolto infatti in un primo momento ha funzionato correttamente, poi tutto come prima: se collego la quarta sonda va in tilt.
Se avvio la lettura con quattro sonde e poi ne scollego una riconosce centinaia di dispositivi e poi mi restituisce i valori solo dei 3 collegati.
Non so proprio come fare.

Ps. Scusa l'ignoranza, marinaio67, ma a cosa serve il condensatore da 100nF? Non sono molto ferrato in materia...

Grazie anticipate a tutti

marinaio67

Il condensatore da 100n detto in parole povere serve da filtro antidisturbo... Magari nella tua applicazione non porta nessun cambiamento, ma è buona norma imparare a usarlo. Per quanto riguarda il circuito che racconti, è difficile starti dietro se non fai uno schema. Prendi carta e penna, disegna il tuo circuito e allegalo.

zinco_mp

Dopo un po' di tentativi, ho ridotto all'osso lo sketch e assegnato manualmente gli indirizzi delle sonde. Ho inviato sul serial monitor solo la lettura delle temperature, senza stampare indirizzi, risoluzione precisione o altro.
Risultato...se collego una sonda alla volta dopo aver lanciato il programma riesco a leggere tutte le temperature (sono arrivato a collegare 6 sonde).
Se invece le collego prima tutte e poi lancio lo sketch, oppure se sto nella condizione menzionata prima(cioè quando collego le sonde una alla volta e ottengo le letture e poi faccio un reset) mi si blocca tutto. Non ho nessuna risposta da nulla!!!
Chi mi sa aiutare?????
Grazie

zinco_mp

Ciao a tutti, vi chiedo se riuscite a venire a capo di questo problema.
Ho usato uno sketch di esempio dalla libreria DallasTemperature nello specifico: Multiple, per poter collegare diverse sonde in questione(ds18b20).
Se lancio lo sketch senza aver collegato ancora nulla sul pin di lettura, e successivamente gli collego diverse sonde, la lettura avviene regolarmente.
Se però, lascio le sonde già collegate e resetto il programma, oppure lancio daccapo lo sketch, tutto si blocca...si riprende solo se scollego e ricollego nuovamente il pin di lettura.
Se invece, ad essere collegata è solo una sonda, non ci sono problemi di nessun tipo...viene letta sempre, senza scollegare niente...
Avete suggerimenti????

Grazie anticipate

uwefed

Avete suggerimenti????
Io suggerirei farci vedere lo sketch.
Ciao Uwe

zinco_mp

Più che giustissimo!!!!Scusate... :
Code: [Select]
#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into port 44 on the Arduino
#define ONE_WIRE_BUS 44
#define TEMPERATURE_PRECISION 12
float t1;
float t2;
float t3;
float t4;
float t5;
float t6;

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

// arrays to hold device addresses
DeviceAddress sonda1={
  0x28,0x00,0x5f,0x58,0x05,0x00,0x00,0x15};
DeviceAddress sonda2={
  0x28,0x9a,0xdc,0x54,0x05,0x00,0x00,0xfc};
DeviceAddress sonda3={
  0x28,0x5a,0x00,0x68,0x05,0x00,0x00,0x46};
DeviceAddress sonda4={
  0x28,0x3f,0x62,0x54,0x05,0x00,0x00,0xa6};
DeviceAddress sonda5={
  0x28,0x8b,0x64,0xcf,0x05,0x00,0x00,0x94};
DeviceAddress sonda6={
  0x28,0xef,0xb1,0xe5,0x05,0x00,0x00,0x6c};

void setup(void){
  Serial.begin(9600);
  sensors.begin();
  sensors.setResolution(sonda1, TEMPERATURE_PRECISION);
  sensors.setResolution(sonda2, TEMPERATURE_PRECISION);
  sensors.setResolution(sonda3, TEMPERATURE_PRECISION);
  sensors.setResolution(sonda4, TEMPERATURE_PRECISION);
  sensors.setResolution(sonda5, TEMPERATURE_PRECISION);
  sensors.setResolution(sonda6, TEMPERATURE_PRECISION);
}

void loop(void){
  // call sensors.requestTemperatures() to issue a global temperature
  // request to all devices on the bus
  Serial.print("Requesting temperatures...");
  //sensors.requestTemperatures();
  Serial.println("DONE");
  t1 = sensors.getTempC(sonda1);
  Serial.print("Temp C: ");
  Serial.print(t1);
  t2 = sensors.getTempC(sonda2);
  Serial.print("Temp C: ");
  Serial.print(t2);
  t3 = sensors.getTempC(sonda3);
  Serial.print("Temp C: ");
  Serial.println(t3);
  t4 = sensors.getTempC(sonda4);
  Serial.print("Temp C: ");
  Serial.print(t4);
  t5 = sensors.getTempC(sonda5);
  Serial.print("Temp C: ");
  Serial.print(t5);
  t6 = sensors.getTempC(sonda6);
  Serial.print("Temp C: ");
  Serial.println(t6);
}

zinco_mp

E' incredibile!!! Non riesco proprio a venirne a capo!
Eppure lo sketch è semplicissimo. Ma mi si presenta sempre lo stesso problema.
Ho provato anche a cambiare l'indirizzo del pin su altri, pensando che potesse essere quello che non andasse, ma niente. Anche con altri sketch, tipo solo recuperare indirizzo sonde o cose del genere ottengo sempre lo stesso risultato: fino a tre sonde collegate ok...dalla 4a in poi tutto in blocco.
Ho provato a cambiare sonde ma niente.
Eventualmente, si potrebbe secondo voi collegare le sonde su due bus separatamente? Tipo 3 su un bus e 3 sull'altro con i rispettivi pin assegnati?
Aspetto risposte con ansia...Grazie :smiley-confuse: 

cyberhs

Forse il problema è hardware: mostraci i collegamenti che hai fatto e le lunghezze dei fili.

Go Up