decoding caller ID FSK

hello,

long time lurker here, finally decided to make an account.

i was brainstorming on my way home from work how to get my the caller id of my landline to directly display on my computer screen. a few google searches later and i found out that i need to decode the FSK that happens between the first and second ring. I found out that something like:

digchip . com/datasheets/parts/datasheet/140/EM92547A.php

would do the job perfectly, and then it would be just a matter of connecting the arduino to my WAN and sending a network wide bonjour/zeroconf message with the information.

the questions that i come to you with are:

1) how would i interface the arduino with the em92547a? the data sheet specifies a "DATA OUT" pin, but it isn't clear as to what form the data would be in. pardon my ignorance if this is a stupid question, i am but a hobbyist. I assume it's serial data, but which pin (rx or tx) would i connect it to?

2) can you think of a better approach to my goal? it's the only way i can think of.

thanks for any help!

Dylan

1) how would i interface the arduino with the em92547a? the data sheet specifies a "DATA OUT" pin, but it isn't clear as to what form the data would be in. pardon my ignorance if this is a stupid question, i am but a hobbyist. I assume it's serial data, but which pin (rx or tx) would i connect it to?

It's a serial output pin so it would wire to the Arduino rx (pin 0). The voltage level needs to match whatever your Arduino board uses (most use 5vdc, some 3.3vdc) If you power this chip from your Arduino board then they will match voltages. You also need to have a ground wire between the Arduino and this chip. There seems to also be a SHORTDATA output pin that is also the serial data outout minus some preamble message data, so that might be easier on your Arduino software. While it doesn't state it, I'm pretty sure this data will be standard ASCII data characters and the Bell 202 standard is 1200 baud, so that should work fine with the Arduino core routines. You might want or have to wire some of the control signals that this chip outputs to your Arduino digital input pins to actually be able to process the data only when it's valid. The data sheet shows some example hook-ups to micros.

2) can you think of a better approach to my goal? it's the only way i can think of.

Well I don't know if it would apply to where you live, but at a local dollar store about a year ago they had small call-id module for sale for $1 !. If such was available in your area it might be worth a shot to try and hack one, bringing the ground and data out signals to your Arduino?

but it isn't clear as to what form the data would be in.

It's sent in Bell 202 modem form, so the data coming out of the chip will be 1200 baud async serial, which you'd feed into the Arduino's RX pin.

A google search should turn up some other folks' projects, with code examples and links to the format of the caller ID data.

Lefty's idea of searching thrift and dollar stores for units to cannibalize is a good one, but be aware that many of the ones you find will have the functions of that Elan chip integrated into a larger chip with the LCD driver and a CPU. You may have to buy a few to find one suitable for hacking.

Did you get this project going? I'd be interested in trying something similar.

I am also just a hobbyist so please excuse me if I say anything misleading or incorrect. Not long ago I completed an Arduino project in which I used the Arduino to mimic the serial output of one of those decoder chips. My goal (which I achieved), was to use an old Radio Shack caller ID's LCD like a serial LCD module. My caller ID had two circuit boards with a ribbon cable connecting the two. On one board were two phone jacks, capacitors, diodes, resistors, an oscillator, and a decoder (EM92547BP). It also had two leads that ran to the 4 AAA batteries. The other board had the cpu + LCD controller (epoxy covered), the LCD, buttons, etc. In my project, I bypassed the first board and used the Arduino's tx pin to send fabricated caller ID data to the second board for display on the LCD. In theory, if the Arduino can mimic the serial data that is output from one of those chips, it can also receive data from one without difficulty. It seems that the board I bypassed would be nearly ideal for your project. It accepts battery voltages (so 5 volt from the Arduino should do), it has phone jacks, required circuitry, the decoder chip, and it outputs serial data through the ribbon cable when CID signals are received. One of the ribbon cable leads is pulled low when a ring occurs, which might be useful. There is one downside, the ribbon cable only carried the full serial data output (preamble included). If you wanted the SHORTDATA output you would have to solder directly to the chip. Hopefully you will be able to find a caller ID module with the same configuration as mine. If you do, I would imagine that interfacing it with an Arduino would be one of the easier stages of the project. If I am correct, you would simply remove the board from the caller ID, connect Arduino +5 volt to bat+, Arduino GND to bat-, and Arduino RX pin to serial data out. Optionally, you could connect an Arduino pin to the ring indicator output to get a heads up on when to expect serial data. If you needed to use the RX pin for something else, you might make use of the software serial library in combination with the ring indication so you would know when to listen.

EDIT: Oops, I just noticed the age of the first posts. Maybe I shouldn't have spent so much time replying, as the project may have been long forgotten / concluded. Oh well.

No I think you did good to reply. People like me will always stumble on these old posts when looking for something so it is good to find it with answers. Thanks

How would the Bonjour thing work ? I'm assuming you would want to be tapping away at the keyboard on a pc connected to your LAN and if someone rings then a message will pop up on the screen to tell you who. Will this message pop up on any PC that's connected to the LAN at the time?