From 9c286eb3cde4401189faecc3490f2a14bb6e693b Mon Sep 17 00:00:00 2001 From: Jan Michel Date: Mon, 30 Sep 2024 15:00:08 +0200 Subject: [PATCH] simple temperature sensor read script --- scripts/read_1wire_sensors.pl | 82 +++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100755 scripts/read_1wire_sensors.pl diff --git a/scripts/read_1wire_sensors.pl b/scripts/read_1wire_sensors.pl new file mode 100755 index 0000000..58c5b9f --- /dev/null +++ b/scripts/read_1wire_sensors.pl @@ -0,0 +1,82 @@ +#!/usr/bin/perl + +use Getopt::Long; +use HADES::TrbNet; +use Time::HiRes qw(usleep); +use Data::Dumper; + + +trb_init_ports() or die trb_strerror(); + + +i2c_cmd(0xfe90,0x30,0xd2,0xe1); +usleep(1000); + +i2c_cmd(0xfe90,0x30,,0xb4); +usleep(2000); + +i2c_cmd(0xfe90,0x30,0xa5,0xcc); +usleep(2000); +i2c_cmd(0xfe90,0x30,0xa5,0x44); +usleep(2000); + +sleep(1); + +i2c_cmd(0xfe90,0x30,,0xb4); +usleep(2000); + +i2c_cmd(0xfe90,0x30,0xa5,0xcc); +usleep(2000); +i2c_cmd(0xfe90,0x30,0xa5,0xbe); +usleep(2000); + +i2c_cmd(0xfe90,0x30,0x96); +usleep(2000); +i2c_cmd(0xfe90,0x30,0xe1,0xe1); +usleep(2000); +my $ret1 = i2c_cmd(0xfe90,0x30,0xe1); + +i2c_cmd(0xfe90,0x30,0x96); +usleep(2000); +i2c_cmd(0xfe90,0x30,0xe1,0xe1); +usleep(2000); +my $ret2 = i2c_cmd(0xfe90,0x30,0xe1); + +foreach my $f (keys %$ret1) { + next if ($ret1->{$f} == 0xff && $ret2->{$f} == 0xff); + printf("%04x\t%2.1f\n",$f,($ret1->{$f}+($ret2->{$f} << 8))/2); + } + + + +sub i2c_cmd { + my ($fpga,$addr,$cmd,$byte1,$byte2) = @_; + my $reg_data = (($byte2||0) << 24) + (($byte1||0) << 16) + (($cmd||0) << 8) + 0x80 + ($addr >> 1); + my $reg_flag = 0; + my $word = (defined $byte2)?1:0; + + if(defined($cmd)) { + $reg_flag = $word? 0x001 : 0x000; + } + else { + $reg_flag = $word? 0x011 : 0x010; + } + + if(defined($byte1)) { + trb_register_write_mem($fpga,0xd681,0,[$reg_flag,$reg_data],2); + } + else { + $reg_flag |= 0x100; + trb_register_write_mem($fpga,0xd681,0,[$reg_flag,$reg_data],2); + usleep(1000); + $reg_return = trb_register_read($fpga,0xd684); + + my $ret; + foreach my $f (keys %$reg_return) { + $ret->{$f} = $reg_return->{$f}&($word?0xffff:0xff); + } + return $ret; + } + } + + -- 2.43.0