.: Pavolmaria :.

Teplomer na paralélny port so snímačom SMT160–30

K napísaniu toho članku ma išpiroval článok na serveri root.cz, ktorého autorom je pán Milan Ištok.

Pôvodný dizajn teplomera z článku uverejneného na serveri root.cz som upravil pridaním rezistorov R1 a R2 na piny 1 a 14 paralélneho portu. Predíde sa tým skratu v prípade, že na jednom pine je logická 1 a na druhom pine log 0. Vtedy je rozdiel potenciálov v najhoršom prípade +5V. Teda maximalný prúd tečúci z jedného pinu do druhého je cca 2,5mA (5V / 2000 Ohm = 2.5mA). Kondenzátor C by sa mal nachádzať čo najbližsie ku snímaču. V katalógovom liste je napájací prúd snímača uvádzaný v rozsahu od 160 do 200uA.

Snímač generuje obdĺžnikový signál s frekvenciou 1-4kHz v závislosti na teplote, so striedou podľa vzorca DC=0,32+0,0047*t , kde t je teplota v stupňoch Celsia.

Teplotu vypočítame podľa vzorca Teplota [st.C]=( ( (t2 / (t1 + t2) ) - 0.32) / 0.0047), kde t1 je počet meraní, keď bola na porte zistená logická 0 a t2 je počet meraní, keď bola na portu zistená logická 1.

Zdrojový kód

  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <sys/io.h>
  4.  
  5. #define DATA 0x378
  6. #define STATUS DATA+1
  7. #define CONTROL DATA+2
  8. // funkce vraci teplotu ve st. Celsia
  9. // parametry
  10. // naportu - port na kterem se provadi mereni
  11. // odkud - bite na ktery je pripojen teplomer
  12. // stav - urcuje zda je vstup negovan
  13.  
  14. #define DelkaCyklu 0xffff
  15. // vlastn mereni
  16. // negace mereni v pripade, ze je port negovan
  17. // vlastn vypocet teploty
  18. "Program musi byt spusten rootem\n""Program musi byt spusten rootem\n""Neni pristup na port\n");
  19. exit (1);
  20. }
  21.  
  22. // nastaveni control portu na 1 tak aby na nem bylo +5V pro napajeni
  23. outb (52, CONTROL);
  24. // zmereni teploty
  25. //pro LPT port a pro teplomer zapojeny na PIN 15
  26. "Teplota je %4.1f \n", ZmerTo (STATUS, 3, 0));
  27.  
  28. // nastaveni control portu na 0 tak aby bylo vypnute napajeni cidla
  29.  

Kompilácia sa spustí príkazom gcc -O6 smt160-30lpt.c -o teplomer

Ako je vidieť, program musí byť spustený rootom (alebo musí byť na programe nastavené SUID). Ďalej musím upozorniť na to, že na LPT porte sú niektoré vstupy a výstupy negované. Nevadí to, ale ak budete zapájať viac snímačov na jeden LPT port, je nutné s tím počítať.

Na stiahnutie

Anglický katalógový list
Český katalógový list
Zdrojový súbor smt160-30lpt.c

Linky

http://www.root.cz/clanky/nejjednodussi-online-teplomer/

Na vrch stránky