GY-63_MS5611/libraries/FastShiftOut/README.md

87 lines
3.1 KiB
Markdown
Raw Normal View History

2021-01-29 06:31:58 -05:00
[![Arduino CI](https://github.com/RobTillaart/FastShiftOut/workflows/Arduino%20CI/badge.svg)](https://github.com/marketplace/actions/arduino_ci)
2021-12-17 09:24:28 -05:00
[![Arduino-lint](https://github.com/RobTillaart/FastShiftOut/actions/workflows/arduino-lint.yml/badge.svg)](https://github.com/RobTillaart/FastShiftOut/actions/workflows/arduino-lint.yml)
[![JSON check](https://github.com/RobTillaart/FastShiftOut/actions/workflows/jsoncheck.yml/badge.svg)](https://github.com/RobTillaart/FastShiftOut/actions/workflows/jsoncheck.yml)
2021-01-29 06:31:58 -05:00
[![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/RobTillaart/FastShiftOut/blob/master/LICENSE)
[![GitHub release](https://img.shields.io/github/release/RobTillaart/FastShiftOut.svg?maxAge=3600)](https://github.com/RobTillaart/FastShiftOut/releases)
2020-11-27 05:16:22 -05:00
# FastShiftOut
2022-11-06 14:23:19 -05:00
Arduino library for **AVR** optimized shiftOut - e.g. 74HC595.
2020-11-27 05:16:22 -05:00
2022-11-06 14:23:19 -05:00
Related libraries
- https://github.com/RobTillaart/FastShiftIn
- https://github.com/RobTillaart/FastShiftInOut
- https://github.com/RobTillaart/ShiftInSlow
- https://github.com/RobTillaart/ShiftOutSlow
2020-11-27 05:16:22 -05:00
2021-05-28 07:26:27 -04:00
2020-11-27 05:16:22 -05:00
## Description
FastShiftOut is a class that has optimized code for AVR to shift out data faster
2021-12-17 09:24:28 -05:00
than the normal **shiftOut()** function.
2020-11-27 05:16:22 -05:00
It speeds up the shift using low level ports and masks. These are predetermined
in the constructor of the FastShiftOut object.
If not an **ARDUINO_ARCH_AVR** or **ARDUINO_ARCH_MEGAAVR** the class falls back
to the default shiftOut() implementation.
2021-05-28 07:26:27 -04:00
2020-11-27 05:16:22 -05:00
## Performance
The performance of **write()** is substantially faster than the default Arduino
2021-01-29 06:31:58 -05:00
**shiftOut()**, but not as fast as HW SPI.
2020-11-27 05:16:22 -05:00
Exact how big the performance gain is can be seen with the example sketch.
It does a comparison and shows how the class is to be used.
2022-11-05 07:39:40 -04:00
test 0.2.4 Arduino UNO
| function | time (us) |
|:----------------------|----------:|
| write() | 21.66 |
| writeLSBFIRST() | 22.94 |
| writeMSBFIRST() | 20.30 |
| reference shiftOut() | 89.74 |
2021-05-28 07:26:27 -04:00
2020-11-27 05:16:22 -05:00
## Interface
The interface exists of the following functions:
2021-12-17 09:24:28 -05:00
- **size_t write(const uint8_t data)** send a byte, also the workhorse of the **Print** interface.
- **uint8_t lastWritten()** returns last byte written.
- **bool setBitOrder(uint8_t bitOrder)** set LSBFIRST or MSBFIRST. Returns false for other values.
- **uint8_t getBitOrder(void)** returns LSBFIRST or MSBFIRST.
- **size_t writeLSBFIRST(const uint8_t data);** most optimized.
- **size_t writeMSBFIRST(const uint8_t data);** most optimized.
2020-11-27 05:16:22 -05:00
2021-01-29 06:31:58 -05:00
As a FastShiftOut object implements the Print interface, one can also call
2020-11-27 05:16:22 -05:00
- **FSO.print(any type);** or
2021-01-29 06:31:58 -05:00
- **FSO.println(any type);**
to send e.g. a float with 4 digits over the line, or some text string.
2021-12-17 09:24:28 -05:00
Note: **FSO.print()** returns the number of characters printed, including an optional \\r or \\n.
2020-11-27 05:16:22 -05:00
## Notes
- The optimizations are AVR only for now, other platforms may follow.
- The 74HC595 needs 0.1uF caps and the data and clock lines may need
pull up resistors, especially if wires are exceeding 10 cm (4").
2021-05-28 07:26:27 -04:00
2020-11-27 05:16:22 -05:00
## Operation
See examples
2021-12-17 09:24:28 -05:00
## Future
- performance ESP32
- check optimized ESP32
- add **size_t write(const uint8_t \*buffer, size_t size)**
- example schema