]> jspc29.x-matter.uni-frankfurt.de Git - hades_mdc_settings.git/commitdiff
simple temperature sensor read script
authorJan Michel <michel@physik.uni-frankfurt.de>
Mon, 30 Sep 2024 13:00:08 +0000 (15:00 +0200)
committerJan Michel <michel@physik.uni-frankfurt.de>
Mon, 30 Sep 2024 13:00:08 +0000 (15:00 +0200)
scripts/read_1wire_sensors.pl [new file with mode: 0755]

diff --git a/scripts/read_1wire_sensors.pl b/scripts/read_1wire_sensors.pl
new file mode 100755 (executable)
index 0000000..58c5b9f
--- /dev/null
@@ -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;   
+    }
+  }
+
+