Jag lyckades inte så bra med att använda det färdiga .Net API:t från Dallas mot den One-wire seriekonverter jag byggde. Om det är att jag har byggt konvertern själv eller om det är min temp-sensor som gör det vet jag inte.
Men nu har jag i alla fall lyckats med att läsa av temperaturer från givaren. För att man skall kunna läsa av temperaturen måste man berätta för givaren att man vill läsa av ett nytt värde. Om man inte gör det får man det gamla värdet. I .Net-API:t finns en klass som heter TemperatureContainer med funktionen doTemperatureConvert som skall ge givaren besked om att man vill läsa av ett nytt värde. Det funkade dock inte för mig. I stället fick jag gå en nivå ner och använda funktionen putByte(0x44), där 0x44 är det samma som att konvertera temperaturen. Jag har inte lyckats lista ut varför doTemperatureConvert inte fungerar, men som et kan verka är det på grund av att jag inte har en extern strömkälla som matar one-wire nätet. Jag måste dock söka lite info om det först.
Eftersom operationen med att konvertera temperaturen nu görs på själva adaptern (alltså hela konverterns nät), måste man ange vilken typ av sensorer som skall ingå i 'omfånget'. Det görs genom att ange vilket familj som skall adresseras med kommandot
adapter.targetFamily(0x10);
där 0x10 anger att det är temperaturgivare som skall adresseras. Sedan skall en sökning efter dessa göras på nätet,
adapter.setSearchAllDevices();
och för att alla givera av typen skall reagera, görs ett kommando som säger att adaptern inte skall bry sig om adresserna (Skip ROM)
adapter.putByte(0xCC);
Om man har en extern strömkälla som kan leverera ström på nätet skall man starta denna nu. Annars är det bara att göra en temperaturkonvertering och sedan läsa ut temperaturerna från givarna.
januari 6, 2007 at 12:20 f m
Hej Jarle,
Jag sitter just nu med samma problem som du beskriver i ditt inlägg; doTemperatureConvert() fungerar inte. Så vitt jag kan se så beror det på att jag inte har en riktig DS9097E adapter kopplad till min COM-port; alla försök att skriva till DS18S20-sensorn resulterar i ett OneWireException(”Hardware option not available”), däremot fungerar putByte(0x40), precis som du också såg.
Kom du fram till något mer angående detta eller valde du att köpa en riktig adapter?
// Per
januari 9, 2007 at 12:37 e m
Hej Per,
För att vara helt ärlig så ligger projektet lite på is. Men jag gjorde en funktion som bakar in de ‘lågnivå’-funktionerna som behövs för att få min hemmagjorda adapter att funka. Sen var tanken att bygga lite tjänster kring detta. Realtidsinformation och för statistik. Men ack, så kommer andra spännande projekt i vägen. 🙂
Jag har dock funderat på att köpa en USB-adapter. Det skulle underlätta lite eftersom inte alla datorer har COM-portar längre. Men allra helst skulle jag vilja ha en trådlös överföring från alla givare. Det vore coolt.
maj 31, 2007 at 10:14 e m
[…] allow me to write to the device, but I’ll have to dig deeper into this. I seems I’m not the only one with this […]