rmm1
October 27, 2021, 1:15am
1
MCUs have logic blocks with shift registers for serial such as I2C, SPI, and UART. However, there is no such support for 1-wire. Arduino and others use bit-bang solutions to support 1-wire devices such as DS18B20. This is ok for very simple projects but may be buggy for interesting MCU loads because of disabling interrupts and/or spinlocks.
An Maxim application note says that UART can drive 1-wire. Indeed it does and there is no tinkering with interrupts.
My project is found at GitHub - bobmc-rmm/UartWire: UartWire generates 1-wire signals using UART shift registers. PlatformIO supports various MCUs . The documentation is in the Changelog in plain text marked up for Doxygen which indexes and cross-references everything including a KiCad schematic.
The platformIO.ini has ESP32 and MEGA2560. There is a Bash script for each board with a menu loop to reduce retyping commands.
Questions or suggestions are welcome.
RMM
1 Like
rmm1
November 2, 2021, 5:49pm
2
I added NodeMcu8266 to the platformio.ini so now it is usable for 3 different MCUs. There is an optional menu script to select which MCU is updated.
[env:featheresp32]
platform = espressif32
board = featheresp32
framework = arduino
;; select the Adafruit Feather 32
build_flags =
-D USE_MCU=1
[env:megaatmega2560]
platform = atmelavr
board = megaatmega2560
framework = arduino
;; select the mega2560
build_flags =
-D USE_MCU=2
[env:nodemcuv2]
platform = espressif8266
board = nodemcuv2
framework = arduino
;; select the NodeMcu8266ex
build_flags =
-D USE_MCU=3
#!/bin/bash
BRD=nodemcuv2
BRD=megaatmega2560
BRD=featheresp32
PS3="Select option for ${BRD}..."
select opt in Init Upload Quit; do
case $opt in
Init)
echo "Init..."
pio project init -b ${BRD}
;;
Upload)
echo "Upload..."
pio run -e ${BRD} --target upload
;;
Quit)
echo "Goodbye..."
break;
;;
*)
esac
done