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 )
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
#define MIN_OPT_LEVEL 2
...
...
@@ -1111,6 +1156,7 @@ static const LUA_REG_TYPE lu8g_display_map[] =
const
LUA_REG_TYPE
lu8g_map
[]
=
{
{
LSTRKEY
(
"ssd1306_128x64_i2c"
),
LFUNCVAL
(
lu8g_ssd1306_128x64_i2c
)
},
{
LSTRKEY
(
"ssd1306_128x64_spi"
),
LFUNCVAL
(
lu8g_ssd1306_128x64_spi
)
},
#if LUA_OPTIMIZE_MEMORY > 0
// Register fonts
...
...
lua_examples/u8g_bitmaps.lua
View file @
4f55ee4e
-- setup I2c and connect display
function
init_i2c_display
()
sda
=
5
scl
=
6
-- SDA and SCL can be assigned freely to available GPIOs
sda
=
5
-- GPIO14
scl
=
6
-- GPIO12
sla
=
0x3c
i2c
.
setup
(
0
,
sda
,
scl
,
i2c
.
SLOW
)
disp
=
u8g
.
ssd1306_128x64_i2c
(
sla
)
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
()
disp
:
setFont
(
u8g
.
font_6x10
)
disp
:
drawStr
(
0
,
10
,
"XBM picture"
)
...
...
@@ -34,9 +49,7 @@ function draw(draw_state)
end
function
bitmap_test
()
init_i2c_display
()
function
bitmap_test
(
delay
)
-- read XBM picture
file
.
open
(
"u8glib_logo.xbm"
,
"r"
)
xbm_data
=
file
.
read
()
...
...
@@ -58,10 +71,13 @@ function bitmap_test()
draw
(
draw_state
)
until
disp
:
nextPage
()
==
false
tmr
.
delay
(
delay
)
tmr
.
wdclr
()
end
print
(
"--- Bitmap Test done ---"
)
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
function
init_i2c_display
()
sda
=
5
scl
=
6
-- SDA and SCL can be assigned freely to available GPIOs
sda
=
5
-- GPIO14
scl
=
6
-- GPIO12
sla
=
0x3c
i2c
.
setup
(
0
,
sda
,
scl
,
i2c
.
SLOW
)
disp
=
u8g
.
ssd1306_128x64_i2c
(
sla
)
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
function
prepare
()
...
...
@@ -122,9 +136,7 @@ function draw(draw_state)
end
end
function
graphics_test
()
init_i2c_display
()
function
graphics_test
(
delay
)
print
(
"--- Starting Graphics Test ---"
)
-- cycle through all components
...
...
@@ -135,6 +147,7 @@ function graphics_test()
draw
(
draw_state
)
until
disp
:
nextPage
()
==
false
--print(node.heap())
tmr
.
delay
(
delay
)
-- re-trigger Watchdog!
tmr
.
wdclr
()
end
...
...
@@ -142,4 +155,6 @@ function graphics_test()
print
(
"--- Graphics Test done ---"
)
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
function
init_i2c_display
()
sda
=
5
scl
=
6
-- SDA and SCL can be assigned freely to available GPIOs
sda
=
5
-- GPIO14
scl
=
6
-- GPIO12
sla
=
0x3c
i2c
.
setup
(
0
,
sda
,
scl
,
i2c
.
SLOW
)
disp
=
u8g
.
ssd1306_128x64_i2c
(
sla
)
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
function
draw
()
disp
:
setFont
(
u8g
.
font_6x10
)
...
...
@@ -35,13 +50,12 @@ function rotate()
dir
=
dir
+
1
dir
=
bit
.
band
(
dir
,
3
)
-- schedule next rotation step in 1000ms
next_rotation
=
tmr
.
now
()
/
1000
+
1000
end
end
function
rotation_test
()
init_i2c_display
()
print
(
"--- Starting Rotation Test ---"
)
dir
=
0
next_rotation
=
0
...
...
@@ -55,10 +69,13 @@ function rotation_test()
draw
(
draw_state
)
until
disp
:
nextPage
()
==
false
tmr
.
delay
(
100000
)
tmr
.
wdclr
()
end
print
(
"--- Rotation Test done ---"
)
end
--init_i2c_display()
init_spi_display
()
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