Sida 1 av 1

Nybörjarfråga 1-wire tempgivare

Postat: 5 januari 2008, 22:40:11
av doggy
Hej!
Är ny på forumet! :)

Har ibland känt behovet av att kunna ta in temperaturdata i mina
små laborationer men har inte riktigt hittat någon lämplig givare eller
billigare grunka för att åstakomma det med rimliga insatser.

Har till och från sneglat lite på Dallas DS1820, "1-wire". Tyckte den
verkade väldigt enkel att använda tills jag sneglade lite på protokollet
i databladet till den. Blev lite avskräckt, är det lika "krångligt" som det
ser ut eller är får man igång komunikationen med en rimlig kodsnutt?

Någon som har praktiska erfarenheter av dessa eller liknande som kan
ge mig lite hintar om vad det rör sig om för insats.

Tack på förhand!

Postat: 5 januari 2008, 22:44:27
av ElectricMan

Postat: 5 januari 2008, 22:46:40
av zeus

Postat: 5 januari 2008, 23:21:17
av doggy
Tack för tipsen, trasslade vidare och hamnade på
en sida med lite kod som jag tyckte verkade ganske givande:
http://www.phanderson.com/PIC/PICC/low_ ... 820_1.html

Verkade ju ganska enkelt att prata med givarna med "bit bangin"

Postat: 5 januari 2008, 23:58:02
av MadModder
Sen har vi ju DS2480B som tar hand om 1-wire-nätet, så behöver man bara snacka vanlig seriell data via en UART. Lite anklare att skicka hela bytes, och få data tillbaks som man förstår. Går åt mindre kod i sitt program, och man behöver inte hålla tiden, mer än för den seriella komunikationen. ;)

Postat: 6 januari 2008, 01:39:49
av doggy
Mycket bra tips, den kretsen verkar klart intressant!

Postat: 6 januari 2008, 01:55:46
av doggy
Har ögnat igenom databladet på den ett par gånger men det är
ett par saker jag funderar lite på innan jag trycker på köp-knappen.

Det de kallar för Temperature conversion sequence antar jag är sekvensen
som används för att hämta in en temperatur. Skickas svaret på frågan
direkt eller skrivs det till något internt minne i kretsen? Hur serveras förresten svaret, måste man konvertera det på något vis?

Postat: 6 januari 2008, 09:49:09
av Cedro
Jag är nybörjare på mikroprocessorer men fick ändå igång min ds1820-termometer utan större problem. Jag tyckte också protokollet verkade rörigt till en början, men det är faktiskt ganska simpelt och praktiskt.
När man skickat ett "temp conversion"-kommando till sensorn så konverterar den temperaturen till ett digitalt värde och lagrar det internt på "scratchpad". Sedan skickar man ett "read scratchpad"-kommando till sensorn som då börjar skicka datan, bit för bit. 1-wire fungerar ju så att "master" måste initiera varje bit för sig. Värdet du får behöver inte konverteras, utan det är i stort sett bara att skicka till LCD-n, eller vad du tänkte visa tempen på.

Postat: 6 januari 2008, 13:34:49
av Soap
Låmar tråden en liten stund.
jag har länge kört templogger på min server, loggat till textfil som hämtas av webservern och presenteras via php.

Nu är såväl hårdvara och mjukvara utbytt i servern. (debian som OS nu)
Har lyckats att sätta upp digitemp att logga till en mysql databas.
men där blev det stopp.
Nu har jag bara en templogger som inte presenteras nån stans utan man få gå in via databasen och kolla sina värden.
Jag vill ha Dtgraph i samarbete med JPgraph att presentera på websida, så man kan få lite grafer och mer överkripande statistik.
Men jag får INTE igång det.. har suttit i flera dygn för att få igång det, men det vill sig INTE.

Någon som är villig att ge mig lite support.
Jag är ingen guru på linux, men llite ska jag väl klara av.
Har ju lyckats installera å confa mailserver, webserver, webmail, digitemp, ventrilo, osv...

