Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
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
Show 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