From 67d25d837ac55f28a366c0a3b262e439a6e75fc3 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sat, 19 Aug 2017 12:15:28 +0200 Subject: Add AmForth --- amforth-6.5/common/lib/hardware/1wire-ds18s20.frt | 32 +++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 amforth-6.5/common/lib/hardware/1wire-ds18s20.frt (limited to 'amforth-6.5/common/lib/hardware/1wire-ds18s20.frt') 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 -- cgit v1.2.3