tdse-tp4_04-led_ldr

FIUBA - Electrónica - Taller de Sistemas Embebidos - Trabajo Práctico N°: 4 - LED & LDR
Index Commits Files Refs README
commit 5d39ed910fee351b50d40f6ac9f742bc68e524c0
parent 2294863e5d3705a08bc4db9acabcd154d381f37b
Author: Martin Kloeckner <mjkloeckner@gmail.com>
Date:   Sat, 25 Oct 2025 19:01:58 -0300

set `ff=unix`

Diffstat:
Mapp/src/task_adc.c | 221++++++++++++++++++++++++++++++++++++++++---------------------------------------
Mapp/src/task_pwm.c | 229+++++++++++++++++++++++++++++++++++++------------------------------------------
2 files changed, 220 insertions(+), 230 deletions(-)
diff --git a/app/src/task_adc.c b/app/src/task_adc.c
@@ -1,108 +1,113 @@
-/*
- * Copyright (c) 2023 Juan Manuel Cruz <jcruz@fi.uba.ar> <jcruz@frba.utn.edu.ar>.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * 3. Neither the name of the copyright holder nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * @file   : task_adc.c
- * @date   : Set 26, 2023
- * @author : Juan Manuel Cruz <jcruz@fi.uba.ar> <jcruz@frba.utn.edu.ar>
- * @version    v1.0.0
- */
-
-/********************** inclusions *******************************************/
-/* Project includes. */
-#include "main.h"
-
-/* Demo includes. */
-#include "logger.h"
-#include "dwt.h"
-
-/* Application & Tasks includes. */
-#include "board.h"
-#include "app.h"
-
-/********************** macros and definitions *******************************/
-
-
-/********************** internal data declaration ****************************/
-
-
-/********************** internal functions declaration ***********************/
-HAL_StatusTypeDef ADC_Poll_Read(uint16_t *value);
-
-/********************** internal data definition *****************************/
-const char *p_task_adc         = "Task ADC";
-
-/********************** external data declaration *****************************/
-
-extern ADC_HandleTypeDef hadc1;
-
-/********************** external functions definition ************************/
-void task_adc_init(void *parameters)
-{
-    shared_data_type *shared_data = (shared_data_type *) parameters;
-
-    /* Print out: Task Initialized */
-    LOGGER_LOG("  %s is running - %s\r\n", GET_NAME(task_adc_init), p_task_adc);
-
-    shared_data->adc_end_of_conversion = false;
-}
-
-void task_adc_update(void *parameters)
-{
-
-    shared_data_type *shared_data = (shared_data_type *) parameters;
-
-    if (HAL_OK==ADC_Poll_Read(&shared_data->adc_value)) {
-        shared_data->adc_end_of_conversion = true;
-    }
-    else {
-        LOGGER_LOG("error\n");
-    }
-}
-
-
-
-//    Requests start of conversion, waits until conversion done
-HAL_StatusTypeDef ADC_Poll_Read(uint16_t *value) {
-    HAL_StatusTypeDef res;
-
-    res=HAL_ADC_Start(&hadc1);
-    if ( HAL_OK==res ) {
-        res=HAL_ADC_PollForConversion(&hadc1, 0);
-        if ( HAL_OK==res ) {
-            *value = HAL_ADC_GetValue(&hadc1);
-        }
-    }
-    return res;
-}
-
-
-
-/********************** end of file ******************************************/
+/*
+ * Copyright (c) 2023 Juan Manuel Cruz <jcruz@fi.uba.ar> <jcruz@frba.utn.edu.ar>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its
+ *    contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @file   : task_adc.c
+ * @date   : Set 26, 2023
+ * @author : Juan Manuel Cruz <jcruz@fi.uba.ar> <jcruz@frba.utn.edu.ar>
+ * @version    v1.0.0
+ */
+
+/********************** inclusions *******************************************/
+/* Project includes. */
+#include "main.h"
+
+/* Demo includes. */
+#include "logger.h"
+#include "dwt.h"
+
+/* Application & Tasks includes. */
+#include "board.h"
+#include "app.h"
+
+/********************** macros and definitions *******************************/
+#define ADC_AVG_SAMPLES 8
+
+/********************** internal data declaration ****************************/
+
+
+/********************** internal functions declaration ***********************/
+HAL_StatusTypeDef ADC_Poll_Read(uint16_t *value);
+
+/********************** internal data definition *****************************/
+const char *p_task_adc = "Task ADC";
+
+/********************** external data declaration *****************************/
+
+extern ADC_HandleTypeDef hadc1;
+
+/********************** external functions definition ************************/
+void task_adc_init(void *parameters)
+{
+    shared_data_type *shared_data = (shared_data_type *) parameters;
+
+    /* Print out: Task Initialized */
+    LOGGER_LOG("  %s is running - %s\r\n", GET_NAME(task_adc_init), p_task_adc);
+
+    shared_data->adc_end_of_conversion = false;
+}
+
+void task_adc_update(void *parameters)
+{
+
+    shared_data_type *shared_data = (shared_data_type *) parameters;
+
+    if (HAL_OK == ADC_Poll_Read(&shared_data->adc_value)) {
+        shared_data->adc_end_of_conversion = true;
+    }
+    else {
+        LOGGER_LOG("error\n");
+    }
+}
+
+
+// Requests start of conversion, waits until conversion done
+HAL_StatusTypeDef ADC_Poll_Read(uint16_t *value) {
+    HAL_StatusTypeDef res;
+    uint32_t sum = 0;
+
+    for (int i = 0; i < ADC_AVG_SAMPLES; i++)
+    {
+        if ((res = HAL_ADC_Start(&hadc1)) != HAL_OK)
+            return res;
+
+        if ((res = HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY)) != HAL_OK)
+            return res;
+
+        sum += HAL_ADC_GetValue(&hadc1);
+        HAL_ADC_Stop(&hadc1);
+    }
+
+    *value = (sum / ADC_AVG_SAMPLES);
+    return HAL_OK;
+}
+
+
+/********************** end of file ******************************************/
diff --git a/app/src/task_pwm.c b/app/src/task_pwm.c
@@ -1,122 +1,107 @@
-/*
- * Copyright (c) 2023 Juan Manuel Cruz <jcruz@fi.uba.ar> <jcruz@frba.utn.edu.ar>.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * 3. Neither the name of the copyright holder nor the names of its
- *    contributors may be used to endorse or promote products derived from
- *    this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
- * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * @file   : task_pwm.c
- * @date   : Set 26, 2023
- * @author : Juan Manuel Cruz <jcruz@fi.uba.ar> <jcruz@frba.utn.edu.ar>
- * @version    v1.0.0
- */
-
-/********************** inclusions *******************************************/
-/* Project includes. */
-#include <stdlib.h>
-#include "main.h"
-
-/* Demo includes. */
-#include "logger.h"
-#include "dwt.h"
-
-/* Application & Tasks includes. */
-#include "board.h"
-#include "app.h"
-
-/********************** macros and definitions *******************************/
-
-#define STEP (2048)
-#define PERIOD (65535)
-
-/********************** internal data declaration ****************************/
-
-/********************** internal functions declaration ***********************/
-void setPWM(TIM_HandleTypeDef timer,
-            uint32_t channel,
-            uint16_t period,
-            uint16_t pulse);
-
-/********************** internal data definition *****************************/
-const char *p_task_pwm         = "Task PWM";
-
-/********************** external data declaration *****************************/
-extern TIM_HandleTypeDef htim3;
-
-
-/********************** external functions definition ************************/
-void task_pwm_init(void *parameters)
-{
-    shared_data_type *shared_data = (shared_data_type *) parameters;
-
-    shared_data->pwm_active = 0;
-    /* Print out: Task Initialized */
-    LOGGER_LOG("  %s is running - %s\r\n", GET_NAME(task_pwm_init), p_task_pwm);
-}
-
-void task_pwm_update(void *parameters)
-{
-
-    static uint16_t period=PERIOD;
-    static int16_t step = STEP;
-
-    shared_data_type *shared_data = (shared_data_type *) parameters;
-
-    if ( shared_data->adc_end_of_conversion ) {
-        shared_data->adc_end_of_conversion = false;
-        setPWM(htim3, TIM_CHANNEL_1, period, shared_data->pwm_active);
-        if ( step>0 ) {
-            if ( period-step<=shared_data->pwm_active ) {
-                step = step * -1;
-            }
-        }
-        else {
-            if ( abs(step)>=shared_data->pwm_active ) {
-                step = step * -1;
-            }
-        }
-        shared_data->pwm_active = shared_data->pwm_active + step;
-    }
-}
-
-
-void setPWM(TIM_HandleTypeDef timer, uint32_t channel,
-            uint16_t period, uint16_t pulse) {
-  HAL_TIM_PWM_Stop(&timer, channel);
-  TIM_OC_InitTypeDef sConfigOC;
-  timer.Init.Period = period;
-  HAL_TIM_PWM_Init(&timer);
-
-  sConfigOC.OCMode = TIM_OCMODE_PWM1;
-  sConfigOC.Pulse = pulse;
-  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
-  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
-  HAL_TIM_PWM_ConfigChannel(&timer, &sConfigOC, channel);
-  HAL_TIM_PWM_Start(&timer,channel);
-}
-
-/********************** end of file ******************************************/
+/*
+ * Copyright (c) 2023 Juan Manuel Cruz <jcruz@fi.uba.ar> <jcruz@frba.utn.edu.ar>.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its
+ *    contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @file   : task_pwm.c
+ * @date   : Set 26, 2023
+ * @author : Juan Manuel Cruz <jcruz@fi.uba.ar> <jcruz@frba.utn.edu.ar>
+ * @version    v1.0.0
+ */
+
+/********************** inclusions *******************************************/
+/* Project includes. */
+#include <stdlib.h>
+#include "main.h"
+
+/* Demo includes. */
+#include "logger.h"
+#include "dwt.h"
+
+/* Application & Tasks includes. */
+#include "board.h"
+#include "app.h"
+
+/********************** macros and definitions *******************************/
+
+#define STEP (2048)
+#define PERIOD (65535)
+
+/********************** internal data declaration ****************************/
+
+/********************** internal functions declaration ***********************/
+void setPWM(TIM_HandleTypeDef timer,
+            uint32_t channel,
+            uint16_t period,
+            uint16_t pulse);
+
+/********************** internal data definition *****************************/
+const char *p_task_pwm         = "Task PWM";
+
+/********************** external data declaration *****************************/
+extern TIM_HandleTypeDef htim3;
+
+
+/********************** external functions definition ************************/
+void task_pwm_init(void *parameters)
+{
+    shared_data_type *shared_data = (shared_data_type *) parameters;
+
+    shared_data->pwm_active = 0;
+    /* Print out: Task Initialized */
+    LOGGER_LOG("  %s is running - %s\r\n", GET_NAME(task_pwm_init), p_task_pwm);
+}
+
+float x_norm;
+void task_pwm_update(void *parameters)
+{
+    shared_data_type *shared_data = (shared_data_type *) parameters;
+
+    x_norm = (shared_data->adc_value/4096.0f);
+    shared_data->pwm_active = x_norm*65535;
+    setPWM(htim3, TIM_CHANNEL_1, PERIOD, shared_data->pwm_active);
+}
+
+
+void setPWM(TIM_HandleTypeDef timer, uint32_t channel,
+            uint16_t period, uint16_t pulse) {
+  HAL_TIM_PWM_Stop(&timer, channel);
+  TIM_OC_InitTypeDef sConfigOC;
+  timer.Init.Period = period;
+  HAL_TIM_PWM_Init(&timer);
+
+  sConfigOC.OCMode = TIM_OCMODE_PWM1;
+  sConfigOC.Pulse = pulse;
+  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
+  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
+  HAL_TIM_PWM_ConfigChannel(&timer, &sConfigOC, channel);
+  HAL_TIM_PWM_Start(&timer,channel);
+}
+
+/********************** end of file ******************************************/