Postat: 6 januari 2008, 20:46:06
av doggy
Vad är det som inte fungerar, vad får du för fel? Loggar?

Postat: 6 januari 2008, 23:01:31
av ensten
Soap > Jag hade ett elände också med den uppsättningen. Tyvärr vet jag inte vad jag gjorde för att få igång det ... Men det var inte helt trivialt.

Men så här ser det ut live i alla fall. http://80.86.67.171/dtgraph

Postat: 7 januari 2008, 15:34:55
av PHermansson
DTgraph har jag inte provat men ser intressant ut. JPGraph däremot har jag lekt en del med, tycker inte det är så svårt. Ett exempel:

Kod: Markera allt

<?php
include ("src/jpgraph.php");
include ("src/jpgraph_line.php");

//Get data
$username="***";
$password="***";
$database="HomeData";
$dateNow=date('Y-m-d');

mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( "Unable to select database");

//Get total number of records
$query="select count(*) from lightvalues";
$result=mysql_query($query);
$rowsTotal=mysql_result($result,0);

//Last values
$offset=$rowsTotal-96;

$query="SELECT * FROM lightvalues order by id asc LIMIT 100 OFFSET $offset";

$result=mysql_query($query);
$num=mysql_numrows($result);

mysql_close();

$i=0;
$ydata = array();
$datax = array();
while ($i < $num) {

        $sensor1=mysql_result($result,$i,"sensor1");
        $sensor2=mysql_result($result,$i,"sensor2");
        $sensor3=mysql_result($result,$i,"sensor3");
        $sensor4=mysql_result($result,$i,"sensor4");
        $sensor5=mysql_result($result,$i,"sensor5");
        $time=mysql_result($result,$i,"time");
        $date=mysql_result($result,$i,"date");
        $ydata1[$i] = $sensor1*20;
        $ydata2[$i] = $sensor2;
        $ydata5[$i] = $sensor5*20;

        $temp=$sensor3;
        $ydata3[$i]=str_replace(",",".",$temp);

        $temp=$sensor4;
        $ydata4[$i]=str_replace(",",".",$temp);

        $datax[$i] = $time;
        //echo "$sensor1 $sensor2 $sensor3 $sensor4<br>";

        $i++;
}

// Create the graph. These two calls are always required
$graph = new Graph(1000,600,"auto");
//X&Y linear scale
$graph->SetScale("linlin");
//$graph-> SetScale( "textlin",0,115 );

//Add a second Y-scale
//$graph->SetY2Scale("int",0,115);

// Adjust the margin
$graph->img->SetMargin(40,180,20,40);

// Create the linear plot
$lineplot=new LinePlot($ydata1);
$lineplot->SetColor("blue");

$lineplot2=new LinePlot($ydata2);
$lineplot2->SetColor("red");

$lineplot3=new LinePlot($ydata3);
$lineplot3->SetColor("green");

$lineplot4=new LinePlot($ydata4);
$lineplot4->SetColor("brown");

$lineplot5=new LinePlot($ydata5);
$lineplot5->SetColor("cyan");

// Add the plot to the graph
$graph->Add($lineplot);
$graph->Add($lineplot2);
$graph->Add($lineplot3);
$graph->Add($lineplot4);
$graph->Add($lineplot5);
//$graph->AddY2($lineplot4);

//Legends
$lineplot->SetLegend ("Light outdoor");
$lineplot2->SetLegend ("Outdoor temp");
$lineplot3->SetLegend ("Indoor temp");
$lineplot4->SetLegend ("Air pressure");
$lineplot5->SetLegend ("Light indoor");

// Adjust the legend position
$graph->legend->Pos(0.05,0.5,"right","center");

//Grid lines
$graph->ygrid->Show (true,true);

$graph->xaxis->SetTickLabels($datax);
$graph->xaxis->SetTextTickInterval(5);

$graph->SetTickDensity(TICKD_DENSE,TICKD_NORMAL); // Many Y-ticks


//Title
$graph->title->SetMargin (20);
$graph->tabtitle->Set ( $date );

// Display the graph
$graph->Stroke();

?>