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
a38fbdbf
Commit
a38fbdbf
authored
Nov 01, 2015
by
Vowstar
Browse files
Merge pull request #713 from christakahashi/hx711-support
Added support for the hx711 load cell ADC.
parents
3e0a3e99
dffbfacd
Changes
4
Hide whitespace changes
Inline
Side-by-side
README.md
View file @
a38fbdbf
...
@@ -573,3 +573,13 @@ value = { true, { foo = "bar" } }
...
@@ -573,3 +573,13 @@ value = { true, { foo = "bar" } }
json_text
=
cjson
.
encode
(
value
)
json_text
=
cjson
.
encode
(
value
)
-- Returns: '[true,{"foo":"bar"}]'
-- Returns: '[true,{"foo":"bar"}]'
```
```
####Read an HX711 load cell ADC.
Note: currently only chanel A with gain 128 is supported.
The HX711 is an inexpensive 24bit ADC with programmable 128x, 64x, and 32x gain.
```
lua
-- Initialize the hx711 with clk on pin 5 and data on pin 6
hx711
.
init
(
5
,
6
)
-- Read ch A with 128 gain.
raw_data
=
hx711
.
read
(
0
)
```
app/include/user_modules.h
View file @
a38fbdbf
...
@@ -43,6 +43,7 @@
...
@@ -43,6 +43,7 @@
#define LUA_USE_MODULES_SNTP
#define LUA_USE_MODULES_SNTP
//#define LUA_USE_MODULES_BMP085
//#define LUA_USE_MODULES_BMP085
#define LUA_USE_MODULES_TSL2561
#define LUA_USE_MODULES_TSL2561
//#define LUA_USE_MODULES_HX711
#endif
/* LUA_USE_MODULES */
#endif
/* LUA_USE_MODULES */
...
...
app/modules/hx711.c
0 → 100644
View file @
a38fbdbf
#include "lualib.h"
#include "lauxlib.h"
#include "platform.h"
#include "auxmods.h"
#include "lrotable.h"
#include "c_stdlib.h"
#include "c_string.h"
#include "user_interface.h"
static
uint8_t
data_pin
;
static
uint8_t
clk_pin
;
/*Lua: hx711.init(clk_pin,data_pin)*/
static
int
hx711_init
(
lua_State
*
L
)
{
clk_pin
=
luaL_checkinteger
(
L
,
1
);
data_pin
=
luaL_checkinteger
(
L
,
2
);
MOD_CHECK_ID
(
gpio
,
clk_pin
);
MOD_CHECK_ID
(
gpio
,
data_pin
);
platform_gpio_mode
(
clk_pin
,
PLATFORM_GPIO_OUTPUT
,
PLATFORM_GPIO_FLOAT
);
platform_gpio_mode
(
data_pin
,
PLATFORM_GPIO_INPUT
,
PLATFORM_GPIO_FLOAT
);
platform_gpio_write
(
clk_pin
,
1
);
//put chip to sleep.
return
0
;
}
#define HX711_MAX_WAIT 1000000
/*will only read chA@128gain*/
/*Lua: result = hx711.read()*/
static
int
ICACHE_FLASH_ATTR
hx711_read
(
lua_State
*
L
)
{
uint32_t
i
;
int32_t
data
=
0
;
//TODO: double check init has happened first.
//wakeup hx711
platform_gpio_write
(
clk_pin
,
0
);
//wait for data ready. or time out.
//TODO: set pin inturrupt and come back to it. This may take up to 1/10 sec
// or maybe just make an async version too and have both available.
WRITE_PERI_REG
(
0x60000914
,
0x73
);
//clear WDT... this may take a while.
for
(
i
=
0
;
i
<
HX711_MAX_WAIT
&&
platform_gpio_read
(
data_pin
)
==
1
;
i
++
){
asm
(
"nop"
);
}
//Handle timeout error
if
(
i
>=
HX711_MAX_WAIT
)
{
return
luaL_error
(
L
,
"ADC timeout!"
,
(
unsigned
)
0
);
}
for
(
i
=
0
;
i
<
24
;
i
++
){
//clock in the 24 bits
platform_gpio_write
(
clk_pin
,
1
);
platform_gpio_write
(
clk_pin
,
0
);
data
=
data
<<
1
;
if
(
platform_gpio_read
(
data_pin
)
==
1
)
{
data
=
i
==
0
?
-
1
:
data
|
1
;
//signextend the first bit
}
}
//add 25th clock pulse to prevent protocol error (probably not needed
// since we'll go to sleep immediately after and reset on wakeup.)
platform_gpio_write
(
clk_pin
,
1
);
platform_gpio_write
(
clk_pin
,
0
);
//sleep
platform_gpio_write
(
clk_pin
,
1
);
lua_pushinteger
(
L
,
data
);
return
1
;
}
#define MIN_OPT_LEVEL 2
#include "lrodefs.h"
const
LUA_REG_TYPE
hx711_map
[]
=
{
{
LSTRKEY
(
"init"
),
LFUNCVAL
(
hx711_init
)},
{
LSTRKEY
(
"read"
),
LFUNCVAL
(
hx711_read
)},
{
LNILKEY
,
LNILVAL
}
};
LUALIB_API
int
luaopen_hx711
(
lua_State
*
L
)
{
// TODO: the below todo was inherited from the ws2812 code but is still valid.
// TODO: Make sure that the GPIO system is initialized
LREGISTER
(
L
,
"hx711"
,
hx711_map
);
return
1
;
}
app/modules/modules.h
View file @
a38fbdbf
...
@@ -245,6 +245,14 @@
...
@@ -245,6 +245,14 @@
#define ROM_MODULES_TSL2561
#define ROM_MODULES_TSL2561
#endif
#endif
#if defined(LUA_USE_MODULES_HX711)
#define MODULES_HX711 "hx711"
#define ROM_MODULES_HX711 \
_ROM(MODULES_HX711, luaopen_hx711, hx711_map)
#else
#define ROM_MODULES_HX711
#endif
#define LUA_MODULES_ROM \
#define LUA_MODULES_ROM \
ROM_MODULES_GPIO \
ROM_MODULES_GPIO \
ROM_MODULES_PWM \
ROM_MODULES_PWM \
...
@@ -275,6 +283,7 @@
...
@@ -275,6 +283,7 @@
ROM_MODULES_RTCFIFO \
ROM_MODULES_RTCFIFO \
ROM_MODULES_SNTP \
ROM_MODULES_SNTP \
ROM_MODULES_BMP085 \
ROM_MODULES_BMP085 \
ROM_MODULES_TSL2561
ROM_MODULES_TSL2561 \
ROM_MODULES_HX711
#endif
#endif
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