All Projects → ArminJo → ATtinySerialOut

ArminJo / ATtinySerialOut

Licence: GPL-3.0 license
Minimal bit-bang send serial 38400/115200 baud for 1MHz or 115200/230400 baud for 8 or 16MHz ATtiny clock

Programming Languages

C++
36643 projects - #6 most used programming language

Attiny Serial Out

Minimal bit-bang send serial. 115200 baud for 1/8/16 MHz ATtiny clock.

Badge License: GPLv3     Badge Version     Badge Commits since latest     Badge Build Status     Badge Hit Counter

Stand With Ukraine

Available as Arduino library "ATtinySerialOut".

Button Install     Button Changelog


Features

  • Perfect for debugging purposes.
  • Provides Serial.print / println functions for easy software porting.
  • Code size is only 76 bytes@38400 baud or 196 bytes@115200 baud (including first call).
  • Provides additional fast printHex() and printlnHex() functions.
  • Default TX pin is PB2 on a ATtiny85.

Serial functions provided (linefeed is \n instead of \r\n):

    void print(const __FlashStringHelper *aStringPtr);
    void print(const char *aStringPtr);
    void print(char aChar);
    void print(uint8_t aByte, uint8_t aBase = 10);
    void print(int16_t, uint8_t aBase = 10);
    void print(uint16_t aInteger, uint8_t aBase = 10);
    void print(uint32_t aLong, uint8_t aBase = 10);
    void print(uint32_t aLong, uint8_t aBase = 10);
    void print(double aFloat, uint8_t aDigits = 2);

    void printHex(uint8_t aByte); // with 0x prefix

    void println(const __FlashStringHelper *aStringPtr);
    void println(char aChar);
    void println(uint8_t aByte, uint8_t aBase = 10);
    void println(int16_t aInteger, uint8_t aBase = 10);
    void println(uint16_t aInteger, uint8_t aBase = 10);
    void println(int32_t aLong, uint8_t aBase = 10);
    void println(uint32_t aLong, uint8_t aBase = 10);
    void println(double aFloat, uint8_t aDigits = 2);

    void println(void);

Using the new *.hpp files

In order to support compile options more easily, the line #include <ATtinySerialOut.h> must be changed to #include <ATtinySerialOut.hpp> in your main program (aka *.ino file with setup() and loop()).

In all other files you must use #include <ATtinySerialOut.h>, to prevent multiple definitions linker errors:

If you forget to include ATtinySerialOut.hpp, you will see errors like ATtinySerialOutExample.cpp:38: undefined reference to initTXPin()`.


Compile options / macros for this library

To customize the library to different requirements, there are some compile options / macros available.
These macros must be defined in your program before the line #include <TinySerialOut.hpp> to take effect.
Modify them by enabling / disabling them, or change the values if applicable.

Name Default value Description
TX_PIN PB2 (PA1 for ATtiny87/167) The pin to use for transmitting bit bang serial.
USE_PORTB_FOR_TX_PIN disabled If defined, port B is used for TX pin for ATtiny87/167.
TINY_SERIAL_DO_NOT_USE_115200BAUD disabled To force using other baud rates. The rates are 38400 baud at 1 MHz (which has smaller code size) or 230400 baud at 8/16 MHz.
TINY_SERIAL_INHERIT_FROM_PRINT disabled If defined, you can use this class as a replacement for standard Serial as a print class e.g. for functions like void prinInfo(Print *aSerial). Increases program size.

OpenWindowAlarm example

This example issues an alarm if the chip sensor detect a falling teperarure and is fully documented here


Troubleshooting

Error call of overloaded 'println(fstr_t*)' is ambiguous.

Please use the new Digistump core. Since version 1.2.0, the library is no longer compatible with the old cores supplied by digistump.


Revision History

Version 2.1.1

  • Adjusted macro for MH-ET LIVE Core.

Version 2.1.0

  • Added compile guard.
  • Added USE_PORTB_FOR_TX_PIN to allow TX pin on port B for ATtiny87/167.
  • Improved #if guard for instance naming.

Version 2.0.0 - 09/2021

  • Renamed ATtinySerialOut.cpp to ATtinySerialOut.hpp => TX pin can be defined in main program.
  • Added symbol TINY_SERIAL_INHERIT_FROM_PRINT - if defined, you can use this class as a replacement for standard Serial as a print class.

Version 1.2.2 - 03/2021

  • Cloned ATtinySerialOut.cpp as ATtinySerialOut.hpp for direct include.
  • Added ATtiny88 support.

Version 1.2.1 - 10/2020

  • Added ATtinyX4 support.

Version 1.2.0 - 7/2020

  • Removed workaround #define __FlashStringHelper fstr_t for old Digispark core < 1.6.8 in order to work with core >= 1.7.0.
  • Added ATtiny167 support.
  • Moved functions from h to cpp file.

Version 1.1.0 - 5/2020

  • Removed symbol TINY_SERIAL_INHERIT_FROM_PRINT and replaced by macro #define Print TinySerialOut
  • Changed int to int16_t and long to int32_t.
  • Use utoa() and ultoa() for uint16_t and uint32_t.

Version 1.0.5 - 3/2020

  • Added function writeCRLF()

Version 1.0.4 - 1/2020

  • Symbol TINY_SERIAL_INHERIT_FROM_PRINT - if defined, you can use this class as a replacement for standard Serial as a print class.
  • Improved all ...Hex() functions.
  • Define FlashStringHelper for digispark.
  • Changed label loop to txloop in write1Start8Data1StopNoParity() for 38400 baud.

Version 1.0.3

  • OpenWindowAlarm example updated.

Version 1.0.2

  • printHex() now using capital letters.
  • Improved OpenWindowAlarm example.

Version 1.0.1

  • Renamed example to be consistent.

Version 1.0.0

Initial Arduino library version.

Remark

C version of serial code is included for better understanding, but assembler version is used. This is because for the C code the timing depends on compiler optimisation switches. You should get the right timing if you compile the C code it with Arduino standard settings or:

avr-g++ -I"C:\arduino\hardware\arduino\avr\cores\arduino" -I"C:\arduino\hardware\arduino\avr\variants\standard" -c -g -w -Os -ffunction-sections -fdata-sections -mmcu=attiny85 -DF_CPU=1000000UL -MMD -o "TinySerialOut.o" "TinySerialOut.cpp"

If you find this library useful, please give it a star.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].