From 9df96aae9fb67541dd9f528e9cda05019c3334a8 Mon Sep 17 00:00:00 2001 From: Filip Ayazi Date: Wed, 1 Mar 2023 04:39:08 +0000 Subject: [PATCH] constant current illumination control --- src/modules/illumination/illumination.cpp | 69 +++++++++++++++++++---- src/modules/illumination/illumination.h | 2 + 2 files changed, 60 insertions(+), 11 deletions(-) diff --git a/src/modules/illumination/illumination.cpp b/src/modules/illumination/illumination.cpp index c82a825..231a156 100644 --- a/src/modules/illumination/illumination.cpp +++ b/src/modules/illumination/illumination.cpp @@ -77,17 +77,62 @@ void illumination_setup() register_module(illumination_commands, NULL); } +#ifdef WIRING_CC_LED + +//these functions are useful testing +float multi_read(uint8_t pin, uint16_t reads) +{ + float total = 0; + for(uint16_t i = 0; i= 1.5 us - const uint8_t tup = 25; // 1-75 us - const uint8_t tdown = 230; //180-300us + char * args[1]; + parse_arguments(args, command, 1); + float val = atof(args[0]); - char * args[1]; - parse_arguments(args, command, 1); - float val = atof(args[0]); - free(args[0]); + free(args[0]); + cc_set_value(val); +} + +void cc_set_value(float val) +{ + #ifdef WIRING_CC_LED + if (val<0) + { + cc_test(); + return; + } + + const uint8_t td = 3; // >= 1.5 us + const uint8_t tup = 2; // 1-75 us + const uint8_t tdown = 180; //180-300us + const uint8_t tstart = 110; //100-150us //reset the device digitalWrite(WIRING_CC_LED, LOW); @@ -95,11 +140,11 @@ void cc_set(String command) return; uint8_t setting = val*32; - delayMicroseconds(650); + delayMicroseconds(650); //reset device //start sequence digitalWrite(WIRING_CC_LED, HIGH); - delayMicroseconds(130); + delayMicroseconds(tstart); uint8_t stepd = tup; uint8_t dir = 1; @@ -111,14 +156,16 @@ void cc_set(String command) } //step up + uint8_t steps_done =0; for (uint8_t i=16; i!=setting; i+=dir) { digitalWrite(WIRING_CC_LED, LOW); delayMicroseconds(stepd); digitalWrite(WIRING_CC_LED, HIGH); delayMicroseconds(td); - Serial.println("Stepping CC"); //TODO remove debug print + steps_done++; } + Serial.print(steps_done); #else SERIAL_PORT.println("CC LED not supported"); #endif diff --git a/src/modules/illumination/illumination.h b/src/modules/illumination/illumination.h index b00b9c6..2e4ae70 100644 --- a/src/modules/illumination/illumination.h +++ b/src/modules/illumination/illumination.h @@ -9,6 +9,8 @@ void illumination_pwm(String command); void illumination_pwm_freq(String command); void cc_set(String command); +void cc_set_value(float val); + void illumination_setup(); extern const Command illumination_commands[];