aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/common/lib/hardware/1wire-ds18s20.frt
diff options
context:
space:
mode:
Diffstat (limited to 'amforth-6.5/common/lib/hardware/1wire-ds18s20.frt')
-rw-r--r--amforth-6.5/common/lib/hardware/1wire-ds18s20.frt32
1 files changed, 32 insertions, 0 deletions
diff --git a/amforth-6.5/common/lib/hardware/1wire-ds18s20.frt b/amforth-6.5/common/lib/hardware/1wire-ds18s20.frt
new file mode 100644
index 0000000..95be0c1
--- /dev/null
+++ b/amforth-6.5/common/lib/hardware/1wire-ds18s20.frt
@@ -0,0 +1,32 @@
+\ 2009-12-23 EW ewlib/1w_ds18s20.fs
+\ 2013-01-13 ported to amforth-5.0
+
+\ --- Fam.10 DS18S20 thermometer -----------------------------
+
+\ conversion + warten ist schon rum!
+: 1w.rd.T ( addr[8] -- x1=Tl x2=Th x3 .. x9=crc )
+ 1w.reset drop \ fixme: if ... then
+ \ device addressieren
+ 1w.cmd.matchrom &9 >1w
+ 1w.cmd.readdata &1 >1w
+ &9 <1w
+;
+
+\ convert answer to physical units 1/100 C
+: ds18s20.decode ( x1 .. x9=crc -- T*100 ok )
+ 7 0 do drop loop \ ignore crc
+ 8 lshift + \ combine T_h T_l
+ &100 &2 */ \ scale
+ 0 \ ok, because we ignore crc
+;
+: ds18s20.decode.check ( x1 .. x9=crc -- T*100 ok=0 | error=1 )
+ 7 pick >r 8 pick >r \ save data
+ 8 1w.crc8.rev? if \ crc good?
+ r> r> 8 lshift +
+ &100 &2 */
+ 0 \ ok
+ else
+ r> r> drop drop
+ 1 \ error
+ then
+; \ No newline at end of file