
Relay
Servacek/tinytus
Tiny C99 library which allows you to use existing audio channels for digital transmission. The project was presented and defended at the national round of the SOČ competition and at the TMR UNIZA competition.

Tiny C99 library which allows you to use existing audio channels for digital transmission. The project was presented and defended at the national round of the SOČ competition and at the TMR UNIZA competition.
Tinnitus is an open-source printed circuit board by Servacek, from the Servacek/tinytus repository on GitHub. It is a 2-layer board with 10 parts on 12 nets, routed with 6 tracks and 0 vias.
It is built around the ATTINY85-20PU. Its parts include 5 resistors, 2 capacitors, 2 diodes and 1 IC. It belongs with the AVR (ATmega, ATtiny) boards of this library.
Small, modular C99 library for transmitting digital data over acoustic channels using FSK modulation. Targets desktop (Windows, Linux), WebAssembly, and embedded platforms.
Since this library is compilable also for the web (using WebAssembly), I have built a small static website which shows it's capabilities. You can check it out here: https://servacek.github.io/audiomodem/
In order to use an radio transceiver for digital communication using this library a special piece of hardware has to be made, which enables the computer to control the PTT circuit of the radio. Here is the schematic of such hardware, I have designed and used during testing with my Allamat 47 handhold CB radios.
Note that the value of the resistor R4 depends on the specific radio type used. Or in case you need flexibility, it can be replaced with a suitable trimmer.
Requirements: clang, llvm-lib (Windows), make. PortAudio and libusb prebuilt libraries are included under libs/.
make run # build and run the main executable
make lib # build as static library -> bin/tinytus/lib/tinytus.lib
make dll # build as DLL -> bin/tinytus.dll
make web # build for WebAssembly (requires emsdk, set EMSDK_PATH in Makefile)Compiler flags can be overridden via dev.config in the repo root (gitignored):
# dev.config
CFLAGS = -O0 -gmake tests # build and run all tests
make test <name> # build and run one test, e.g. make test gfsk
make clean # remove all build artifactsEach test is compiled from tests/test_.c against the full source tree. Output goes directly to stdout/stderr.
Available tests:
make test gfsk - full modulate/demodulate round-trip
make test ber - BER at various SNR levels
make test fsk - basic FSK / Goertzel demodulation
make test hamming - Hamming ECC encode/decode
make test frame - frame packing and unpacking
make test goertzel - Goertzel frequency detection
make test dss - data scrambling
make test sync_detector - sync word detection
make test wav - WAV file I/O
make test tlv - modem profile TLV encode/decode
make test modem_profile - default profile singleton and field checksNew test files dropped into tests/test_*.c are picked up automatically. See tests/helper.h for ok()/fail() helpers, ASSERT macros and section headers.
#include <tinytus.h>
void on_received(const uint8_t *bytes, uint8_t n) {
for (uint8_t i = 0; i < n; i++) putchar(bytes[i]);
putchar('\n');
}
int main(void) {
start_listening(NULL, on_received);
send_payload(NULL, (const uint8_t *)"Hello!", 6);
while (1) {}
stop_listening();
return 0;
}A more complete example is in examples/simplechat.c.
Compile-time knobs are in src/const.h:
SAMPLE_BIT_DEPTH 16 sample depth (8 / 16 / 32)
SQUELCH_THRESHOLD 0.01 minimum signal power to attempt decode
MARKER_DETECTION_THRESHOLD 0.4 marker confidence threshold
LIB_PORTAUDIO_ENABLED 1 set to 0 to drop PortAudio
LIB_LIBUSB_ENABLED 1 set to 0 to drop libusb
LIB_WAV_ENABLED 1 set to 0 to drop the WAV helper| Qty | Value | Footprint | References |
|---|---|---|---|
| 2 | 100nF | Capacitor_THT:C_Disc_D3.0mm_W2.0mm_P2.50mm | C1, C2 |
| 2 | 27R | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R3, R5 |
| 2 | 2K2 | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R2, R4 |
| 2 | 3V3 | Diode_THT:D_DO-41_SOD81_P10.16mm_Horizontal | D1, D2 |
| 1 | 10K | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R1 |
| 1 | ATtiny85-20P | Package_DIP:DIP-8_W7.62mm | U1 |
10 parts, built around the ATTINY85-20PU. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the Servacek/tinytus repository on GitHub, at the commit this page was made from: the board is hardware/usb-adc-dac-converter-switch/tinnitus.kicad_pcb and its schematic hardware/usb-adc-dac-converter-switch/tinnitus.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask Servacek before reusing the design.

Servacek/tinytus
Tiny C99 library which allows you to use existing audio channels for digital transmission. The project was presented and defended at the national round of the SOČ competition and at the TMR UNIZA competition.

Servacek/tinytus
Tiny C99 library which allows you to use existing audio channels for digital transmission. The project was presented and defended at the national round of the SOČ competition and at the TMR UNIZA competition.

bwack/C64-Switchless-Multi-Kernal-27C256-adapter
Kernal switcher for the C64/C64C/C128

plusvic/simplebus2-intercom
General description of the Simplebus2 protocol used by some Comelit's intercoms. Hardware for retransmitting Simplebus2 messages over UART.

osmocom/osmocom-analog
Software Implementation of analog cellular telephony systems like NMT, TACS, IMTS, A/B/C-Netz; mirror of https://gitea.osmocom.org/cellular-infrastructure/osmocom-analog

strickyak/jerboa-attiny85-mod-synth
Modular Synthesizer using an ATtiny85 chip for each module.


Hack-a-Day/Remoticon_KiCad_Blender
support files for the 2020 Remoticon KiCad to Blender > PCB renders workshop
