Nybörjarfråga 1-wire tempgivare

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
doggy
Inlägg: 18
Blev medlem: 5 januari 2008, 22:24:24
Ort: Örebro

Nybörjarfråga 1-wire tempgivare

Inlägg 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!
Användarvisningsbild
ElectricMan
Inlägg: 4874
Blev medlem: 21 februari 2007, 20:22:48
Skype: ElectricManSwe
Ort: Luleå
Kontakt:

Inlägg av ElectricMan »

Användarvisningsbild
zeus
Inlägg: 7058
Blev medlem: 17 juni 2003, 22:13:44
Ort: Sthlm.

Inlägg av zeus »

doggy
Inlägg: 18
Blev medlem: 5 januari 2008, 22:24:24
Ort: Örebro

Inlägg 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"
Användarvisningsbild
MadModder
Co Admin
Inlägg: 31560
Blev medlem: 6 september 2003, 13:32:07
Ort: MadLand (Enköping)
Kontakt:

Inlägg 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. ;)
doggy
Inlägg: 18
Blev medlem: 5 januari 2008, 22:24:24
Ort: Örebro

Inlägg av doggy »

Mycket bra tips, den kretsen verkar klart intressant!
doggy
Inlägg: 18
Blev medlem: 5 januari 2008, 22:24:24
Ort: Örebro

Inlägg 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?
Cedro
Inlägg: 14
Blev medlem: 8 oktober 2006, 12:44:55
Ort: Storvreta

Inlägg 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å.
Soap
Inlägg: 764
Blev medlem: 18 oktober 2003, 10:23:42
Ort: Uddevalla
Kontakt:

Inlägg 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...
doggy
Inlägg: 18
Blev medlem: 5 januari 2008, 22:24:24
Ort: Örebro

Inlägg av doggy »

Vad är det som inte fungerar, vad får du för fel? Loggar?
Användarvisningsbild
ensten
EF Sponsor
Inlägg: 3759
Blev medlem: 19 oktober 2004, 15:55:20
Ort: Hudiksvall

Inlägg 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
Användarvisningsbild
PHermansson
EF Sponsor
Inlägg: 4340
Blev medlem: 22 december 2004, 00:46:38
Ort: Särestad Grästorp
Kontakt:

Inlägg 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();

?>
Skriv svar