Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Stefan Haun
firmware
Commits
330f8713
Commit
330f8713
authored
Aug 22, 2019
by
schneider
Browse files
Merge branch 'Draradech/firmware-backlight_control'
parents
314c5c01
125fd0f2
Changes
9
Hide whitespace changes
Inline
Side-by-side
epicardium/epicardium.h
View file @
330f8713
...
...
@@ -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 - 100
* :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()`.
...
...
epicardium/modules/display.c
View file @
330f8713
...
...
@@ -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
();
...
...
lib/card10/display.c
View file @
330f8713
...
...
@@ -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
(
20
);
LCD_Init
();
display_screen
=
gfx_screen
(
LCD_framebuffer
());
...
...
lib/gfx/GUI_DEV/DEV_Config.c
View file @
330f8713
/*****************************************************************************
* | File : DEV_Config.c
* | Author : Waveshare team
* | Function : Hardware underlying interface
* | Info :
* Used to shield the underlying layers of each master
* and enhance portability
*----------------
* | This version: V1.0
* | Date : 2018-11-22
* | Info :
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
******************************************************************************/
#include
"DEV_Config.h"
#include
"spi.h"
#define SPI SPI2
//const gpio_cfg_t DEV_CS_PIN = {PORT_0, PIN_8, GPIO_FUNC_OUT, GPIO_PAD_NONE};
//const gpio_cfg_t DEV_BL_PIN = {PORT_0, PIN_8, GPIO_FUNC_OUT, GPIO_PAD_NONE};
static
spi_req_t
req
=
{.
rx_data
=
NULL
,
.
bits
=
8
,
.
width
=
SPI17Y_WIDTH_1
,
.
ssel
=
0
,
.
deass
=
1
,
.
ssel_pol
=
SPI17Y_POL_LOW
,
.
tx_num
=
0
,
.
rx_num
=
0
};
#define SPI_SPEED (15 * 1000 * 1000) // Bit Rate. Display has 15 MHz limit
/********************************************************************************/
void
lcd_write
(
uint8_t
*
data
,
int
size
)
{
sys_cfg_spi_t
spi17y_master_cfg
;
spi17y_master_cfg
.
map
=
MAP_A
;
spi17y_master_cfg
.
ss0
=
Enable
;
spi17y_master_cfg
.
ss1
=
Disable
;
spi17y_master_cfg
.
ss2
=
Disable
;
if
(
SPI_Init
(
SPI2
,
0
,
SPI_SPEED
,
spi17y_master_cfg
)
!=
0
)
{
printf
(
"Error configuring SPI
\n
"
);
while
(
1
)
;
}
req
.
tx_data
=
data
;
req
.
len
=
size
;
SPI_MasterTrans
(
SPI
,
&
req
);
}
/*****************************************************************************
* | File : DEV_Config.c
* | Author : Waveshare team
* | Function : Hardware underlying interface
* | Info :
* Used to shield the underlying layers of each master
* and enhance portability
*----------------
* | This version: V1.0
* | Date : 2018-11-22
* | Info :
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documnetation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
******************************************************************************/
#include
"DEV_Config.h"
#include
"spi.h"
#define SPI SPI2
//const gpio_cfg_t DEV_CS_PIN = {PORT_0, PIN_8, GPIO_FUNC_OUT, GPIO_PAD_NONE};
//const gpio_cfg_t DEV_BL_PIN = {PORT_0, PIN_8, GPIO_FUNC_OUT, GPIO_PAD_NONE};
static
spi_req_t
req
=
{
.
rx_data
=
NULL
,
.
bits
=
8
,
.
width
=
SPI17Y_WIDTH_1
,
.
ssel
=
0
,
.
deass
=
1
,
.
ssel_pol
=
SPI17Y_POL_LOW
,
.
tx_num
=
0
,
.
rx_num
=
0
};
#define SPI_SPEED (15 * 1000 * 1000) // Bit Rate. Display has 15 MHz limit
/********************************************************************************/
void
lcd_write
(
uint8_t
*
data
,
int
size
)
{
sys_cfg_spi_t
spi17y_master_cfg
;
spi17y_master_cfg
.
map
=
MAP_A
;
spi17y_master_cfg
.
ss0
=
Enable
;
spi17y_master_cfg
.
ss1
=
Disable
;
spi17y_master_cfg
.
ss2
=
Disable
;
if
(
SPI_Init
(
SPI2
,
0
,
SPI_SPEED
,
spi17y_master_cfg
)
!=
0
)
{
printf
(
"Error configuring SPI
\n
"
);
while
(
1
)
;
}
req
.
tx_data
=
data
;
req
.
len
=
size
;
SPI_MasterTrans
(
SPI
,
&
req
);
}
// Parameters for PWM output
#define PORT_PWM PORT_0 // port
#define PIN_PWM PIN_28 // pin
#define FREQ 1000 // (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
if
(
_Value
>
100
)
{
_Value
=
100
;
}
unsigned
int
period_ticks
=
PeripheralClock
/
FREQ
;
unsigned
int
duty_ticks
=
period_ticks
*
_Value
/
100
;
TMR_Disable
(
PWM_TIMER
);
if
(
duty_ticks
>
0
)
{
// 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
;
GPIO_Config
(
&
gpio_pwm
);
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
;
TMR_PWMConfig
(
PWM_TIMER
,
&
tmr_pwm
);
TMR_Enable
(
PWM_TIMER
);
}
else
{
gpio_pwm
.
func
=
GPIO_FUNC_OUT
;
gpio_pwm
.
port
=
PORT_PWM
;
gpio_pwm
.
mask
=
PIN_PWM
;
gpio_pwm
.
pad
=
GPIO_PAD_PULL_DOWN
;
GPIO_Config
(
&
gpio_pwm
);
GPIO_OutClr
(
&
gpio_pwm
);
}
}
lib/gfx/GUI_DEV/DEV_Config.h
View file @
330f8713
...
...
@@ -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
lib/gfx/LCD/LCD_Driver.c
View file @
330f8713
...
...
@@ -50,7 +50,7 @@ static void LCD_Reset(void)
function:
Setting backlight
parameter :
value : Range 0~100
0
Duty cycle is value/100
0
value : Range 0~100 Duty cycle is value/100
*******************************************************************************/
void
LCD_SetBacklight
(
UWORD
Value
)
{
...
...
pycardium/modules/py/display.py
View file @
330f8713
...
...
@@ -91,6 +91,16 @@ class Display:
sys_display
.
pixel
(
x
,
y
,
col
)
return
self
def
backlight
(
self
,
brightness
):
"""
Set display backlight brightness
:param brightness: backlight brightness 0 <= brightness <= 100
"""
sys_display
.
backlight
(
brightness
)
return
self
def
line
(
self
,
xs
,
ys
,
xe
,
ye
,
*
,
col
=
None
,
dotted
=
False
,
size
=
1
):
"""
Draws a line on the display.
...
...
pycardium/modules/qstrdefs.h
View file @
330f8713
...
...
@@ -85,6 +85,7 @@ Q(sys_display)
Q
(
display
)
Q
(
print
)
Q
(
pixel
)
Q
(
backlight
)
Q
(
line
)
Q
(
rect
)
Q
(
circ
)
...
...
pycardium/modules/sys_display.c
View file @
330f8713
...
...
@@ -79,6 +79,21 @@ static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(
display_pixel_obj
,
3
,
3
,
mp_display_pixel
);
/* set display backlight brightness */
static
mp_obj_t
mp_display_backlight
(
size_t
n_args
,
const
mp_obj_t
*
args
)
{
uint16_t
brightness
=
mp_obj_get_int
(
args
[
0
]);
int
res
=
epic_disp_backlight
(
brightness
);
if
(
res
<
0
)
{
mp_raise_OSError
(
-
res
);
}
return
mp_const_none
;
}
static
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN
(
display_backlight_obj
,
1
,
1
,
mp_display_backlight
);
/* draw line on the display */
static
mp_obj_t
mp_display_line
(
size_t
n_args
,
const
mp_obj_t
*
args
)
{
...
...
@@ -220,6 +235,7 @@ static const mp_rom_map_elem_t display_module_globals_table[] = {
{
MP_ROM_QSTR
(
MP_QSTR_close
),
MP_ROM_PTR
(
&
display_close_obj
)
},
{
MP_ROM_QSTR
(
MP_QSTR_print
),
MP_ROM_PTR
(
&
display_print_obj
)
},
{
MP_ROM_QSTR
(
MP_QSTR_pixel
),
MP_ROM_PTR
(
&
display_pixel_obj
)
},
{
MP_ROM_QSTR
(
MP_QSTR_backlight
),
MP_ROM_PTR
(
&
display_backlight_obj
)
},
{
MP_ROM_QSTR
(
MP_QSTR_line
),
MP_ROM_PTR
(
&
display_line_obj
)
},
{
MP_ROM_QSTR
(
MP_QSTR_rect
),
MP_ROM_PTR
(
&
display_rect_obj
)
},
{
MP_ROM_QSTR
(
MP_QSTR_circ
),
MP_ROM_PTR
(
&
display_circ_obj
)
},
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment