Подключаем телефон Siemens к контроллеру AVR

Наверняка у многих дома завалялся старый сименс с монохромным экраном. Выкидывать его вроде жалко, но в то же время для звонков его использовать не хочется. Такому телефону можно найти применение, например в GSM сигнализациях или использовать его в качестве GPRS модема ,а так же забивать гвозди и колоть орехи. Под катом пойдет рассказ о подключении такого телефона к микроконтроллеру AVR  и работы с ним. Все что здесь написано справедливо для модели A60 (т.к. проверялось на нём).  Но я думаю что работать будет с большинством телефонов Siemens.

Ыыы!

Во время экспериментов ни один телефон не пострадал :)
Для начала немного теории. Для обмена информацией с внешним миром у телефона существует последовательный интерфейс (читай UART). Чтобы приказать телефону сделать что-то (позвонить, отправить смс итд) нужно отправить ему соответствующую команду по этому интерфейсу. Обмен информацией  может происходить на разных скоростях т.к. у телефона есть автодетект скорости. Я вполне успешно работал на скоростях 9600, 19200, 56000 и 115200.  Команд для управления телефоном ОЧЕНЬ много, но обычно хватает лишь нескольких. Вообще очень удобно изучать эти команды подключив телефон к ком порту компьютера и через терминальную программу экспериментировать. Напрямую к COM порту конечно же подключать нельзя, нужно использовать преобразователь логических уровней. Максимальное напряжение которое можно подать на вход телефона — 3.3 вольта. Об этом следует помнить иначе есть риск спалить телефон. Поэтому юзаем резисторный делитель или резистор и стабилитрон (если это необходимо). К микроконтроллеру я подключал  свой мобильник так

Важно знать что ввод команды должен заканчиваться символом перевода строки! Я убил почти 20 минут  пока понял, что популярная программа Terminal, не добавляет этот символ к введенной команде после нажатия кнопки Send. Поэтому команды лучше писать в самом нижнем текстовом поле, и перевод строки делать вручную. Теперь перейдем непосредственно к командам:

AT — простейшая команда. Не делает абсолютно ничего. Этакий nop. Если телефон исправен и правильно подключен, то после ввода этой команды и нажатия enter аппарат должен ответить OK.
ATD x ; — Заставляет телефон набрать номер x. Если звонок не состоялся (например нет сигнала базовой станции) то телефон отвечает NO DIALTONE.
AT+CPAS — эта команда нужна для того чтобы узнать состояние телефона в определённый момент времени. На эту команду телефон отвечает +CPAS: х где х код состояния. Х может принимать несколько значений: 0 — Телефон в режиме ожидания звонка, 3 — входящий звонок, 4 — идёт разговор. Эта команда полезна когда требуется знать взял ли абонент трубку после того как мы набрал его номер командой ATD.
ATA — принять вызов. После её выполнения телефон «берёт трубку». Если подпаяться к выводам гарнитуры, то вполне можно передавать какую либо аудиоинформацию звонящему. Кстати сам факт звонка легко определить. Телефон во время звонка периодически посылает слово RING.
AT+CHUP — Отклонить вызов. Эквивалент нажатия красной трубки на клавиатуре аппарата.
AT+CLCC — Позволяет узнать номер вызываемого абонента.  Бывает полезно когда нужно принимать звонки только от определённого номера или от группы номеров. Естественно использовать эту команду имеет смысл только после получения RING от телефона.  В противном случае телефон просто ответит ОК и всё.
AT+CBC — запрос уровня заряда батареи телефона. Телефон ответит строкой вида
+CBC: х где х уровень заряда умножив на 100 можно получить эту величину в процентах.

Теперь самое интересное, и пожалуй самое часто используемое — работа с СМС сообщениями. Начнем с отправки. Перед отправкой, смс сообщения должны быть перекодированы в хитрый формат PDU. Сообщение в этом формате уже содержит номер получателя, текст сообщения и немного служебной информации: кодировка, длинна сообщения, номер смс центра итд. Пока я постигал устройство этого формата, я пришел к выводу что он был придуман наркоманами под какой-то необычайно ядрёной травой. Его описывать тут я не буду, так как для перекодировки я написал небольшую программу:

