Pages: [1]   Go Down
Author Topic: Sonde DS18B20: problemi con pwm e -127.00° perenne  (Read 557 times)
0 Members and 1 Guest are viewing this topic.
Monza
Offline Offline
Jr. Member
**
Karma: 0
Posts: 71
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti,

ho un problemino che mi perseguita e che non riesco proprio a risolvere: ho 3 sonde collegate al pin 13 di cui vorrei leggere le temperature; sul pin 3 ho settato un analogWrite(3, 100) e sul pin 9 un analogWrite(9, 130).

ecco praticamente su tre sonde ne legge soltanto una (la più vicina) e a volte mi restituisce anche su questa un -127.00° come sulle altre due.

il problema sparisce se i due pin PWM vengono portati o a 0 oppure a 255....

ma perché fa così?

il problema sussiste anche su altri pin... ho provato a collegarle al 4 ed al 5 ma la situazione non cambia.

preciso che non ho montato una resistenza per ogni sonda ma soltanto una a valle sul pin dati e sul +5v

i cavi delle sonde più lontane sono lunghi 2m mentre quello della più vicina un metro scarso


spero che qualcuno mi possa aiutare
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ecco praticamente su tre sonde ne legge soltanto una (la più vicina) e a volte mi restituisce anche su questa un -127.00° come sulle altre due.

Perché stai usando una variabile di tipo signed invece di una unsigned, valori maggiori di 127, per il tipo char, vengono interpretati come valori negativi, nel tuo caso parliamo di un valore pari a 254 che corrisponde a -127, usa una variabile di tipo "byte".

Logged

Monza
Offline Offline
Jr. Member
**
Karma: 0
Posts: 71
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

scusami, essendo un autodidatta su arduino mi ritrovo un po' spaesato... mi potresti spiegare in soldoni quello che dovrei fare?

grazie mille
Logged

BZ (I)
Online Online
Brattain Member
*****
Karma: 234
Posts: 20204
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Se non hai un Arduino UNO R3 é da evitare il pin 13 perché ha collegato una resistenza da 500 Ohm e un LED a massa. Se usi come interfaccia per i DS18B20 un altro piedino il problema persiste?
Ciao Uwe
Logged

Monza
Offline Offline
Jr. Member
**
Karma: 0
Posts: 71
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

si ho quella versione ed il problema persiste anche sui pin 4 e 5
Logged

Rovereto
Offline Offline
Full Member
***
Karma: 0
Posts: 152
La luce e' piu' veloce del suono. Per questo motivo alcune persone sembrano brillanti fino a quando non parlano.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti,

ho un problemino che mi perseguita e che non riesco proprio a risolvere: ho 3 sonde collegate al pin 13 di cui vorrei leggere le temperature; sul pin 3 ho settato un analogWrite(3, 100) e sul pin 9 un analogWrite(9, 130).

ecco praticamente su tre sonde ne legge soltanto una (la più vicina) e a volte mi restituisce anche su questa un -127.00° come sulle altre due.

il problema sparisce se i due pin PWM vengono portati o a 0 oppure a 255....

il problema sussiste anche su altri pin... ho provato a collegarle al 4 ed al 5 ma la situazione non cambia.

preciso che non ho montato una resistenza per ogni sonda ma soltanto una a valle sul pin dati e sul +5v

i cavi delle sonde più lontane sono lunghi 2m mentre quello della più vicina un metro scarso

Spezza il problema in due parti.
1) Verifica solo di essere in grado di leggere le tre sonde DS18B20, ricordandoti che queste sonde utilizzano una comunicazione (ed un protocollo) OneWire, dove i dati scorrono su una singola linea. Alimenta il sensore fornendo sia la massa su GND che i 5V su Vdd evitando la modalità parassita di alimentazione che può dare problemi se hai cavi lunghi come dici tu. Sul pin DQ poni una resistenza da 4,7k (ne basta una per le tre sonde) che va verso Vdd (o 5V). Evita di usare il pin 13 come ha sottolineato Uwe.
2) Lavora con il PWM secondo il tuo progetto.
Da una sonda DS18B20 non devi mai leggere -127. Il range può essere +125 -55 °C e trovo assai strano che, usando OneWire, tu ottenga simili valori. Anzi, non sembra proprio una lettura pertinente.

Ciao
QP
Logged

Torino
Offline Offline
Full Member
***
Karma: 0
Posts: 133
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hai provato ad utilizzare l'esempio che trovi nella libreria per i DS18B20?
Logged

Monza
Offline Offline
Jr. Member
**
Karma: 0
Posts: 71
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ma le sonde di per sé funzionano... ma solo se la parte di programma che controlla il pwm segna 0 oppure 255

mi spiego meglio: i due canali pwm comandano 4 driver ciascuno in 0-10 pwm. Il mio programma è diviso in 3 parti: alba, mantenimento intensità massima e tramonto. La cosa strana è che nella prima fase di programma e nell'ultima i valori delle temperature vengono letti correttamente! nella parte centrale, invece, mi rendono un -127.00°.

E la parte centrale del programma, ossia quella che mantiene il segnale pwm a 130 per un certo periodo di tempo, l'ho strutturata in questo modo:

Code:

if (daybyminute >= ((ontime * 60) + blueramptime + whiteramptime))  
  {  
    if ( daybyminute < ((ontime * 60) + blueramptime + whiteramptime + photoperiod)) // if time is in range of photoperiod, turn lights on to maximum fade value
    {        
      analogWrite(blue, 130);
        srlcd.setCursor(13, 1);
        srlcd.print(10);
        srlcd.print(" ");
      analogWrite(white, 100);  
        srlcd.setCursor(2, 1);
        srlcd.print(10);
        srlcd.print(" ");  
      
    }  
  }


Non riesco a spiegarmi come mai le sonde funzionano durante le altre due fasi e qui invece no... è la più semplice di tutto il programma!!

Penso di poter escludere, a questo punto, che il problema riguardi resistenze, collegamenti elettrici o altro che non sia il programma stesso...


« Last Edit: March 20, 2012, 04:02:56 am by luca56 » Logged

Monza
Offline Offline
Jr. Member
**
Karma: 0
Posts: 71
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

e vorrei anche sottolineare che durante la prima parte del programma, che sostanzialmente prevede un aumento lineare del segnale pwm da 0 a 130, le temperature le leggo... anche quando arriva a 130... dopodiché quando passa alla seconda parte (quella di mantenimento a 130) mi compare quel maledetto -127.00°... nella terza fase, poi, quando da 130 ritorna progressivamente a 0, riprendono a funzionare..

Quote

Perché stai usando una variabile di tipo signed invece di una unsigned, valori maggiori di 127, per il tipo char, vengono interpretati come valori negativi, nel tuo caso parliamo di un valore pari a 254 che corrisponde a -127, usa una variabile di tipo "byte".



mi potete spiegare questo? cosa significa?
Logged

Pages: [1]   Go Up
Jump to: