add archive (files probably no longer used)
here we can find old files
This commit is contained in:
122
tcl/archive/drivers/ana8.tcl
Normal file
122
tcl/archive/drivers/ana8.tcl
Normal file
@@ -0,0 +1,122 @@
|
||||
# read 8 ADC channels with taskit RS232 ADC
|
||||
namespace eval ana8 {
|
||||
}
|
||||
|
||||
if {![namespace exists lsc]} {
|
||||
source drivers/lsc.tcl
|
||||
}
|
||||
|
||||
proc stdConfig::ana8 {channel {scale 1} {offset 0} {curve ""}} {
|
||||
|
||||
controller std "\r" 2
|
||||
prop node_$channel 0
|
||||
prop time_$channel 0
|
||||
poll 1 read ana8::poll
|
||||
|
||||
pollperiod 5
|
||||
obj ANA8 rd
|
||||
prop read "ana8::read $channel"
|
||||
variable name
|
||||
variable path
|
||||
kids "$name analog input" {
|
||||
node scale par $scale
|
||||
|
||||
node offset par $offset
|
||||
|
||||
node raw upd
|
||||
|
||||
node curve out -text
|
||||
prop width 32
|
||||
prop model 0
|
||||
prop check ana8::curve
|
||||
prop write stdSct::completeUpdate
|
||||
|
||||
kids "calibration" {
|
||||
hfactory $path/points plain mugger floatvarar 1
|
||||
}
|
||||
}
|
||||
if {$curve ne "" && $curve ne "raw"} {
|
||||
hset /$name/curve $curve
|
||||
} else {
|
||||
hupdate /$name/curve ""
|
||||
}
|
||||
return "ANA8"
|
||||
}
|
||||
|
||||
proc ana8::start {} {
|
||||
# set adc rate to 11
|
||||
sct send ":10000D000102000B.."
|
||||
return ana8::start2
|
||||
}
|
||||
|
||||
proc ana8::start2 {} {
|
||||
# set all i/o to output / push-pull / low
|
||||
sct send ":10000000030600FF00FF0000.."
|
||||
return ana8::getidn
|
||||
}
|
||||
|
||||
proc ana8::getidn {} {
|
||||
sct send ":0300030001.."
|
||||
return stdSct::completeStart
|
||||
}
|
||||
|
||||
proc ana8::read {channel} {
|
||||
sct node_$channel [sct]
|
||||
sct time_$channel [DoubleTime]
|
||||
return idle
|
||||
}
|
||||
|
||||
proc ana8::poll {} {
|
||||
set now [DoubleTime]
|
||||
set channels [list ]
|
||||
foreach channel {0 1 2 3 4 5 6 7} {
|
||||
if {$now < [silent 0 sct time_$channel] + 30} {
|
||||
lappend channels $channel
|
||||
}
|
||||
}
|
||||
if {[llength $channels] == 0} {
|
||||
return idle
|
||||
}
|
||||
set first [lindex $channels 0]
|
||||
set nchan [expr [lindex $channels end] - $first + 1]
|
||||
if {$nchan > 0} {
|
||||
sct channels $channels
|
||||
sct nchan $nchan
|
||||
sct send ":04000${first}000${nchan}.."
|
||||
return ana8::update
|
||||
}
|
||||
return idle
|
||||
}
|
||||
|
||||
proc ana8::update {} {
|
||||
set first [lindex [sct channels] 0]
|
||||
set nb [format %.2X [expr [sct nchan] * 2]]
|
||||
set res [scan [sct result] ":04${nb}%4x%4x%4x%4x%4x%4x%4x%4x" a0 a1 a2 a3 a4 a5 a6 a7]
|
||||
if {$res < [sct nchan]} {
|
||||
error "bad response to '[sct send]': '[sct result]'"
|
||||
}
|
||||
foreach ch [sct channels] {
|
||||
set i [expr $ch - $first]
|
||||
set scale [hval [sct node_$ch]/scale]
|
||||
set offset [hval [sct node_$ch]/offset]
|
||||
# 26214 = (2^32-1) steps / 2.5 V
|
||||
set raw [expr [set a$i] / 26214. * $scale + $offset]
|
||||
set node [sct node_$ch]
|
||||
updateval $node/raw $raw
|
||||
if {[hval $node/curve] eq ""} {
|
||||
updateval $node $raw
|
||||
} else {
|
||||
set t [interpolate [hvali $node/curve/points] 0 $raw logy extrapolate]
|
||||
updateval $node $t
|
||||
}
|
||||
}
|
||||
return idle
|
||||
}
|
||||
|
||||
proc ana8::curve {} {
|
||||
if {[sct requested] ne "" && [sct requested] ne "raw"} {
|
||||
lsc::read_curve
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user