Old school Arduino modem, Bell 103 and ITU V.21 compatible, at 300 baud.
Arabell300 is a software implementation of a 300 baud modem for Arduino platforms. It supports both Bell 103 (300 baud) and ITU V.21 (300 baud) standards, making it compatible with vintage terminal equipment and bulletin board systems (BBS).
- Modem Standards: Bell 103 and ITU V.21 compatibility
- Baud Rate: 300 baud operation
- Hardware: Designed for Arduino microcontrollers (ATmega328P or compatible)
- Protocol Support: Full duplex communication with Hayes-compatible AT command set
- Audio Interface: Audio frequency shift keying (AFSK) modulation/demodulation
- DTMF Support: Dual-tone multi-frequency signaling for dialing
- Configurable Profiles: EEPROM-based configuration storage with multiple profiles
- Flow Control: Hardware (RTS/CTS) and software (XON/XOFF) flow control
- Phone Book: Storage of up to 8 phone numbers in EEPROM
- Call Progress Monitoring: Detection of dial tone, busy signals, and carrier
- Bell 103:
- Originate: 1070 Hz (MARK), 1270 Hz (SPACE)
- Answer: 2025 Hz (MARK), 2225 Hz (SPACE)
- V.21:
- Channel 1: 1180 Hz (MARK), 980 Hz (SPACE)
- Channel 2: 1850 Hz (MARK), 1650 Hz (SPACE)
- Sample Rate: 9600 Hz
- Data Encoding: Asynchronous serial with start/stop bits
- Data Bits: 8 bits
- Implementation: Software-based AFSK modem with digital signal processing
- Arduino board (ATmega328P or compatible)
- Audio input/output circuitry
- Low-pass filter for audio input
- Audio coupling capacitors
- Speaker for monitoring transmitted/received audio
- LED indicators for status (RX, TX, CD, OH, RI)
- Hardware flow control connections (RTS/CTS)
- DTR/DSR control lines
The modem implementation consists of several key components:
- AFSK: Audio Frequency Shift Keying modulation/demodulation and serial decoding
- DTMF: Dual-Tone Multi-Frequency signal generation for dialing
- Wave: Waveform generation and sampling using lookup tables
- FIFO: First-In-First-Out buffer management for serial data
- Config: EEPROM-based configuration profiles and phone number storage
- Hayes: AT command interpreter and response handling
The modem supports a comprehensive set of Hayes-compatible AT commands:
ATA- Answer incoming callATD- Dial phone number (ATDT for tone, ATDP for pulse)ATH- Hook control (on/off line)ATO- Return to data modeATZ- Reset modem
ATB- Select communication protocol (15=V.21, 16=Bell103)ATC- Transmit carrier controlATE- Local command mode echoATF- Local data mode echo (duplex control)ATL- Speaker volume levelATM- Speaker controlATP/T- Pulse/Tone dialing selectionATQ- Quiet mode (result code suppression)ATV- Verbose mode (text vs numeric result codes)ATX- Call progress method (basic/extended result codes)
AT&A- Reverse answering frequenciesAT&C- DCD (Carrier Detect) optionAT&D- DTR (Data Terminal Ready) optionAT&F- Load factory defaultsAT&J- Jack type selection (PWM output pins)AT&K- Flow control selectionAT&L- Line type selection (PSTN/leased line)AT&P- Pulse dialing make/break ratioAT&R- RTS (Request To Send) optionAT&S- DSR (Data Set Ready) optionAT&V- View configuration profilesAT&W- Store configuration profileAT&Y- Load configuration profileAT&Z- Store/Retrieve phone numbers
- S0: Rings to Auto-Answer
- S1: Ring Counter
- S2: Escape Character (default '+')
- S3: Carriage Return Character
- S4: Line Feed Character
- S5: Backspace Character
- S6: Wait Time for Dial Tone
- S7: Wait Time for Carrier
- S8: Pause Time for Dial Delay Modifier
- S9: Carrier Detect Response Time
- S10: Carrier Loss Disconnect Time
- S11: DTMF Tone Duration
- S12: Escape Prompt Delay
- Connect to the modem using a terminal program at 300 baud
- Use Hayes-compatible AT commands for configuration and operation
- Dial numbers using
ATDT<phone_number>for tone dialing - Answer calls with
ATAwhen receiving a RING indication
AT&F # Load factory defaults
ATB16 # Set Bell 103 mode
ATL1 # Set medium speaker volume
ATM3 # Enable speaker for TX and RX
ATDT5551234 # Dial phone number using tone dialing
ATA # Answer incoming call
+++" # Escape to command mode from data mode
ATO # Return to data mode
AT&W0 # Save current configuration to profile 0
AT&Y0 # Load configuration from profile 0
Once connected, the modem operates in full duplex mode at 300 baud. The escape sequence +++ (with proper guard time) can be used to return to command mode.
The firmware includes several debug modes that can be enabled by uncommenting definitions in the source code:
DEBUG: General debugging outputDEBUG_EE: EEPROM contents displayDEBUG_RX_LVL: Receive level monitoringDEBUG_RX: Receive bit decoding visualization
- Open the Arabell300.ino file in the Arduino IDE
- Select the appropriate board (Arduino Uno/Nano recommended)
- Compile and upload to your Arduino
- Connect the audio circuitry to the appropriate pins
This project is released under the GNU General Public License v3.0.
Costin STROIE costinstroie@eridu.eu.org