Merge pull request #993 from pimoroni/patch-as7343-channels

as7343: Fix channel and status order.
pull/998/head
Philip Howard 2024-09-06 11:10:57 +01:00 zatwierdzone przez GitHub
commit 871399af72
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: B5690EEEBB952194
3 zmienionych plików z 59 dodań i 7 usunięć

Wyświetl plik

@ -30,7 +30,7 @@ namespace pimoroni {
i2c->set_bits(address, reg::FIFO_MAP, 0, FIFO_MAP_CH5 | FIFO_MAP_CH4 | FIFO_MAP_CH3 | FIFO_MAP_CH2 | FIFO_MAP_CH1 | FIFO_MAP_CH0 | FIFO_MAP_ASTATUS);
// Set the PON bit
i2c->reg_write_uint8(address, reg::ENABLE, ENABLE_WEN | ENABLE_SMUXEN | ENABLE_SP_EN | ENABLE_PON);
i2c->reg_write_uint8(address, reg::ENABLE, ENABLE_WEN | ENABLE_SP_EN | ENABLE_PON);
return true;
}
@ -135,10 +135,23 @@ namespace pimoroni {
}
}
void AS7343::start_measurement() {
if(running) return;
i2c->set_bits(address, reg::ENABLE, 0, ENABLE_SMUXEN);
running = true;
}
void AS7343::stop_measurement() {
i2c->set_bits(address, reg::ENABLE, 0, ENABLE_SMUXEN);
running = false;
}
void AS7343::read_fifo(uint16_t *buf) {
uint16_t expected_results = read_cycles * 7;
uint16_t result_slot = 0;
start_measurement();
while (i2c->reg_read_uint8(address, reg::FIFO_LVL) < expected_results) {
sleep_ms(1);
}

Wyświetl plik

@ -49,6 +49,9 @@ namespace pimoroni {
public:
struct reading {
// Cycle 1
uint16_t c1_astatus = 0; // (c1_astatus >> 8) & 0b10001111
// 0b10000000 = saturated
// 0b00001111 = gain lowest nibble
uint16_t FZ = 0; // 428-480 nm
uint16_t FY = 0; // 534-593 nm
uint16_t FXL = 0; // 593-628 nm
@ -56,11 +59,10 @@ namespace pimoroni {
uint16_t c1_vis_tl = 0; // Visible top-left
uint16_t c1_vis_br = 0; // Visible bottom-right
uint16_t c1_astatus = 0; // (c1_astatus >> 8) & 0b10001111
// 0b10000000 = saturated
// 0b00001111 = gain lowest nibble
//uint16_t c1_fd = 0; // This is where flicker detect *would* be
// Cycle 2
uint16_t c2_astatus = 0;
uint16_t F2 = 0; // 408-448 nm
uint16_t F3 = 0; // 448-500 mn
uint16_t F4 = 0; // 500-534 nm
@ -68,17 +70,47 @@ namespace pimoroni {
uint16_t c2_vis_tl = 0;
uint16_t c2_vis_br = 0;
uint16_t c2_astatus = 0;
//uint16_t c2_fd = 0;
// Cycle 3
uint16_t c3_astatus = 0;
uint16_t F1 = 0; // 396-408 nm
uint16_t F5 = 0; // 531-594 nm
uint16_t F7 = 0; // 685-715 nm
uint16_t F8 = 0; // 715-766 nm
uint16_t F5 = 0; // 531-594 nm
uint16_t c3_vis_tl = 0;
uint16_t c3_vis_br = 0;
uint16_t c3_astatus = 0;
//uint16_t c3_fd = 0;
float gain(uint8_t cycle) {
uint8_t status = 0;
switch(cycle) {
case 1:
status = c1_astatus & 0xf;
break;
case 2:
status = c2_astatus & 0xf;
break;
case 3:
status = c3_astatus & 0xf;
break;
}
return status ? 1 << (status - 1) : 0.5f;
}
bool saturated(uint8_t cycle) {
switch(cycle) {
case 1:
return c1_astatus & 0x80;
case 2:
return c2_astatus & 0x80;
case 3:
return c3_astatus & 0x80;
default:
return false;
}
}
};
@ -95,6 +127,8 @@ namespace pimoroni {
uint8_t read_cycles = 1;
uint8_t ch_count = (uint8_t)channel_count::SIX_CHANNEL;
bool running = false;
//--------------------------------------------------
// Constructors/Destructor
@ -120,6 +154,9 @@ namespace pimoroni {
void get_version(uint8_t &auxid, uint8_t &revid, uint8_t &hwid);
void start_measurement();
void stop_measurement();
reading read();
void read_fifo(uint16_t *buf);

Wyświetl plik

@ -62,6 +62,8 @@ int main() {
reading.F8
);
printf("Gain: C1: %fx C2: %fx C3: %fx\n", reading.gain(1), reading.gain(2), reading.gain(3));
sleep_ms(1000);
}