DS 1820 hőmérő - nem lehet kolvasni többet - hol a probléma?
DS 1820 hőmérő - nem lehet kolvasni többet - hol a probléma?
Üdvözletem!
Van 4db DS18B20 hőmérőm.
Ha csak 2-3 van a renszerben akkor kiolvassa az értékeket a rendszer.
Ha beteszem a 4. et is akkor valamiért nem tudja kiolvasni egyik hőmérőt sem. Ha bármelyik hőmérőt leveszem akkor a többit ismét ki tudja olvasni.
Mi lehet a gond?
Közös tápon vannak. Mindegyik hőmérő adatlába külön bekötve 4,7K ellenállással a VCC re.
Ha egy csatlakozási pontra akarom bekötni őket akkor már a 2. hőmérőnél sem működik.
Van 4db DS18B20 hőmérőm.
Ha csak 2-3 van a renszerben akkor kiolvassa az értékeket a rendszer.
Ha beteszem a 4. et is akkor valamiért nem tudja kiolvasni egyik hőmérőt sem. Ha bármelyik hőmérőt leveszem akkor a többit ismét ki tudja olvasni.
Mi lehet a gond?
Közös tápon vannak. Mindegyik hőmérő adatlába külön bekötve 4,7K ellenállással a VCC re.
Ha egy csatlakozási pontra akarom bekötni őket akkor már a 2. hőmérőnél sem működik.
Re: DS 1820 hőmérő élesztés
Mert parazita módban van. Nincs önálló Vcc.
A Vcc-t is mindegyik hőmérőn kössed be. Igaz csak 1 felhúzóellenállás van és nem hőmérőnként 1-1 4k7-es?
A hőmérsékletkonverzió csak hőmérőnként indítható, nem egyszerre az összes hőmérőn!
A Vcc-t is mindegyik hőmérőn kössed be. Igaz csak 1 felhúzóellenállás van és nem hőmérőnként 1-1 4k7-es?
A hőmérsékletkonverzió csak hőmérőnként indítható, nem egyszerre az összes hőmérőn!
Re: DS 1820 hőmérő élesztés
Minden szenzoros van ellenállás. Készítek kapcsolási rajzot róla este. Rövid kábellel egymás után ki tudtam olvasni a szenzorokaz
. A csillagpontos bekötés is lehet gond?
. A csillagpontos bekötés is lehet gond?
Re: DS 1820 hőmérő élesztés
TILOS minden szenzorra az ellenállás! A belső kapcsolótranzisztor leéghet!
Csak a drót végére lehet.
Olvasnivaló: 1Wire design guide (maxim-ic.com)
Csak a drót végére lehet.
Olvasnivaló: 1Wire design guide (maxim-ic.com)
Re: DS 1820 hőmérő élesztés
Mellékelem a nyák ide vonatkozó részét.
Jelenleg egy áramforrás van. Egy DC-DC átalakító ami 12V ról leveszi 5V ra a feszültséget. Erről kap minden tápot.
Az ellenállásokat jumperrel tudom Vcc re vagy földre húzni. A kompatibilitás miatt minden csatlakozáshoz betettem az ellenállást.
Elméletileg ha csak 1 jumper van feltéve akkor kellene működnie. Gyakorlatilag minél több jumper van feltéve, annál több szenzort képes beolvasni. 4 jumperrel olvas be 3 szenzort. Ami nekem még nem elég.
Jelenleg egy áramforrás van. Egy DC-DC átalakító ami 12V ról leveszi 5V ra a feszültséget. Erről kap minden tápot.
Az ellenállásokat jumperrel tudom Vcc re vagy földre húzni. A kompatibilitás miatt minden csatlakozáshoz betettem az ellenállást.
Elméletileg ha csak 1 jumper van feltéve akkor kellene működnie. Gyakorlatilag minél több jumper van feltéve, annál több szenzort képes beolvasni. 4 jumperrel olvas be 3 szenzort. Ami nekem még nem elég.
Nincs meg a kellő jogosultságod a hozzászóláshoz csatolt állományok megtekintéséhez.
Re: DS 1820 hőmérő élesztés
Programkód?
A nem olvas mit jelent?
- nincs a buszon a hőmérő?
- 85 fok az eredmény?
A nem olvas mit jelent?
- nincs a buszon a hőmérő?
- 85 fok az eredmény?
Re: DS 1820 hőmérő élesztés
Nem hinném hogy a program kóddal van a gond. Tudok kiolvasni szenzort, csak ha sok szenzor van(ez esetben 4) akkor nem olvassa be.
Próba képpen a meglévő 4db 4K7 ellenállás mellé betettem még egyet. (A kapcsolást megnézve a 4 ellenállás egy 1.125K ellenállásnak felelt meg)Így az eredő ellenállás 1K körül van. Be is olvassa a szenzorokat. Hogy miért, nem tudom. A lényeg hogy most kiolvasható mind a 4 szenzor. Lehet hogy az ellenállás helyére egy potit kell tenni, mert a kiépített szenzor db szám és kábelhossz miatt változik a VCC és adatbusz közé betehető ellenállás?
Próba képpen a meglévő 4db 4K7 ellenállás mellé betettem még egyet. (A kapcsolást megnézve a 4 ellenállás egy 1.125K ellenállásnak felelt meg)Így az eredő ellenállás 1K körül van. Be is olvassa a szenzorokat. Hogy miért, nem tudom. A lényeg hogy most kiolvasható mind a 4 szenzor. Lehet hogy az ellenállás helyére egy potit kell tenni, mert a kiépített szenzor db szám és kábelhossz miatt változik a VCC és adatbusz közé betehető ellenállás?
Re: DS 1820 hőmérő élesztés
A kódom a következő:
Ebből érdekes lehet a következő sor:
ds.write(0x44, 1); // start conversion, with parasite power on at the end
A szenzorok szerintem nem parazita módban vannak bekötve. Rá van vezetve külön a VCC és a GND is. Vagy Én értelmezem rosszul a parazita módot.
Kód: Egész kijelölése
if(!sensor_olvas)
{
sensor_olvas++;
if ( !ds.search(addr))
{
// Serial.println("No more addresses.");
// Serial.println("Nincs tobb szenzor. Ujra lessz inditva a beolvasás.");
// Serial.println("ROM szamlalo ujraindítás");
ds.reset_search();
delay(100);
return;
}
else
{
// Ha van még szabad ROM beolvasni
temp="";
// Serial.println("ROM =");
for( i = 0; i < 8; i++)
{
// Serial.write(' ');
// Serial.print(addr[i], HEX);
temp1=String(addr[i], HEX);
if (temp1.length()==1)
{
temp=temp+0;
}
temp=temp+temp1;
}
rom_cim0=temp;
if (OneWire::crc8(addr, 7) != addr[7])
{
Serial.println("CRC is not valid!");
return;
}
// the first ROM byte indicates which chip
switch (addr[0]) {
case 0x10:
// Serial.println(" Chip = DS18S20"); // or old DS1820
type_s = 1;
break;
case 0x28:
// Serial.println(" Chip = DS18B20");
type_s = 0;
break;
case 0x22:
// Serial.println(" Chip = DS1822");
type_s = 0;
break;
default:
// Serial.println("Device is not a DS18x20 family device.");
return;
}
ds.reset();
ds.select(addr);
ds.write(0x44, 1); // start conversion, with parasite power on at the end
delay(1000); // maybe 750ms is enough, maybe not
// we might do a ds.depower() here, but the reset will take care of it.
present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
for ( i = 0; i < 9; i++)
{ // we need 9 bytes
data[i] = ds.read();
}
// Convert the data to actual temperature
// because the result is a 16 bit signed integer, it should
// be stored to an "int16_t" type, which is always 16 bits
// even when compiled on a 32 bit processor.
int16_t raw = (data[1] << 8) | data[0];
if (type_s)
{
raw = raw << 3; // 9 bit resolution default
if (data[7] == 0x10)
{
// "count remain" gives full 12 bit resolution
raw = (raw & 0xFFF0) + 12 - data[6];
}
} else
{
byte cfg = (data[4] & 0x60);
// at lower res, the low bits are undefined, so let's zero them
if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms
else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
//// default is 12 bit resolution, 750 ms conversion time
}
homerseklet = celsius = (float)raw / 16.0;
}
ds.write(0x44, 1); // start conversion, with parasite power on at the end
A szenzorok szerintem nem parazita módban vannak bekötve. Rá van vezetve külön a VCC és a GND is. Vagy Én értelmezem rosszul a parazita módot.
Re: DS 1820 hőmérő élesztés
A hőmérőkhöz 3 vezeték megy?
Vcc/GND és DQ?
A hőmérés egyesével megy végig...
85 fokot kapsz vissza, vagy nincs eszköz a buszon?
A felhúzóra elvileg érzéketlen. 2k2...4k7 lehet (10 k már zavarérzékennyé teszi).
Vcc/GND és DQ?
A hőmérés egyesével megy végig...
Kód: Egész kijelölése
ds.reset();
ds.select(addr);
ds.write(0x44, 1); // start conversion, with parasite power on at the end
85 fokot kapsz vissza, vagy nincs eszköz a buszon?
A felhúzóra elvileg érzéketlen. 2k2...4k7 lehet (10 k már zavarérzékennyé teszi).
Re: DS 1820 hőmérő élesztés
Mind a 3 vezeték be van kötve.
A kód lekérdezi a címeket és utána ciklusonként minden talált címe lekérdezi a hőfokot.
Most azt vettem észre hogy a 0,06 °C pontosságú mérés helyett csak 0.5°C pontossággal dolgozik.
1 szenzornál van eredmény. 4K7 ellenállásnál.
2 szenzornál akkor van eredmény ha 2db 4K7 van párhuzamosítva. Tehát 2K35
És így tovább. Akkor olvassa be a következő szenzort ha mindig párhuzamosan beteszek egy újabb ellenállást.
A 4 szenzort úgy olvassa be ha 5db 4K7 ellenállás van párhuzamosan betéve. Ez az amit nem értek.
A kód lekérdezi a címeket és utána ciklusonként minden talált címe lekérdezi a hőfokot.
Most azt vettem észre hogy a 0,06 °C pontosságú mérés helyett csak 0.5°C pontossággal dolgozik.
1 szenzornál van eredmény. 4K7 ellenállásnál.
2 szenzornál akkor van eredmény ha 2db 4K7 van párhuzamosítva. Tehát 2K35
És így tovább. Akkor olvassa be a következő szenzort ha mindig párhuzamosan beteszek egy újabb ellenállást.
A 4 szenzort úgy olvassa be ha 5db 4K7 ellenállás van párhuzamosan betéve. Ez az amit nem értek.
Re: DS 1820 hőmérő élesztés
Szerintem kiiratom az összes adatot amit kiszed a program a szenzorból és átnézem végig.
A SCRATCHPAD - CONFIGURATION REGISTER része a felelős hogy 9,10,11,12 bites az eredmény.
Mivel a 12 az alapértelmezett ezért gyanítom hogy rosszul olvassa ki az adatokat és ezért rontja el.
Kipróbálom fix ROM címekkel is az olvasást. Így lehet még a sebessége is gyorsabb lesz.
A SCRATCHPAD - CONFIGURATION REGISTER része a felelős hogy 9,10,11,12 bites az eredmény.
Mivel a 12 az alapértelmezett ezért gyanítom hogy rosszul olvassa ki az adatokat és ezért rontja el.
Kipróbálom fix ROM címekkel is az olvasást. Így lehet még a sebessége is gyorsabb lesz.
Re: DS 1820 hőmérő élesztés
Szerintem a felhúzó R-eket a mérő egységeken kellene elhelyezni, nem pedig 1 kupacba a központi egységen!
Ez okozhatja nálad a hibát!
Ez okozhatja nálad a hibát!
Re: DS 1820 hőmérő élesztés
A vcc kábeled szakadt.
Re: DS 1820 hőmérő élesztés
Ez lehet hiba. Bár az okát nem értem.kapu48 írta:Szerintem a felhúzó R-eket a mérő egységeken kellene elhelyezni, nem pedig 1 kupacba a központi egységen!
Ez okozhatja nálad a hibát!
Levettem a jumpert a felhúzó ellenállásról és forrasztottam egyet az egyik csatlakozóhoz.
Most úgy tűnik működik vele.
Már csak vissza kell állítani a szenzorokat 12 bites módra, mert úgy látom most csak 9 bitesben megy. Ha a szenzort lecserélem egy olyanra amit még nem használtam akkor működik a 0,06 °C felbontás. Amúgy meg csak a 0,5°C ban dolgozik.
Re: DS 1820 hőmérő élesztés
A szenzoroknak _te_ mondod meg, hogy hány bites módban működjenek.
Alap: 0,5 fok (9bites) és ez rakható át 10-11-12 bitesre.
A hibát megkeresném. A felhúzóellenállás értékének csökkenése mögött még 1 ok lehet:
A kábeled hosszú és nagy kapacitás van a GND/DQ közt. Pl. UTP kábel sodort párját használod. Ekkor a Vcc/GND az egyik sodorpár és a DQ ettől független éren/érpáron legyen.
Alap: 0,5 fok (9bites) és ez rakható át 10-11-12 bitesre.
A hibát megkeresném. A felhúzóellenállás értékének csökkenése mögött még 1 ok lehet:
A kábeled hosszú és nagy kapacitás van a GND/DQ közt. Pl. UTP kábel sodort párját használod. Ekkor a Vcc/GND az egyik sodorpár és a DQ ettől független éren/érpáron legyen.