Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ruanhaishen
Nodemcu Firmware
Commits
4f55ee4e
Commit
4f55ee4e
authored
Mar 11, 2015
by
devsaurus
Browse files
validate SPI comm interface with ssd1306_128x64_spi
parent
76a49931
Changes
4
Hide whitespace changes
Inline
Side-by-side
app/modules/u8g.c
View file @
4f55ee4e
...
@@ -1046,6 +1046,51 @@ static int lu8g_ssd1306_128x64_i2c( lua_State *L )
...
@@ -1046,6 +1046,51 @@ static int lu8g_ssd1306_128x64_i2c( lua_State *L )
return
1
;
return
1
;
}
}
// Lua: object = u8g.ssd1306_128x64_spi( cs, dc )
static
int
lu8g_ssd1306_128x64_spi
(
lua_State
*
L
)
{
unsigned
cs
=
luaL_checkinteger
(
L
,
1
);
if
(
cs
==
0
)
return
luaL_error
(
L
,
"CS pin required"
);
unsigned
dc
=
luaL_checkinteger
(
L
,
2
);
if
(
dc
==
0
)
return
luaL_error
(
L
,
"D/C pin required"
);
lu8g_userdata_t
*
lud
=
(
lu8g_userdata_t
*
)
lua_newuserdata
(
L
,
sizeof
(
lu8g_userdata_t
)
);
// We don't use the pre-defined device structure for u8g_dev_ssd1306_128x64_i2c here
// Reason: linking the pre-defined structures allocates RAM for the device/comm structure
// *before* the display is constructed (especially the page buffers)
// this consumes heap even when the device is not used at all
#if 1
// build device entry
lud
->
dev
=
(
u8g_dev_t
){
u8g_dev_ssd1306_128x64_fn
,
&
(
lud
->
pb
),
U8G_COM_HW_SPI
};
// populate and allocate page buffer
// constants taken from u8g_dev_ssd1306_128x64.c:
// PAGE_HEIGHT
// | Height
// | | WIDTH
// | | |
lud
->
pb
=
(
u8g_pb_t
){
{
8
,
64
,
0
,
0
,
0
},
128
,
NULL
};
//
if
((
lud
->
pb
.
buf
=
(
void
*
)
c_zalloc
(
lud
->
pb
.
width
))
==
NULL
)
return
luaL_error
(
L
,
"out of memory"
);
// and finally init device using specific interface init function
u8g_InitHWSPI
(
LU8G
,
&
(
lud
->
dev
),
cs
,
dc
,
U8G_PIN_NONE
);
#else
u8g_InitHWSPI
(
LU8G
,
&
u8g_dev_ssd1306_128x64_spi
,
cs
,
dc
,
U8G_PIN_NONE
);
#endif
// set its metatable
luaL_getmetatable
(
L
,
"u8g.display"
);
lua_setmetatable
(
L
,
-
2
);
return
1
;
}
// Module function map
// Module function map
#define MIN_OPT_LEVEL 2
#define MIN_OPT_LEVEL 2
...
@@ -1111,6 +1156,7 @@ static const LUA_REG_TYPE lu8g_display_map[] =
...
@@ -1111,6 +1156,7 @@ static const LUA_REG_TYPE lu8g_display_map[] =
const
LUA_REG_TYPE
lu8g_map
[]
=
const
LUA_REG_TYPE
lu8g_map
[]
=
{
{
{
LSTRKEY
(
"ssd1306_128x64_i2c"
),
LFUNCVAL
(
lu8g_ssd1306_128x64_i2c
)
},
{
LSTRKEY
(
"ssd1306_128x64_i2c"
),
LFUNCVAL
(
lu8g_ssd1306_128x64_i2c
)
},
{
LSTRKEY
(
"ssd1306_128x64_spi"
),
LFUNCVAL
(
lu8g_ssd1306_128x64_spi
)
},
#if LUA_OPTIMIZE_MEMORY > 0
#if LUA_OPTIMIZE_MEMORY > 0
// Register fonts
// Register fonts
...
...
lua_examples/u8g_bitmaps.lua
View file @
4f55ee4e
-- setup I2c and connect display
-- setup I2c and connect display
function
init_i2c_display
()
function
init_i2c_display
()
sda
=
5
-- SDA and SCL can be assigned freely to available GPIOs
scl
=
6
sda
=
5
-- GPIO14
scl
=
6
-- GPIO12
sla
=
0x3c
sla
=
0x3c
i2c
.
setup
(
0
,
sda
,
scl
,
i2c
.
SLOW
)
i2c
.
setup
(
0
,
sda
,
scl
,
i2c
.
SLOW
)
disp
=
u8g
.
ssd1306_128x64_i2c
(
sla
)
disp
=
u8g
.
ssd1306_128x64_i2c
(
sla
)
end
end
-- setup SPI and connect display
function
init_spi_display
()
-- Hardware SPI CLK = GPIO14
-- Hardware SPI MOSI = GPIO13
-- Hardware SPI MISO = GPIO12 (not used)
-- CS and D/C can be assigned freely to available GPIOs
cs
=
8
-- GPIO15, pull-down 10k to GND
dc
=
4
-- GPIO2
spi
.
setup
(
1
,
spi
.
MASTER
,
spi
.
CPOL_LOW
,
spi
.
CPHA_LOW
,
spi
.
DATABITS_8
,
0
)
disp
=
u8g
.
ssd1306_128x64_spi
(
cs
,
dc
)
end
function
xbm_picture
()
function
xbm_picture
()
disp
:
setFont
(
u8g
.
font_6x10
)
disp
:
setFont
(
u8g
.
font_6x10
)
disp
:
drawStr
(
0
,
10
,
"XBM picture"
)
disp
:
drawStr
(
0
,
10
,
"XBM picture"
)
...
@@ -34,9 +49,7 @@ function draw(draw_state)
...
@@ -34,9 +49,7 @@ function draw(draw_state)
end
end
function
bitmap_test
()
function
bitmap_test
(
delay
)
init_i2c_display
()
-- read XBM picture
-- read XBM picture
file
.
open
(
"u8glib_logo.xbm"
,
"r"
)
file
.
open
(
"u8glib_logo.xbm"
,
"r"
)
xbm_data
=
file
.
read
()
xbm_data
=
file
.
read
()
...
@@ -58,10 +71,13 @@ function bitmap_test()
...
@@ -58,10 +71,13 @@ function bitmap_test()
draw
(
draw_state
)
draw
(
draw_state
)
until
disp
:
nextPage
()
==
false
until
disp
:
nextPage
()
==
false
tmr
.
delay
(
delay
)
tmr
.
wdclr
()
tmr
.
wdclr
()
end
end
print
(
"--- Bitmap Test done ---"
)
print
(
"--- Bitmap Test done ---"
)
end
end
bitmap_test
()
--init_i2c_display()
init_spi_display
()
bitmap_test
(
50000
)
lua_examples/u8g_graphics_test.lua
View file @
4f55ee4e
-- setup I2c and connect display
-- setup I2c and connect display
function
init_i2c_display
()
function
init_i2c_display
()
sda
=
5
-- SDA and SCL can be assigned freely to available GPIOs
scl
=
6
sda
=
5
-- GPIO14
scl
=
6
-- GPIO12
sla
=
0x3c
sla
=
0x3c
i2c
.
setup
(
0
,
sda
,
scl
,
i2c
.
SLOW
)
i2c
.
setup
(
0
,
sda
,
scl
,
i2c
.
SLOW
)
disp
=
u8g
.
ssd1306_128x64_i2c
(
sla
)
disp
=
u8g
.
ssd1306_128x64_i2c
(
sla
)
end
end
-- setup SPI and connect display
function
init_spi_display
()
-- Hardware SPI CLK = GPIO14
-- Hardware SPI MOSI = GPIO13
-- Hardware SPI MISO = GPIO12 (not used)
-- CS and D/C can be assigned freely to available GPIOs
cs
=
8
-- GPIO15, pull-down 10k to GND
dc
=
4
-- GPIO2
spi
.
setup
(
1
,
spi
.
MASTER
,
spi
.
CPOL_LOW
,
spi
.
CPHA_LOW
,
spi
.
DATABITS_8
,
0
)
disp
=
u8g
.
ssd1306_128x64_spi
(
cs
,
dc
)
end
-- graphic test components
-- graphic test components
function
prepare
()
function
prepare
()
...
@@ -122,9 +136,7 @@ function draw(draw_state)
...
@@ -122,9 +136,7 @@ function draw(draw_state)
end
end
end
end
function
graphics_test
()
function
graphics_test
(
delay
)
init_i2c_display
()
print
(
"--- Starting Graphics Test ---"
)
print
(
"--- Starting Graphics Test ---"
)
-- cycle through all components
-- cycle through all components
...
@@ -135,6 +147,7 @@ function graphics_test()
...
@@ -135,6 +147,7 @@ function graphics_test()
draw
(
draw_state
)
draw
(
draw_state
)
until
disp
:
nextPage
()
==
false
until
disp
:
nextPage
()
==
false
--print(node.heap())
--print(node.heap())
tmr
.
delay
(
delay
)
-- re-trigger Watchdog!
-- re-trigger Watchdog!
tmr
.
wdclr
()
tmr
.
wdclr
()
end
end
...
@@ -142,4 +155,6 @@ function graphics_test()
...
@@ -142,4 +155,6 @@ function graphics_test()
print
(
"--- Graphics Test done ---"
)
print
(
"--- Graphics Test done ---"
)
end
end
graphics_test
()
--init_i2c_display()
init_spi_display
()
graphics_test
(
50000
)
lua_examples/u8g_rotation.lua
View file @
4f55ee4e
-- setup I2c and connect display
-- setup I2c and connect display
function
init_i2c_display
()
function
init_i2c_display
()
sda
=
5
-- SDA and SCL can be assigned freely to available GPIOs
scl
=
6
sda
=
5
-- GPIO14
scl
=
6
-- GPIO12
sla
=
0x3c
sla
=
0x3c
i2c
.
setup
(
0
,
sda
,
scl
,
i2c
.
SLOW
)
i2c
.
setup
(
0
,
sda
,
scl
,
i2c
.
SLOW
)
disp
=
u8g
.
ssd1306_128x64_i2c
(
sla
)
disp
=
u8g
.
ssd1306_128x64_i2c
(
sla
)
end
end
-- setup SPI and connect display
function
init_spi_display
()
-- Hardware SPI CLK = GPIO14
-- Hardware SPI MOSI = GPIO13
-- Hardware SPI MISO = GPIO12 (not used)
-- CS and D/C can be assigned freely to available GPIOs
cs
=
8
-- GPIO15, pull-down 10k to GND
dc
=
4
-- GPIO2
spi
.
setup
(
1
,
spi
.
MASTER
,
spi
.
CPOL_LOW
,
spi
.
CPHA_LOW
,
spi
.
DATABITS_8
,
0
)
disp
=
u8g
.
ssd1306_128x64_spi
(
cs
,
dc
)
end
-- the draw() routine
-- the draw() routine
function
draw
()
function
draw
()
disp
:
setFont
(
u8g
.
font_6x10
)
disp
:
setFont
(
u8g
.
font_6x10
)
...
@@ -35,13 +50,12 @@ function rotate()
...
@@ -35,13 +50,12 @@ function rotate()
dir
=
dir
+
1
dir
=
dir
+
1
dir
=
bit
.
band
(
dir
,
3
)
dir
=
bit
.
band
(
dir
,
3
)
-- schedule next rotation step in 1000ms
next_rotation
=
tmr
.
now
()
/
1000
+
1000
next_rotation
=
tmr
.
now
()
/
1000
+
1000
end
end
end
end
function
rotation_test
()
function
rotation_test
()
init_i2c_display
()
print
(
"--- Starting Rotation Test ---"
)
print
(
"--- Starting Rotation Test ---"
)
dir
=
0
dir
=
0
next_rotation
=
0
next_rotation
=
0
...
@@ -55,10 +69,13 @@ function rotation_test()
...
@@ -55,10 +69,13 @@ function rotation_test()
draw
(
draw_state
)
draw
(
draw_state
)
until
disp
:
nextPage
()
==
false
until
disp
:
nextPage
()
==
false
tmr
.
delay
(
100000
)
tmr
.
wdclr
()
tmr
.
wdclr
()
end
end
print
(
"--- Rotation Test done ---"
)
print
(
"--- Rotation Test done ---"
)
end
end
--init_i2c_display()
init_spi_display
()
rotation_test
()
rotation_test
()
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a 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