Если кому интересно описание PDU формата — внизу странички есть пара дельных ссылок.  Работа с программой предельно проста: Вводим номер получателя и текст смс, жмем кнопку и получаем готовую смску в нужном нам формате. Размер ограничен 70 символами, но я думаю, что для сигнализации например, этого достаточно.
AT+CMGS=<длинна сообщения в формате PDU>  — команда отправляющая СМС
После отправки этой команды нужно передать символ перевода строки. Телефон ответит символом «>». Теперь можно передавать непосредственно сообщение.  Сообщение должно заканчиваться символом с кодом 0x1A.
Hint: Чтобы ввести этот символ в терминал нужно нажать ctrl+z
AT+CNMI=1,1 — команда включает отображение номера пришедшей СМСки. Это очень удобно т.к. будем знать когда сообщение пришло и плюс его номер для того чтоб прочитать или удалить сообщение. После выполнения этой команды, телефон после получения сообщения будет выдавать строку вида +CMTI: «MT», <номер смски> Этот номер мы будем использовать в следующих двух командах.
AT+CMGR=<номер смски> — выдает смс сообщение с заданным номером. Телефон передаст две строки:
+CMGR: <статус>,,<длинна PDU>
<Сообщение в PDU формате>
Статус может быть двух видов: 0 — непрочитанное сообщение, 1 — прочитанное сообщение.
AT+CMGD=<номер смски> Удаление смски из памяти телефона.

Пишем софт
Софт для управления мобильником ничего хитрого из себя не представляет. Инициализируем UART и передаем через него нужные команды или получаем их от телефона. Я написал демонстрационный пример который отсылает смску при включении контроллера.

И что дальше?
А теперь можно сделать на основе этого мобильника что угодно! Можно сотворить удалённое управление нагрузками по СМС, охрану для гаража, подслушивающее устройство включаемое удалённо да и еще много чего была бы только фантазия.

Ссылки
Демонстрационный пример
Моя прога для создания сообщений в формате PDU
PDUspy — отличная программа для работы с PDU форматом.
АТ команды телефонов сименс S35i,C35i, M35i (основные команды будут работать во всех моделях)
Про PDU формат

