The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Device::Chip::AS3935 - chip driver for AS3935

SYNOPSIS

   use Device::Chip::AS3935;
   use Future::AsyncAwait;

   my $chip = Device::Chip::AS3935->new;
   await $chip->mount( Device::Chip::Adapter::...->new );

   if( ( await $chip->read_int )->{INT_L} ) {
      printf "Lightning detected %dkm away\n", await $chip->read_distance;
   }

DESCRIPTION

This Device::Chip subclass provides specific communcation to an ams AS3935 lightning detector chip attached to a computer via an I²C adapter.

The reader is presumed to be familiar with the general operation of this chip; the documentation here will not attempt to explain or define chip-specific concepts or features, only the use of this module to access them.

METHODS

The following methods documented in an await expression return Future instances.

reset

   await $chip->reset;

Sends a reset command to initialise the configuration back to defaults.

calibrate_rco

   await $chip->calibrate_rco;

Sends a calibrate command to request the chip perform its internal RC oscillator calibration.

read_config

   $config = await $chip->read_config;

Returns a HASH reference of the contents of configuration registers using fields named from the data sheet.

   AFE_GB       => 0 .. 31
   PWD          => "active" | "powerdown"
   NF_LEV       => 0 .. 7
   WDTH         => 0 .. 15
   CL_STAT      => bool
   MIN_NUM_LIGH => 1 | 5 | 9 | 16
   SREJ         => 0 .. 15
   LCO_FDIV     => 16 | 32 | 64 | 128
   MASK_DIST    => bool
   DISP_LCO     => bool
   DISP_SRCO    => bool
   DISP_TRCO    => bool
   TUN_CAP      => 0 .. 15

Additionally, the following keys are provided calculated from those, as a convenience.

   afe        => "indoor" | "outdoor"
   noisefloor => int (in units of µVrms)

change_config

   await $chip->change_config( %changes );

Writes updates to the configuration registers.

read_calib_status

   $status = await $chip->read_calib_status;

Returns a 4-element HASH reference indicating the calibration status:

   TRCO_CALIB_DONE => bool
   TRCO_CALIB_NOK  => bool
   SRCO_CALIB_DONE => bool
   SRCO_CALIB_NOK  => bool

read_int

   $ints = await $chip->read_int;

Returns a 3-element HASH reference containing the three interrupt flags:

   INT_NH => bool
   INT_D  => bool
   INT_L  => bool

read_distance

   $distance = await $chip->read_distance;

Returns an integer giving the estimated lightning distance, in km, or undef if it is below the detection limit.

AUTHOR

Paul Evans <leonerd@leonerd.org.uk>