Seite 1 von 2
Problem mit DS18X20 und Wil´s Software auf ETH_M32
Verfasst: 22.10.2008, 18:38:34
von Erni
Ich bekomme die Dallas Temp-Sensoren mit Wil´s Software nicht ans laufen. Mit OW werden beide Sensoren erkannt, mit OWREAD kommt als Ergebnis nur 0.
Hab auch den SD-Card-Reader und das EEprom wie im WEBMODUL nachgerüstet, weil ich dachte daran könnte es liegen - leider nicht.
Hat vielleicht jemand ne Idee wo mein Denkfehler liegt
Vielen Dank für jede Antwort!!!
Erni
Re: Problem mit DS18X20 und Wil´s Software auf ETH_M32
Verfasst: 22.10.2008, 21:53:08
von wil
Hallo,
der Befehl OW scannt den 1-wire bus nach Sensoren. Diese melden sich in irgendeiner normalerweise nicht vorhersagbaren Reihenfolge. Solange du nichts an den Anschlüssen (Reihenfolge) änderst, werden sich die Sensoren wahrscheinlich immer in der gleichen Reihenfolge melden. ... nur sicher ist das nicht.
Daher habe ich von meinen bekannten Sensoren (von denen ich weiss welche Temparatur sie messen) die feste ID ausgelesen (mittels OW) und dann hart codiert ihnen Speicherplätze zugewiesen.
Also etwa so:
- Sensor an Webmodul anhängen
- mit OW Befehl den Sensor auslesen. Das ergibt z.Bspl.
#1 ist ein DS18S20/1820 mit externer Spannungsversorgung.
FC:10 (18S)SN: 26 5f 24 1 8 0 CRC:a6 CRC O.K. 0 23.0001 C 231
- in der config.h die ID des Sensors eintragen:
Code: Alles auswählen
// hier die ausgelesenen ROM-IDs der DS18B20 eintragen
#define OW_ID_T01 {0x10,0x26,0x5f,0x24,0x01,8,0,0xa6}
- Sensor am 1-wire Bus montieren und OW@01 bzw. OW@21 mit der entsprechenden Messstelle bezeichnen
Der Cardreader und das EEPROM haben absolut nicht mit 1-wire zu tun.
Gruß
wil
Re: Problem mit DS18X20 und Wil´s Software auf ETH_M32
Verfasst: 22.10.2008, 23:10:33
von AVRnet
Habe selbes Problem wie Erni.
Ich kann mittels
OW meine beiden DS1820 Sensoren scannen und alle Daten werden ordnungsgemäß auf der Console ausgegeben,
aber wenn ich die ID wie im oben angegeben Thread in die
config.h eintrage,
dann zeigt der Befehl
OWREAD trotzdem als Wert immer 0 an.
Ausgabe von
OW
Scanning Bus for DS18X20
2 1-Wire Sensoren gefunden.
#1 ist ein DS18S20/DS1820 mit externer Spannungsversorgung. 10 (18S)24 5a 24 1 8 0 c3 CRC O.K. 0 19.0010 C 196
#2 ist ein DS18S20/DS1820 mit externer Spannungsversorgung. 10 (18S)4c 67 24 1 8 0 43 CRC O.K. 0 19.0007 C 194
Ausgabe von
OWREAD
Fixed T-Sensor Werte:
1: 0
2: 0
In der
config.h habe ich eingetragen
/** 1-Wire ************/
#define USE_OW 1 // 1-Wire bus einbinden
#define MAXSENSORS 2 // max. Anzahl der 1-wire sensoren (DS18B20)
#define OW_ONE_BUS 1 // nur ein fest eingestellter 1-wire bus; keine Auswahl
// die Ports werden in onewire.h definiert
#define OW_ROMCODE_SIZE 8 // rom-code DS18B20 size including CRC
// hier die ausgelesenen ROM-IDs der DS18B20 eintragen
#define OW_ID_T01 {0x10,0x24,0x5a,0x24,0x01,8,0,0xc3}
#define OW_ID_T02 {0x10,0x4c,0x67,0x24,0x01,8,0,0x43}
#define OW_ID_T03 {0x28,0x11,0x22,0x33,0x44,0,0,0x77}
#define OW_ID_T04 {0x28,0x22,0x33,0x44,0x55,0,0,0x77}
#define OW_ID_Last {0x00,0x00,0x00,0x00,0x00,0,0,0x00}
Ich habe bereits den Sourcecode rauf- und runter durchsucht um evt. selber an des Rätsels Lösung zu kommen,
aber leider vergebens......
Ich hoffe jemand hat noch einen guten Tip,
ich stehe mit meinen bisherigen Kenntnissen zurzeit absolut in der Luft und weiss nicht woran es noch liegen könnte
P.S.: Ich verwende
(avr-webserver093.zip)
Re: Problem mit DS18X20 und Wil´s Software auf ETH_M32
Verfasst: 23.10.2008, 07:49:34
von Erni
Hallo Wil,
benutzt Du evtl. DS18B20 Sensoren?
Beim auslesen mit OW kommt als Meldung:
#1 ist ein DS18S20/DS1820 mit parasitaerer Spannungsversorgung. 10 (18S)37 5d ff 0 8 0 77 CRC O.K. 0 17.0010 C 176
#2 ist ein DS18S20/DS1820 mit parasitaerer Spannungsversorgung. 10 (18S)43 31 ff 0 8 0 3 CRC O.K. 0 17.0014 C 179
Liegt es vielleicht daran das ich die DS18S20 verwende? An der parasitären SV dürfte es wohl nicht liegen. Ansonsten die ausgelesenen Werte hatte ich schon in der config.h eingetragen.
Also: #define OW_ID_T01 {0x10,0x37,0x5d,0xff,0x00,8,0,0x77}
#define OW_ID_T02 {0x10,0x43,0x31,0xff,0x00,8,0,0x03}
Ergebnis weiterhin =0
Noch ne Idee
Vielen Dank
Erni
Re: Problem mit DS18X20 und Wil´s Software auf ETH_M32
Verfasst: 23.10.2008, 14:02:09
von wil
Hallo,
ich habe bei mir natürlich nur DS18
B20 und daher beim lesen der vordefinierten IDs auf DS18B20 abgeprüft (haben dort 28 wo beim 18S20 eine 10 steht).
Die geänderte Routine aus messung.c hier:
Code: Alles auswählen
/**
* \ingroup messen
* bekannte DS18x20 auslesen
*/
void lese_Temperatur(void)
{
#if USE_OW
uint8_t i = 0;
uint16_t TWert;
uint8_t subzero, cel, cel_frac_bits;
uint8_t tempID[OW_ROMCODE_SIZE];
memcpy_P(tempID,DS18B20IDs[0],OW_ROMCODE_SIZE); // erste ID ins RAM holen
while (tempID[0] != 0 ) { // <<<--- auf 0 testen; nicht nur auf DS18B20_ID
// T messen
if ( DS18X20_start_meas( DS18X20_POWER_PARASITE, tempID ) == DS18X20_OK ) {
_delay_ms(DS18B20_TCONV_10BIT);
if ( DS18X20_read_meas( tempID, &subzero,&cel, &cel_frac_bits) == DS18X20_OK ) {
TWert = DS18X20_temp_to_decicel(subzero, cel, cel_frac_bits);
ow_array[i] = TWert;
}
else {
MES_DEBUG("\r\nCRC Error (lost connection?) ");
//DS18X20_show_id_uart( tempID, OW_ROMCODE_SIZE );
}
}
else MES_DEBUG("\r\n*** Messung fehlgeschlagen. (Kurzschluss?) ***");
memcpy_P(tempID,DS18B20IDs[++i],OW_ROMCODE_SIZE); // nächste ID ins RAM holen
}
#endif
}
Der DS18B20 hat eine feste Auflösung von 9 bit. In messung_init() initialisiere ich die DS18B20 auf 10 bit Genauigkeit, was beim DS18S20 keinen Sinn macht. Man kann daher die folgende Anweisung aus messung_init löschen:
Ich hoffe es klappt jetzt
Re: Problem mit DS18X20 und Wil´s Software auf ETH_M32
Verfasst: 23.10.2008, 15:05:15
von AVRnet
Es funktioniert
Vielen Dank für die Unterstützung Wil !!
Eine Frage habe ich noch bezüglich des Temperaturbereiches:
Wie sieht es mit Werten unter 0 Grad aus ?
Bevor ich mir jetzt eine lange Leitung in die Küche ins Eisfach lege,
frage ich doch hier mal nach
Re: Problem mit DS18X20 und Wil´s Software auf ETH_M32
Verfasst: 23.10.2008, 16:59:01
von Erni
Vielen Dank Wil!!!
aber bei mir funktionierts leider nicht.
Wenn ich die Änderungen in der Messung.h mache, bekomme ich als Meßergebnis= 850 also 85 Grad für beide Sensoren.
Glückwunsch AVRnet!
könntest Du evtl. Deine messung.c und config.h zum Download einstellen, oder mir per Mail mal schicken, vielleicht hat sich ja doch ein Tippfehler eingeschlichen.
Hast Du sonst noch Dateien von der
"avr-webserver093.zip" geändert?
Vielen Dank
Erni
Re: Problem mit DS18X20 und Wil´s Software auf ETH_M32
Verfasst: 23.10.2008, 18:01:24
von wil
@Erni:
The power-on reset value of the temperature register is +85°C.
So steht es im Datenblatt des DS18S20.
Hast du
parasitäre Power verwendet oder ist Pin 3 auch an Vcc angeschlossen? Falls du mal mehrere Sensoren an lange Kabel anhängen willst ist es sinnvoll nicht unbedingt auf 1-wire plus Gnd zu bestehen
Ansonsten habe ich grad gesehen, dass der DS18S20 die vollen 750ms zum konvertieren benötigt. Der DS18B20 kann von 9bit bis 12 bit eingestellt werden. Ich habe es auf 10 bit runtergestellt (siehe Beitrag oben). Dann benötigt das Teil nur noch ein Viertel der Zeit (187,5 ms). Bei mehreren von den Dingern kann es sonst schnell mal zu einigen Sekunden Messzeit anwachsen.
In der
lese_Temperatur() steht ein delay() drin. Ändere den mal auf die vollen 750 ms ab.
@AVRnet:
Eh, naja -- meine Sensoren hängen an Wasserleitungen (Heizung) und bis jetzt ist da noch nichts eingefroren. Meinen Aussensensor habe ich erst im April/Mai montiert und der Sommer war zwar nix gescheites dieses Jahr, aber so schlimm wars nun auch nicht, dass ich da schon Minus gemessen hab
Aber wenn ich mir dann nochmal den Code ansehe ... da steht doch glatt "
returns absolute value of temperatur in decicelsius" bei der Routine um die Messwerte mit Nachkommastellen in Celsius umzurechnen. Man sollte wohl den Code noch so ändern:
Werde das mal austesten
Gruß
wil
Re: Problem mit DS18X20 und Wil´s Software auf ETH_M32
Verfasst: 23.10.2008, 19:22:44
von AVRnet
Das ist ein Versuch Wert...
Ich teste das mal mit meinem Eisfach und berichte dann meine Ergebnisse.
Re: Problem mit DS18X20 und Wil´s Software auf ETH_M32
Verfasst: 23.10.2008, 20:59:19
von Erni
Danke Wil!!!
Jetzt misst er die Temperaturen richtig
Momentan läuft das ganze ja noch als Versuchsaufbau, aber später werden die Sensoren mit VCC gespeist.
Nochmals 1000 Dank - das mit den Timern hätte ich als Anfänger nie herausgefunden.
Erni
Re: Problem mit DS18X20 und Wil´s Software auf ETH_M32
Verfasst: 26.10.2008, 11:13:09
von AVRnet
Hallo,
ich möchte gern die Temperatur auf einem LCD ausgeben.
Allerdings wird die Temperatur ohne das Trennungszeichen ausgegeben ( zb.
223 anstatt
22,3 )
Ich habe versucht mich an den Code der httpd.c zu halten um das Komma zu setzen.
Auszug aus der http.c
Code: Alles auswählen
if (b >= 20) { // Offset bei Sensor# abziehen und Wert als Dezimalzahl ausgeben
b -= 20;
int8_t i = (int8_t)(ow_array[b] / 10);
itoa (i,var_conversion_buffer,10);
str_len = strnlen(var_conversion_buffer,CONVERSION_BUFFER_LEN);
var_conversion_buffer[str_len] = ',';
str_len++;
memmove(ð_buffer[TCP_DATA_START+a],var_conversion_buffer,str_len);
a += str_len;
i = ow_array[b] % 10;
itoa (i,var_conversion_buffer,10);
} else {
itoa (ow_array[b],var_conversion_buffer,10);
}
Hat jemand einen Ansatz oder Lösungsvorschlag ??
Re: Problem mit DS18X20 und Wil´s Software auf ETH_M32
Verfasst: 26.10.2008, 23:59:04
von AVRnet
NACHTRAG:
Ich habe das erfolgreich erstmal so gelöst:
Code: Alles auswählen
sprintf(TEMP_I,"INNEN: %i.%i",(ow_array[0] / 10),ow_array[0] %10); //Innen
sprintf(TEMP_A,"AUSSEN: %i.%i",(ow_array[1] / 10),ow_array[1] %10); //Aussen
Re: Problem mit DS18X20 und Wil´s Software auf ETH_M32
Verfasst: 27.10.2008, 13:51:19
von AVRnet
Den Eisfachtest habe ich gerade abgeschlossen und bin zu folgendem Ergebnis gekommen:
Beim ungeänderten Code wird bei 0 einfach wieder hochgezählt
(Es fehlt praktisch nur das "minus" als Vorzeichen)
Mit der von Wil vorgeschlagenen Codeänderung bekomme ich Werte um die 65000 °C:
while (tempID[0] !=0 ) {
// T messen
if ( DS18X20_start_meas( DS18X20_POWER_PARASITE, tempID ) == DS18X20_OK ) {
//_delay_ms(DS18B20_TCONV_10BIT);
if ( DS18X20_read_meas( tempID, &subzero,&cel, &cel_frac_bits) == DS18X20_OK ) {
TWert = DS18X20_temp_to_decicel(subzero, cel, cel_frac_bits);
if (subzero)
TWert *= (-1);
ow_array = TWert;
}
else {
MES_DEBUG("\r\nCRC Error (lost connection?) ");
//DS18X20_show_id_uart( tempID, OW_ROMCODE_SIZE );
}
}
else MES_DEBUG("\r\n*** Messung fehlgeschlagen. (Kurzschluss?) ***");
memcpy_P(tempID,DS18B20IDs[++i],OW_ROMCODE_SIZE); // nächste ID ins RAM holen
}
@Wil
Hast du noch einen Tip wie man die Änderung noch anpassen könnte ?
Re: Problem mit DS18X20 und Wil´s Software auf ETH_M32
Verfasst: 28.10.2008, 01:38:50
von wil
Hallo AVRnet,
du musst natürlich alle Speicherplätze (TWert und ow_array) von uint16_t nach int16_t abändern. Beim ow_array hatte ich das aber auch vergessen
Dann fehlt noch die passende Stringkonvertierung für html bzw. E-mail. Sieh dir mal die Änderungen in der neuen Version (1.1.01) an.
Die Stringkonvertierung kannst du auch direkt so machen:
oder mit der
dtostrf() Funktion.
Re: Problem mit DS18X20 und Wil´s Software auf ETH_M32
Verfasst: 28.10.2008, 10:42:55
von AVRnet
Hi Wil,
habe die aktuelle 1.1.0.1 gerade geladen und getestet.
Funktioniert 1A mit den Temperaturwerten unter 0
...hat den erwünschten Temperaturwert
inkl. Vorzeichen in die TEMP_A Variable geschrieben...
Vielen Dank nochmal!!
weiter so...
Gruß