Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Názor k článku
Nejjednodušší online teploměr

thovt
thovt (neregistrovaný)
3. 11. 2008 12:46

Kam s druhym cidlem?

celé vlákno
Tady je odkaz na dvě čidla .http://luv-i.net/?pg=pocasi_teplomer
Ve zdrojovém kodu jsou tam chyby.

Muj funguje

Teplomer.c

#include <stdio.h>
#include <unistd.h>
#include <sys/io.h>
#include <stdlib.h>

#define DATA 0x378
#define STATUS DATA+1
#define CONTROL DATA+2

float ZmerTo (unsigned short naportu, unsigned char odkud, int stav)

// funkce vraci teplotu ve st. Celsia
// parametry
// naportu - port na kterem se provadi mereni
// odkud - bite na ktery je pripojen teplomer
// stav - urcuje zda je vstup negovan

#define DelkaCyklu 0xffff

{
int t0, t1, t2;
int mask = (1 << odkud);
t1=0;
t2=0;

for (t0 = 0; t0 < DelkaCyklu; t0++)
// vlastní mereni
if ((inb (naportu) & mask) == 0) t1++ ;

// negace mereni v pripade, ze je port negovan
t2=DelkaCyklu-t1;
if (stav!=0){
t1=t2;
t2=DelkaCyklu-t1;
};
// vlastní vypocet teploty 16
return ((((double)t2 / ((double)DelkaCyklu)) - 0.32) / 0.0047 +16);
}

int main (void)
{
if (setuid (0) < 0)
{
printf ("Program musi byt spusten rootem\n");
exit (1);
}
if (ioperm (STATUS, 3, 1))
{
printf ("Program musi byt spusten rootem\n");
exit (1);
}
if (ioperm (CONTROL, 3, 1))
{
printf ("Neni pristup na port\n");
exit (1);
}


// nastaveni control portu na 1 tak aby na nem bylo +5V pro napajeni
outb (52, CONTROL);

// zmereni teploty
//pro LPT port a pro teplomer zapojeny na PIN 15
printf ("IN %4.1f \n", ZmerTo (STATUS, 3, 0));

//pro lpt port a pro teplomer zapojeny na pin 10
printf ("OUT %4.1f\n", ZmerTo (STATUS, 6, 0));

// nastaveni control portu na 0 tak aby bylo vypnute napajeni cidla
outb (55, CONTROL);

return (0);
}