Подключаем телефон Siemens к контроллеру AVR: 54 комментария

  1. Молодец, это так мило вспомнить старые времена, когда не было ничего под лапами кроме Сименыча, а он выручал в таких передрягах, что старшно впомнить. Те же охранные ГСМ системы на даче, контроль температуры в квартире.

    1. В моей схеме ошибки распиновки точно нет. У А60 распиновка

      1 — +Uпит
      2 — Gnd
      3 — Tx
      4 — Rx
      5 — CTS
      6 — RTS
      7 — DCD
      8 — Audio Left
      9 — Audio средняя точка (в моно режиме не исп.)
      10 — Audio Right
      11 — земля внешн. микрофона
      12 — сигн. внешн. микрофона

  2. «…Важно знать что ввод команды должен заканчиваться символом перевода строки…» Набираю в Terminal 1b , к примеру, «AT 0x0A», нажимаю кнопку send, и смотрю чтоб в верхнем окне появилась надпись «OK» — но нифига не появляется! Как выглядит символ перевода строки? Есть простейшие способы проверки что телефон законнектился с компом?

    1. Всё просто! Текстовое поле которое на одном уровне с кнопкой SEND отправляет только те байты которые ты в этом поле написал. Чтоб передать символ ввода строки можно щёлкнуть мышкой на поле ввода которое пониже. и просто в нем нажать Enter. А твое 0×0A ему по барабану :-) он в таком виде это и передаст. в виде четырёх байт 0 x 0 A

      Простейший способ проверки — передать команду AT и посмотреть на ответ. Если ответил ОК значит все ОК. Ну или скачай программу SiMoCo. Если она покажет что есть коннект значит связь компа с телефоном есть

    1. У меня нету к сожалению. Могу посоветовать самостоятельно их изучить. Скачиваешь программу для синхронизации телефона с компом. С помощью сниффера ком порта смотришь чё она ему шлет и как он отвечает.

  3. давно увлекаюсь промохантерством…
    с нетерпением жду подсказок как послать 10-20 СМС очередью с номера телефона, потом поменять СИМ карту и повторить много раз…
    или отправить с сайта код после ввода КАПЧА, стэком по 10 штук…

    1. Боюсь что длинная подсказка получится. =)
      Послать кучу смсок вообще не проблема (даже используя мой код) . Сменить симку тоже. Можно попробовать использовать 74HC4066 для этой цели. Еще будет нужно сделать так чтоб телефон включался по команде от контроллера т.к. переключение симки нужно делать на выключеном телефоне.

  4. А у меня не получается принять от телефона ответ, да и команды не все понимает. Тел А62. Передаю ему команду AT>SM1 начинает звонить но в ответ получаю набор непонятных символов, передаю АТ, а от телефона нет ответа. Скорость передачи менял неоднократно, команды вызова понимает на любой скорости от 19200 до 57600, выше не пробовал. А в ответ всегда иероглифы или тишина. Посоветуйте что-нибудь!!!(((

  5. Через max232, который питаю от батареи телефона. Пробовал питать max232 от +5, но тогда телефон вырубается. Потом я поставил на TX стабилитрон на 2,7V, тел перестал выключаться но команды не воспринимает вообще.
    Если делал неправильно не пинайте я в схемотехнике новичок))

    1. MAX232 не может работать на таких низких напряжениях! Точнее она работает, но будут иероглифы как у тебя. Если есть возможность то можешь купить и поставить MAX3232 она работает от 3 до 5 вольт.

      Или можно запитать от пяти вольт и поставить резисторный делитель как у меня на схеме. Со стабилитроном по идее должно было заработать. может накосячил где…

  6. Все получилось, но причина была в моей невнимательности(( Я перепутал RX и ТХ телефона)) Но проверить это мне и в голову не пришло, потому что команду вызова абонента телефон воспринимал, соответственно я думал что все правильно)) Но как и почему он воспринимал, я так и не понял. Кстати от батареи телефона мах232 заработал без проблем. Спасибо за то что ответили!!!

  7. Друзья!расскажите мне хоть кто-нибудь в чем проблема — подключаю к сименсу с45 1контакт- минус у зврядки робной, 3 — плюс у зарятки, 5-к Rx на чипе, 6 к Tx на чипе. МК использую attiny 2313. нашел примеры прошивок МК.заливаю. всё нормально без ошибок заливается, но НИЧЕГО СОВЕРШЕННО НЕ РЕАГИРУЕТ И НЕ РАБОТАЕТ. как мне хоть какой нибудь реакции телефона добиться?

    1. Не забыл ли объединить землю телефона и землю микроконтроллера ?
      От скольки вольт питается контроллер? Если от пяти то нужно ОБЯЗАТЕЛЬНО согласовать логические уровни (как у меня на рисунке). Правильно ли настроены фьюзы у контроллера? Если хочешь добиться хоть какой нибудь реакции то подключи его к компьютеру и попробуй сам ему команды подавать через терминальную программу (хоть через стандартный Hyper Terminal)

  8. землю соединил. всё питается от зарядки на телефон — 5 вольт кажется. а вот по фьюзам, если честно, я не очень разбираюсь. я считал какие были, и теже оставил. какие нужно поменять?

    1. Для начала согласуй логические уровни! нельзя на RX телефона 5 вольт подавать! Он просто это игнорировать будет или вообще сгорит. Проверено. В моей программе фьюзы настроены на тактирование от внешнего кварца на 8 мгц.

  9. а как внешний кварц поставить?я то есть могу указать в МК что бы он работал на 8мГц, а дальше то что внешнее к нему приспосабливать?и как согласовать ллогические уровни?очень буду благодарен за помощь. я просто хочу этому научиться, я чайник в этом. заранее спасибо.

    1. Ты какую программу пытаешься заставить работать? мою? Уровни согласовать при помощи 2-х резисторов как у меня на картинке выше. Кварц к контроллеру подключается так http://avrdevices.ru/wp-content/uploads/2010/05/Kvarc-574×296.jpg Фьюзы надо выставить на на 8 мгц а на тактирование от внешнего кварца.

  10. Спасибо!Вот теперь хоть стал понимать что за кварц внешний и как его ставить! и еще один вопрос — в принципе, этого достаточно, что бы связь между МК и телефоном осуществлялась?

  11. Добрый день! возможно ли соединить siemens c45 с Atmega 2313 с помощью кварца на 11,0592 мГц? на авр подаю 5.5 вольт. на телефон должно приходить,как я понял, максимум 3.3 вольта. тогда какое мне ставить сопротивления для согласования логических уровней?и какие конденсаторы для указанного мною кварца?и еще один вопрос — если фьюзы я выставляю для работы с внешним генератором, то мне больше нигде в прогремма чипа не надо указывать его какое либо еще тактирование, множитель и т.д.? т.е. достаточно поставить фьюз на внешний такт и просто уже писть саму программу? спасибо Вам за помощь.

    1. Да такой кварц подойдет. Только нужно программу перекомпилировать под этот кварц. Делитель можно оставить такой как у меня. не думаю что что-то сгорит. Конденсаторы 22 пф. В программе ничего связанного с тактированием указывать не надо.

      1. устроит ли Вас вариант покупки мною хотя бы за символическую плату элементарной прошивки attiny 2313 для наипростейшей физической реализации (если это возможно то без внешнего кварца) для соединения с сименсом с45 и выполнения элементарных команд? если да, то пишите мне на мыло либо в аську 272735237

  12. Приветствую! Подскажите, есть ли у кого-нибудь исходник на С? Необходимо подружить atmega8 и сименс для отправки смс. А то, я в ассемблере не рулю.

  13. Подключил ME45 к компу через обычный дата кабель(через который раньше шил телефон) и в hyper terminale все работает, тоесть АТ команды отправляю а телефон отвечает.

    Вопрос такой — может мне просто микроконтроллер атмегу168 к этому кабелю тупо подключить и все (RX TX и землю) ???

    1. Обычный дата-кабель юзать нельзя, если только просто отрезать от него всё лишнее и оставить только штеккер и провод. Ну и не забывать про два резистора как на схеме (или питать контроллер от 3.3 вольт, тогда резисторы не нужны вовсе).

      1. ОК.
        А почему нельзя …так в двух словах, если можно…для понимания процессов!

        Просто собираюсь на arduinо делать понять бы для начала хотелось…вчера только этим вопросом занялся.

        1. В двух словах:
          В дата кабеле есть преобразователь интерфейса USB< ->UART.
          У твоего контроллера нет USB, но зато у него есть UART (выводы Rx, Tx) собственно к нему ты и будешь подключать провод идущий в телефон.

              1. Ну вобщем все заработало …шнурок располовинил
                Может кто подскажет как в МК обработать принятое СМС в формате pdu
                Ну тоесть выташить нужные байты и работать с ними.
                Вот тут застряли люди на этом ключевом моменте http://www.compcar.ru/forum/showthread.php?t=8593&page=33

  14. Спасибо Медвед! Классная тема, особенно хорошо разжевано про СМС.
    Прикупил С55, сделал полную прочистку и профилактику, теперь развлекаюсь.
    Для тех, кому лень все изучать можно подсмотреть команды в программе SiMoCo, там есть терминал и монитор команд. Или можно использовать тот же PuTTY в режиме serial. Схема подключения к компу простая, полноценный датакабель не нужен, так же не нужны никакие перемычки на разъеме телефона. Собран на MAX232, с ограничением выхода до 3В, с помощью стабилитрона, использованы только сигналы RxD, TxD и общий провод.

  15. Начав плотно ковыряться с этим делом, подсматривая в SiMoCo столкнулся с такой проблемой: Проинициализированный телефон в SiMoCo потом нормально обрабатывал команды AT+CKPD=XXXX-Xn,Y от МК, а команды эти удаленного управления, т.е. с их помощью можно делать все что угодно. Но стоило перезагрузить телефон и посылки именно этих команд с МК уже не воспринимались. Подключил терминал и попробовал на свежезагруженном телефоне запросить баланс AT+CKPD=#100#S,3, в ответ ERROR. Подключив SiMoCo стал разбираться, что она ему шлет при подключении, а шлет она надо сказать много.
    Нашел! Чтобы работали AT+CKPD= надо в начале послать AT+CMEC=2, теперь телефоном можно продолжать рулить и после его перезагрузки.

  16. Еще про часики, долго я тыркался как их запросить с телефона, оказалось вот так AT+CCLK? Чтобы не городить отдельные часы, например на DS1307 я теперь могу брать из семена дату с часами, по ним и регистрировать событие.

Добавить комментарий