classic_phone.txt · Last modified: 2012/09/06 13:49 by herman 

:New phone
This phone should do GSM :-) Lemme check how that's possible.
To get started using it as a Bluetooth headset would be nice.

Cheaper option:

Without bluetooth would help as well, use a cheap microcontroller to decode the pulse dialling and talk serial to the phone to let the phone dial the number. Audio in and out could be handled by pretending to be a headset using the original connector.

Protocol

The correct serial protocol could be 'borrowed' from FMA.
Speed: 9600 bps
From unit1.pas:

procedure TForm1.VoiceCall(number: String);
begin
  if FHaveVoiceDialCommand_Dial then
    TxAndWait('AT*EVD="' + number + '"')
  else
    TxAndWait('ATDT' + number + ';');
end;

From unit1.pas as well:

Log.AddCommunicationMessage('Check for special voice dialing commands (dial) (T68, T610)');
try
  TxAndWait('AT*EVD=?');
  FHaveVoiceDialCommand_Dial := True;
except;
  Log.AddCommunicationMessage('Voice dialing dial command not supported! Will use old style dialing commands', lsWarning);
  FHaveVoiceDialCommand_Dial := False;
end;

From TxAndWait:

ComPort.WriteStr(Data + #13);

For short, one of the below depending on phone model:

ATDT="0612345678"\n

or

AT*EVD="0612345678"\n

Microcontroller

  • Perhaps a ATTiny13 or something?
  • Ok, just found out that that's not a good idea, there is no uart on a ATTiny, I'll settle for a ATmega8 instead.
  • Euh, and not the standard ATmega8 but the ATmega8L
    • 2.7 - 5.5V (ATmega8L)
    • 4.5 - 5.5V (ATmega8)
  • I'm getting enthousiastic about the Atmel microcontrollers, check :)

Connector

Pinout of phone connector and schematic of handsfree set.

Plan 2 (OSX environment)

  1. Install development environment (Used CrossPack)
    • Make blikenlight (done)
  2. Compile phone app in Xcode 4 with Crosspack compiler (done)
  3. Build new USB programmer using Arduino and ArduinoISP (example code comes with Arduino 022).
    • This doesn't work on an Arduino Uno. So I got a Arduino pro mini (cheapest Arduino available) and an FTDI board. I ran into a documented problem with Auto-reset using this setup. On the MegaISP (forerunner to ArduinoISP) page the solution was mentioned: disconnect the DTR pin and you should be fine. Sort-of luckily I had a FTDI board with an indirectly connected DTR pin. So I unplugged my improvised connection and programming worked.
  4. Hardware
    • Took an Sony-Ericsson usb desk stand and removed the phone connector and charge connector from the board.
    • Connected the phone connector to some perfboard and soldered a piece of wire to all the pins. Connected this to a pin-header for easy access.
    • T630 phone pinout

Plan 1.0 (Windows/Linux environment)

  1. Install development environment (WinAVR)
    • Get familiar with it and write some software. (done)
    • Test software in emulator (done)
  2. Write proof of concept for phone application in C. (done)
  3. Design circuit. (hint) (led hint) (isp considerations hint)
    • The output voltage of the phones i'd like to use for power is 3,85V.
    • Circuit idea:
      :phonecircuit.jpg
    • Pin-out of phone rotary dial.
      • Yellow/red → 'tick' switch (normally closed)
      • Blue/green → dial is rotating switch (normally open)
  4. Buy parts.
    • For circuit
    • For programmer (done)
    • Breadboard (done)
    • Connector for power from Phone.
  5. Test some stuff to get familiar with 'live' device and programmer. (done)
  6. Build prototype using atmega8 running on external power.
    • Connect phone to microcontroller and detect dialled number. (done)
    • Enable tx serial on microcontroller. (done)
    • Build prototype connector to phone. (done)
    • Talk to phone. (done)
    • Finalize software and call it a prototype. (done)
  7. Test
  8. Build ver 0.1 using attiny13 (and software uart) and mobile phone power.
    • Build some stuff with this controller. (done, watch out, Winavr will create too large object files with -o0, use -os)
    • Experiment with external interrupts on attiny13. (done!)
    • Experiment with timer interrupts on attiny13. (done, in one go, I get pretty good at reading datasheets :-))
    • Enable tx serial on microcontroller. (done, jay! 2400 baud but working)
      • Used AVR304 as a base, only had to fix a stop-bit bug in it.
    • Connect phone to microcontroller and detect dialled number.
      • This is causing me some trouble, I seem to be misusing the attiny13 or something. Some pins are not functioning as inputs.
    • Build more permanent connector to phone.
    • Join the hardware together.
    • Finalize software.
  9. Profit!

Finally finished version 1 of this beast of a project. Learned a -lot- along the way and am really happy with the result. Started in november 2006, so 5,5 years. (25th june 2012) *happy*

Suggestions for the future:

  • Audio feedback using tones from PWM library. This will let the person dialling know that everything is well.
  • Power saving.
 

Author Herman Kopinga. This work is licensed under a Creative Commons License.
Created with Dokuwiki, layout using XHTML 1.0 and stylesheets, follow changes through rrs.