Skip to content
Snippets Groups Projects
Commit ec6e2d16 authored by Manuel Kasten's avatar Manuel Kasten Committed by schneider
Browse files

control display backlight brightness (epic part)

parent 9f9fd2a9
No related branches found
No related tags found
No related merge requests found
......@@ -53,6 +53,7 @@ typedef _Bool bool;
#define API_DISP_CIRC 0x27
#define API_DISP_PIXEL 0x28
#define API_DISP_FRAMEBUFFER 0x29
#define API_DISP_BACKLIGHT 0x2a
/* API_BATTERY_VOLTAGE 0x30 */
#define API_BATTERY_CURRENT 0x31
......@@ -1333,6 +1334,17 @@ API(API_DISP_CIRC,
API(API_DISP_FRAMEBUFFER, int epic_disp_framebuffer(union disp_framebuffer *fb));
/**
* Set the backlight brightness value
*
* :param brightness: brightness from 0 - 1000
* :return: ``0`` on success or negative value in case of an error:
*
* - ``-EBUSY``: Display was already locked from another task.
*/
API(API_DISP_BACKLIGHT, int epic_disp_backlight(uint16_t brightness));
/**
* Start continuous readout of the light sensor. Will read light level
* at preconfigured interval and make it available via `epic_light_sensor_get()`.
......
......@@ -171,6 +171,17 @@ int epic_disp_framebuffer(union disp_framebuffer *fb)
return 0;
}
int epic_disp_backlight(uint16_t brightness)
{
int cl = check_lock();
if (cl < 0) {
return cl;
}
LCD_SetBacklight(brightness);
return 0;
}
int epic_disp_open()
{
TaskHandle_t task = xTaskGetCurrentTaskHandle();
......
......@@ -4,77 +4,19 @@
#include "textbuffer.h"
#include "gpio.h"
#include "tmr.h"
#include "portexpander.h"
#include "MAX77650-Arduino-Library.h"
#include <stdint.h>
#include <stdio.h>
/***** Globals *****/
const gpio_cfg_t DEV_DC_PIN = { PORT_1, PIN_6, GPIO_FUNC_OUT, GPIO_PAD_NONE };
struct gfx_region display_screen;
struct txt_buffer display_textb;
// Parameters for PWM output
#define PORT_PWM PORT_0 // port
#define PIN_PWM PIN_28 // pin
#define FREQ 200 // (Hz)
//#define DUTY_CYCLE 75 // (%)
#define DUTY_CYCLE 20 // (%)
#define PWM_TIMER MXC_TMR4 // must change PORT_PWM and PIN_PWM if changed
/***** Functions *****/
void PWM_Output(void)
{
// Declare variables
gpio_cfg_t gpio_pwm; // to configure GPIO
tmr_cfg_t tmr; // to congigure timer
tmr_pwm_cfg_t tmr_pwm; // for configure PWM
unsigned int period_ticks = PeripheralClock / FREQ;
unsigned int duty_ticks = period_ticks * DUTY_CYCLE / 100;
// Congfigure GPIO port and pin for PWM
gpio_pwm.func = GPIO_FUNC_ALT4;
gpio_pwm.port = PORT_PWM;
gpio_pwm.mask = PIN_PWM;
gpio_pwm.pad = GPIO_PAD_PULL_DOWN;
if (GPIO_Config(&gpio_pwm) != E_NO_ERROR) {
printf("Failed GPIO_Config for pwm.\n");
}
/*
Steps for configuring a timer for PWM mode:
1. Disable the timer
2. Set the prescale value
3. Configure the timer for PWM mode
4. Set polarity, pwm parameters
5. Enable Timer
*/
TMR_Disable(PWM_TIMER);
TMR_Init(PWM_TIMER, TMR_PRES_1, 0);
tmr.mode = TMR_MODE_PWM;
tmr.cmp_cnt = period_ticks;
tmr.pol = 0;
TMR_Config(PWM_TIMER, &tmr);
tmr_pwm.pol = 1;
tmr_pwm.per_cnt = period_ticks;
tmr_pwm.duty_cnt = duty_ticks;
if (TMR_PWMConfig(PWM_TIMER, &tmr_pwm) != E_NO_ERROR) {
printf("Failed TMR_PWMConfig.\n");
}
TMR_Enable(PWM_TIMER);
printf("PWM started.\n");
}
void display_set_reset_pin(uint8_t state)
{
if (!portexpander_detected()) {
......@@ -95,8 +37,7 @@ void display_init(void)
GPIO_Config(&DEV_DC_PIN);
PWM_Output();
LCD_SetBacklight(500);
LCD_SetBacklight(200);
LCD_Init();
display_screen = gfx_screen(LCD_framebuffer());
......
......@@ -58,3 +58,58 @@ void lcd_write(uint8_t *data, int size)
SPI_MasterTrans(SPI, &req);
}
// Parameters for PWM output
#define PORT_PWM PORT_0 // port
#define PIN_PWM PIN_28 // pin
#define FREQ 200 // (Hz)
#define PWM_TIMER MXC_TMR4 // must change PORT_PWM and PIN_PWM if changed
void DEV_Set_BL(uint16_t _Value)
{
// Declare variables
gpio_cfg_t gpio_pwm; // to configure GPIO
tmr_cfg_t tmr; // to congigure timer
tmr_pwm_cfg_t tmr_pwm; // for configure PWM
unsigned int period_ticks = PeripheralClock / FREQ;
unsigned int duty_ticks = period_ticks * _Value / 1000;
// Congfigure GPIO port and pin for PWM
gpio_pwm.func = GPIO_FUNC_ALT4;
gpio_pwm.port = PORT_PWM;
gpio_pwm.mask = PIN_PWM;
gpio_pwm.pad = GPIO_PAD_PULL_DOWN;
if (GPIO_Config(&gpio_pwm) != E_NO_ERROR) {
printf("Failed GPIO_Config for pwm.\n");
}
/*
Steps for configuring a timer for PWM mode:
1. Disable the timer
2. Set the prescale value
3. Configure the timer for PWM mode
4. Set polarity, pwm parameters
5. Enable Timer
*/
TMR_Disable(PWM_TIMER);
TMR_Init(PWM_TIMER, TMR_PRES_1, 0);
tmr.mode = TMR_MODE_PWM;
tmr.cmp_cnt = period_ticks;
tmr.pol = 0;
TMR_Config(PWM_TIMER, &tmr);
tmr_pwm.pol = 1;
tmr_pwm.per_cnt = period_ticks;
tmr_pwm.duty_cnt = duty_ticks;
if (TMR_PWMConfig(PWM_TIMER, &tmr_pwm) != E_NO_ERROR) {
printf("Failed TMR_PWMConfig.\n");
}
TMR_Enable(PWM_TIMER);
printf("PWM started.\n");
}
......@@ -34,6 +34,7 @@
#include "Debug.h"
#include "spi.h"
#include "tmr.h"
#include "tmr_utils.h"
#include <stdint.h>
#include <stdio.h>
......@@ -72,7 +73,7 @@ void display_set_reset_pin(uint8_t state);
**/
//#define DEV_Set_BL(_Value) DEV_BL_PIN= _Value
#define DEV_Set_BL(_Value)
void DEV_Set_BL(uint16_t _Value);
/*-----------------------------------------------------------------------------*/
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment