|<--------- 16-bit config register ---------->|
| | |
|---------------------------------------------|
| | |
| | |
|<------Byte 1: Control------>|<-Byte0: Data->|
| | |
|-----------------------------|---------------|
| 15 | 14 13 | 12 11 | 10 9 8 | 7 6 5 4 3 2 1 |
__ _____ _____ ______ _____________
^ ^ ^ ^ ^
| | | | |
START | | UNUSED DATA
CHANNEL |
PIN SELECT
####
15: Start conversation
0 - do nothing
1 - start conversation
14-13: Channel selection
00 - channel 0
01 - channel 1
11 - both channels
12-11: Pin selection
00 - no pin
01 - pin 1
11 - pin 2
10-8: Unused (Don't care bits)
7-0: Data
####
my $data = bit_on(0, 15);
####
say bit_count($data);
say bit_bin($data);
####
16
1000000000000000
####
# setting channel
$data = bit_set($data, 13, 2, 0b11);
# result: 1110000000000000
####
# setting pin
$data = bit_set($data, 11, 2, 0b01);
# result: 1110100000000000
####
# setting data
$data = bit_set($data, 0, 8, 186);
# or: bit_set($data, 0, 8, 0b10111010);
# result: 1110100010111010
####
$data = bit_off($data, 14);
# result: 1010100010111010
####
my $value = bit_get($data, 15, 15);
say bit_bin($value);
# result: 1
####
# data
# (note no LSB param. We're reading from bit 7 through to 0).
# since we readily know the data value in decimal (186), we don't
# need to worry about the binary representation
say bit_get($data, 7);
# result 186
# channel
say bit_bin(bit_get($data, 14, 13));
# result 1
# pin select
say bit_bin(bit_get($data, 12, 11));
# result 1
# ensure the unused bits weren't set
say bit_get($data, 10, 8);
####
# use a binary number directly:
say 0b101; # 5
# format a number into a binary string, and print it
printf("%b\n", 254); # 11111110
# convert a number to a binary string, and assign it
my $bin = sprintf("%b", 127); # 1111111