This is a relatively straight forward but comprehensive development system for creating the basis for landline (fixed telephone network) caller id applications such as display of incoming caller number and details, storage of call data, spam call protection etc. from the data transmitted along with each telephone call during the ringing phase.
It supports the main protocols for data transmission (MDMF and SDMF) but not the less used DTMF and other signaling methods like interrupted dial tone etc.
It consists of a reference server based on an ATMega328P with some signal conditioning hardware which demodulates and parses the encoded data, a number of alternative example clients demonstrating different communications methods with the sever (SPI, Serial, I2C) and using different hardware platforms (Windows, ESP32, Raspberry Pi, AVR and Texas Instruments MSP432P401R).
For simple applications, the server can even be used stand-alone without a client part, but then care is required when integrating code with it to avoid resource clashes with the signal processing functions. The sample clients have limited functionality, but enough to demonstrate transfer of call data etc. from the server part. Also referenced is a Java script based application for generating test data (incoming call, message waiting etc.) so the system can be tested independently from a telephone installation (published separately – [*Ref11]).
This solution uses easily available components and does not rely on any telephone specific chips.
Splitting the application over a server part and a client part has a number of advantages, but mainly that the user can develop an application incrementally and including features like call storage, telephone book lookup, special display logic etc. etc. without having to touch the core code for demodulating and parsing the transmitted data and this is a classic "offloading" scenario.
Further, the demodulator is quite an intense activity and can be impacted be other activities e.g. continually scanning a touch screen or a web server checking for client connections etc.
Another advantage this offloading brings is that some of the platforms either have no ADC or one of insufficient performance, so since another supporting chip is required for a solution anyway, so why not use one which is programmable and that includes a strong ADC.
Incidentally, this is one of the few areas where the ATMega328P is a more useful chip than, for example, the ESP8266 due to the performance of its peripheral devices (or maybe just unavailability of sufficient supporting documentation to exploit the full performance of such features).
The project is also interesting in that it is an illustration of the some of the possibilities for interfacing between an AVR Arduino and a variety of different clients using several protocols.
I have published a couple of complete designs in the past for caller ID systems (see appendix [Ref9] and [Ref10]), but these were not really beginners projects. This is different in that it could be tackled by a beginner but using the server in stand alone mode, say with the optional LCD and omitting any of the client options. However, it stops at the point where it delivers decoded data. The user must then write routines for presentation and, if required, transmission, storage and retrieval of the data.
*References refer to the PDF document.
Server part:
Architecture including optional clients:
The attached zip file includes the software for the server part and all optional clients and also includes a sample audio file for testing the demodulator and parser-
The full PDF documentation including schematic is, because of its size, attached to the post #1 in this thread.
CallerID_devkit_software_V1_00.zip (38.1 KB)