Билайн просит подтвердить паспортные данные: пришло СМС. Что это за СМС от МТС

Удивительную историю рассказал блогер Алексей Надёжин. В 2017 году он оснастил дачные ворота СНТ GSM-реле, позволяющим открывать ворота звонком с телефона. В устройство нужно было поставить сим-карту любого оператора. Реле успешно пережило зиму, но в конце апреля вдруг перестало отвечать на звонки. Оказалось, что баланс сим-карты стал нулевым.

Когда Алексей сделал детализацию, то обнаружил, что его ворота подписались на три платных сервиса МТС, причем, по мнению МТС, они это сделали осознанно, ведь «подключение к данным подпискам не могло произойти без согласия владельца», пишет Gubdaily.

GSM-реле штука простая, - рассказывает Алексей. - Никаких СМС само оно не отправляет, а на любые входящие СМС, если они не содержат правильные команды и пароль, не отвечает. Но в детализации обнаружилось много странного. То, что какой-то Fangym зазывал мои ворота заниматься фитнесом, а какой-то Крокодил ещё что-то пытался впаривать, мы опустим.


В январе на симку приходило множество СМС с коротких номеров 1453, 1307 и 2017. По словам блогера, в этом ничего удивительного нет, удивительно то, что GSM-реле якобы отвечало, отправляя СМС на 1453 и 1307.

Но мы же помним, что оно этого делать не умеет! СМС вроде как туда-сюда бесплатно ходили, но ничего плохого тогда не происходило. В феврале пришло только четыре СМС с номера 1307, причём на последнюю реле якобы ответило. В марте не было ни одной СМС, а в апреле началось…


20 апреля GSM-реле якобы отправило СМС на номера 4741 и 9118 (ранее в детализации эти номера не встречались), потом, 22 апреля, три СМС подряд на номера 4741, 9118 и 1453. А после этого - ап! - и подключение подписки, и тут же списываются первые 3.3898 рубля плюс НДС.


Дальше эти 4 рубля начинают списываться каждый день, но МТС показалось мало, раз абонент не ругается. Через неделю, 2 мая точно так же подключается еще одна подписка и каждый день начинает списываться по 8 рублей.


Но им и этого мало! Ещё через неделю подключается третья подписка за 7 рублей в сутки и списывают уже по 15 рублей в день.


Так и списывали, пока не закончились деньги на счету. «Спасибо» ещё, что счёт в минус не увели.


Когда мужчина увидел всё это безобразие, он решил обратиться в поддержку МТС через чат.

Это, кстати, тоже тот ещё квест. У МТС новый сайт, на котором очень сложно найти какие-либо способы с ними связаться. В разделе «помощь» теперь вообще нет никаких способов связи, а есть они только в разделе «контакты». Загадочная круглая кнопка чата в правом нижнем углу в Firefox вообще не работает (просто не нажимается), а в Chrome требует авторизации в личном кабинете для того, чтобы задать вопрос. Но квест был пройден и состоялся вот такой разговор:

Я: Доброе утро! Эта симка установлена в автоматику ворот. Там подключились какие-то контент-опции и списываются все деньги. Пожалуйста отключите эти опции, запретите возможность подключения их снова и верните все списанные деньги.

МТС: Здравствуйте. Меня зовут Влада. Уточните, пожалуйста, по какому номеру интересует информация?

Я: +7 916 *******Вы разве его не видите? Тогда зачем сайт заставляет логиниться, чтобы оставить сообщение?

МТС: На данном номере установлен тарифный план Супер МТС 122 014. С таким тарифным планом невозможно использовать сим-карту в воротах и прочих устройствах.

Я: Это почему это? Там используются только СМС и входящие звонки.

МТС: Я Вас поняла. Я проверю информацию, это займет некоторое время. Пожалуйста, дождитесь моего ответа, хорошо?

Я: хорошо

МТС: Спасибо.

МТС: Большое спасибо за ожидание. Я проверила информацию по Вашему номеру. Дело в том, что на номере есть подписки Автоновости от МТС-Инфо стоимостью 4 рубля в сутки, Полезные советы от МТС-Инфо - 7 рублей в сутки, Hi-Tech Новости от МТС-Инфо - 4 рубля в сутки.

Подключение к данным подпискам не могло произойти без согласия владельца. Я могу Вам отключить Вам данные подписки.

Я: Прошу отключить эти подписки, предотвратить подписку впредь и вернуть деньги. Ни при каких обстоятельствах владелец (то есть я) не мог подключить эти подписки. Симка стоит в маленькой и глупой железке и вынималась из неё последний раз 14 января. А ещё я вижу в детализации множество отправленных сообщений на короткие номера, которые физически не могли отправляться.


МТС: Я понимаю Вас, ситуация не из приятных. В таком случае я могу составить заявку нашим финансовым специалистам. Они помогут Вам разобраться в этом вопросе. Срок обработки - максимум 30 суток.

Я: Да, составьте пожалуйста. И не забудьте отключить подписки и поставить полный запрет. Кроме того, на всякий случай, подключите пожалуйста контентный счёт, чтобы он всегда был нулевым.

МТС: Я удалила все подписки с номера. Сейчас займусь оформлением Вашего обращения. Пожалуйста, уточните контактный номер по которому можно обратиться или же электронную почту. Чтобы подписки больше не оформлялись, я могу подключить Запрет контента. Данная услуга бесплатна.

Пожалуйста, перед тем, как добавить услугу Запрет контента, ознакомьтесь с номерами, на которые не распространяется запрет. Вы ознакомились и согласны с добавлением услуги?

Я: Мой телефон +7916*******

Да, и запрет контента подключите

МТС: Хорошо. Минуту, пожалуйста.

МТС: Большое спасибо за ожидание. Ваше обращение я зарегистрировала. Номер обращения 1−533 475 243 200. Заявка на добавление услуги зарегистрирована.

Я: Вижу очень странное. Вижу якобы отправленные СМС на короткие номера 4741 и 9118. Всегда подряд. Что это за номера?

МТС: К сожалению, я не могу подсказать, в чем именно была причина подключения.

Я: И сообщите пожалуйста, какие действия должен предпринять абонент для подписки на тот контент, который был?

МТС: Сообщения с данных номеров приходят, чтобы клиент подтвердил факт отписки или подписки на контент.

Я: С каких именно? На два номера 4741 и 9118 есть только исходящие сообщения.

МТС: С номеров 4741 и 9118.

Я: 4741 sms o 9118 sms oo - это исходящие сообщения. Не входящие

МТС: Я уже зарегистрировала заявку по данному вопросу. Её будут рассматривать наши специалисты. По факту рассмотрения они с Вами свяжутся. У Вас остались еще какие-либо вопросы?

Я: Да, я их задал выше. Хотелось бы получить на них ответ. Главный: какие действия должен предпринять абонент для подписки на тот контент, который был?

МТС: Ответ поступит после рассмотрения Вашей заявки нашим специалистам.

Прекрасно, не правда ли? Особенно, полное игнорирование просьбы разделить счета. На следующий день на мой основной номер пришла СМС, что обращение рассмотрено, а вчера на счёт вернули 228 рублей.


На вопрос Алексея, как подписки могли подключиться на симке, вставленной в устройство, которое умеет отправлять СМС только в ответ на СМС с командой и паролем, никто не ответил.

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

Автоматически отправленные смс с устройства абонента МТС – довольно обсуждаемая тема на специализированных форумах. Кто-то винит в этом вирусы, а кто-то непосредственно мобильного оператора. Данный материал расскажет о сообщениях с номеров 1453 и 1307. Вы узнаете что это за опция в МТС, как её отключить и сколько стоят такие SMS?

Что это такое?

СМС с номера 1453 и 1307 – это автоматическая опция от MTS Info, которая распространяется на всех абонентов. По умолчанию, отправленные и принятые сообщения с этих коротких номеров бесплатны, хотя изредка за данную транзакцию снимают деньги с баланса.

Есть быть более конкретным — данная отправка необходима для передачи служебной информации в рамках сервиса «МТС Инфо». Под такой информацией следует понимать динамические обновления для приложения и меню СИМ-карты. Помимо указанных номеров, могут быть представлены и другие — 9125, 9118, 9091, 4674, 111.

Эти сообщения также могут сигнализировать и об активации платных подписок на развлекательный (познавательный) контент от МТС. Они оформляются путём отправки любого текста на короткие номера «1453» и «1307» соответственно, списания за использование происходит ежедневно с момента подключения.

Также пользователям могут и приходить сообщения с тех же номеров, с примерным текстом — «содержимое не поддерживается» или «nullnullnull». Переживать не стоит — это те же системные оповещения.

Способ «подключения» платного контента

При поверхностном изучении ситуации может показаться, что виной «автоматическому» подключению бесполезных материалов служит вирус, попавший на смартфон после посещения сомнительных сайтов.

На самом деле, такой сценарий вполне реален – пользователь просто переходит по рекламному баннеру, кликает на другой с текстом «Ок/Согласен», оформляя списания со своего номера, причём немаленькие.

Но это совершенно не тот случай – постараемся на примере объяснить почему. Судя по развёрнутому рассказу одного из абонентов МТС, подписки по номерам 1453 и 1307 умудрилась самостоятельно оформить его GSM-реле.

Простым языком – человек установил сим-карту оператора MTS для автоматизации дачных ворот. Такой механизм направлен на принятие сообщений со специальными командами, отправлять их, перенаправлять он не умеет. В итоге, судя по выписке со счёта, произошло настоящее чудо – сначала система получала сообщения от различных коротких номеров, в том числе 1453 и 1307, а потом отправила ответные.

Данный шаг активировал платные подписки, стоимость которых варьируется от 4 до 8 рублей в день. Сомневаться в рассказе не приходится – пользователь предоставил скриншоты из выписки по номеру, в которой чётко видны десятки входящих и исходящих сообщений.

Как такое возможно?

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

Что по этому поводу думают операторы МТС?

Ровным счётом – ничего. От прямых вопросов о том, как стала возможна подобная ситуация, если «Подписка может быть оформлена исключительно с согласия владельца номера», интернет-помощники уходят.

По специализированному поиску на официальном сайте мобильного оператора данные короткие номера не пробиваются вовсе, хотя при длительной беседе помощники указывают на открытость подписок, их популярность и тому подобное.

Ссылка на поиск услуг по короткому номеру — moskva.mts.ru/uslugi-po-korotkim-nomeram .

СМС с номера 1453 и 1307 — как отключить?

Если у вас снимаются деньги за передачу этих SMS, то нужно проверить все свои подписки. Для начала – проверим список всех подключённых платных подписок. Для этого: набираем *152*2#. После перенаправления будут доступны следующие действия:

    • Просмотр всего списка доступных платных подписок согласно тарифному плану.
  • Перечень уже подключённых подписок.
  • Отключение выбранных/всех платных услуг.

Если нет возможности, не получается разобраться – звоним напрямую в контактный центр МТС, идём в ближайший офис с паспортом. Объясняем оператору суть проблемы, требуем отключение активных подписок, а также подключения бесплатной услуги «Запрет контента».

Последняя обезопасит вас от подобных ситуаций, запретив подписки даже с вашего согласия. Также можно запросить потраченную на автоматически подключенные услуги сумму обратно на счёт – это можно сделать как по телефону, так и в сервисном центре МТС. Ответ должен прийти в течение 30 дней – прецедентов возврата много, так что стоит попробовать.

Есть вариант проставить запрет на короткие номера 1453 и 1307. Но лучше уточнить данный шаг у оператора.

Заключение

Итак, теперь вы знаете, что СМС с номеров 1453 и 1307 являются вспомогательной опцией сервиса «МТС Инфо», бесплатны и передают лишь внутреннюю информацию. К сожалению, факты снятия денег говорят сами для себя. В любом случае, информация предоставлена лишь для ознакомления и не претендует на истину в последней инстанции.

Данная атака не представляет серьезной опасности, но может стать достаточно сильным раздражающим фактором. Дело в том, что существует возможность отправки анонимного сообщения на атакуемый телефон. Такое сообщение отображается на мобильном устройстве как сообщение без номера отправителя.

Подобной техникой могут воспользоваться спаммеры, ведь это идеальная технология для того, чтобы безнаказанно отправлять на мобильные устройства пользователей любые рекламные сообщения.

Еще одной интересной характеристикой данной атаки является то, что злоумышленнику необязательно знать номер атакуемого. Достаточно лишь, чтобы сотовый телефон, представляющий интерес, находился в охватываемой им зоне. Подобная тактика позволяет осуществлять достаточно хитрые психологические атаки. Ведь вредитель может видеть все, что делает жертва, и при этом посылать сообщения без обратного адреса, которые содержат текст, напрямую имеющий отношение к тому, что происходит с пострадавшим.

Если вы получаете SMS с пустым номером отправителя, то вполне возможно, что злоумышленник находится рядом с вами и не факт, что он знает номер вашего мобильного телефона.

Причины уязвимости, которая делает возможной описанную атаку, скрыты в идеологии Bluetooth. Дело в том, что отправка специального формата визитной карточки через каналы Bluetooth не требует аутентификации, если атакуемое устройство находится в открытом для обнаружения режиме.

Если в визитной карточке заполнить только поле «Имя», то на мобильный телефон придет карточка в виде SMS-сообщения, с текстом, отображающим только содержание поля «Имя». Номера отправителя в SMS не будет. Поле имени может насчитывать до 248 символов, что позволяет создать полноценное сообщение.

ЗАЩИТА ОТ АТАКИ

Защищаться от данной атаки не надо. О ней достаточно просто знать.

И напоследок, хотим рассказать читателям об интересной технической новинке - бинарных часах . Изюминкой этих устройств является оригинальный способ определения времени. В таких часах отсчет времени происходит по количеству горящих светодиодов или их положению на циферблате.

Дополнительные материалы:

  • Желание воспользоваться чем-либо бесплатным часто побуждает людей пренебрегать основными канонами безопасности. Этот факт играет существенную роль в возможности осуществления этой […]
  • В настоящее время мобильные телефоны выполняют не только функции средства связи, но также с успехом функционируют как записные книжки, устройства для доступа в Интернет и полноценные […]
  • Интеграция современных информационных технологий в мобильную связь предоставляет не только широкие возможности пользователям, но и несет в себе серьезную угрозу. Согласившись на […]
  • NFC-телефоны все чаще находят применение в самых различных областях. В столицах стран Европы и в Японии они используются для оплаты поездок на метро. Этот вид сервиса прост и удобен. […]
Оценка 1 Оценка 2 Оценка 3 Оценка 4 Оценка 5

DS1307 - микросхема часов реального времени с интерфейсом I2C(TWI) . Часы / календарь хранят следующую информацию: секунды, минуты, часы, день, дату, месяц и год. Конец месяца автоматически подстраивается для месяцев, в которых менее 31 дня, включая поправку для високосного года. Часы работают в 24-часовом или 12-часовом формате с индикатором AM/PM. DS1307 имеет встроенную схему контроля питания, которая обнаруживает пропадание питания и автоматически переключает схему на питание от батареи.

Vbat - вход батареи для любого стандартного 3 Вольтового литиевого элемента или другого источника энергии. Для нормальной работы напряжение батареи должно поддерживаться между 2.5 и 3.5 В. Уровень, при котором запрещён доступ к часам реального времени и пользовательскому ОЗУ, установлен внутренней схемой равным 1.25 x Vbat. Литиевая батарея ёмкостью 35 mAh или больше достаточна для питания DS1307 в течение более чем 10 лет при отсутствии питания.
SCL (Последовательный Тактовый Вход) - SCL используется, чтобы синхронизировать передачу данных через последовательный интерфейс.
SDA (Вход/Выход Последовательных Данных) - SDA - вход / выход данных для 2-проводного последовательного интерфейса. Это выход с открытым стоком, который требует внешнего притягивающего резистора.
SQW/OUT (Меандр / Выходной Драйвер) - Когда бит SQWE установлен в 1, на выходе SQW/OUT вырабатываются импульсы в форме меандра одной из четырех частот: 1 Гц., 4 кГц., 8 кГц., 32 кГц. Вывод SQW/OUT - с открытым стоком, требует внешнего притягивающего резистора.
X1, X2 - выводы для подключения стандартного кристалла кварца 32.768 кГц. Внутренняя схема генератора рассчитана на работу с кристаллом, имеющим номинальную емкость (CL) 12.5 пФ.
GND – Земля.
VCC – питание 5 вольт.

DS1307 работает как ведомое устройство на последовательной шине. Для доступа к нему надо установить состояние START и передать код идентификации устройства, сопровождаемый адресом регистра. К последующим регистрам можно обращаться последовательно, пока не установлено состояние STOP . Когда VСС падает ниже 1.25 x Vbat, устройство прекращает связь и сбрасывает адресный счетчик. В это время оно не будет реагировать на входные сигналы, чтобы предотвратить запись ошибочной информации. Когда VСС падает ниже Vbat, устройство переключается в режим хранения с низким потреблением. При включении питания устройство переключает питание с батареи на VСС , когда напряжение питания превысит Vbat + 0.2V, и реагирует на входные сигналы, когда VСС станет более 1.25 x Vbat. Когда питание находится в пределах нормы, устройство полностью доступно, и данные могут быть записаны и считаны. Когда к устройству подключена трёхвольтовая батарея и VСС ниже 1.25 x Vbat, чтение и запись запрещены. Однако отсчёт времени при этом работает. Когда VСС падает ниже Vbat, питание ОЗУ и отсчёта времени переключается на внешнюю батарею 3 В.

Информацию о времени и дате получают, считывая соответствующие регистры. Регистры часов показаны в таблице ниже. Время и календарь устанавливаются или инициализируются путём записи байтов в соответствующие регистры. Содержание регистров времени и календаря хранится в двоично-десятичном (BCD) формате, поэтому перед выводом информации на LCD дисплей или семисегментный индикатор необходимо преобразовать двоично-десятичный код в двоичный или ANSII - код.

Бит 7 регистра 0 - это бит остановки хода часов (Clock Halt). Когда этот бит установлен в 1, генератор остановлен. Когда сброшен в ноль, генератор работает, а часы считают время.

DS1307 может работать в 12-часовом или 24-часовом режиме. Бит 6 регистра часов задаёт один из этих режимов. Когда он равен 1, установлен 12-часовой режим. В 12-часовом режиме высокий уровень бита 5 сообщает о послеполуденном времени. В 24-часовом режиме бит 5 - второй бит 10 часов (20-23 часа).

Регистр управления DS1307 предназначен для управления работой вывода SQW/OUT . Бит OUT - управление выходом. Этот бит управляет выходным уровнем на выводе SQW/OUT , когда генерация меандра запрещена. Если SQWE = 0, логический уровень на выводе SQW/OUT равен 1, если OUT = 1, и 0 - если OUT = 0. SQWE - Разрешение меандра. Когда этот бит установлен в 1, разрешается генерация меандра. Частота меандра зависит от значений битов RS0 и RS1. Эти биты управляют частотой меандра, когда его генерация разрешена. В таблице ниже показаны частоты, которые могут быть заданы RS битами.

DS1307 поддерживает двунаправленные 2-проводную шину и протокол передачи данных. Устройство, которое посылает данные на шину, называется передатчиком, а устройство, получающее данные - приемником. Устройство, которое управляет передачей, называется ведущим. Устройства, которые управляются ведущим - ведомые. Шина должна управляться ведущим устройством, которое вырабатывает последовательные такты (SCL), управляет доступом к шине, и генерирует состояния СТАРТ и СТОП. DS1307 работает как ведомое на 2-х проводной шине.

Для работы с DS1307 необходимо организовать функцию чтения из микросхемы и функцию записи.

1. Режим записи в DS1307 . Последовательные данные и такты получены через SDA и SCL. После передачи каждого байта передаётся подтверждающий бит ASK . Состояния START и STOP опознаются как начало и конец последовательной передачи. Распознавание адреса выполняется аппаратно после приема адреса ведомого и бита направления. Байт адреса содержит семибитный адрес DS1307, равный 1101000, сопровождаемым битом направления (R/W), который при записи равен 0. После получения и расшифровки байта адреса DS1307 выдаёт подтверждение ASK на линии SDA. После того, как DS1307 подтверждает адрес ведомого и бит записи, ведущий передает адрес регистра DS1307. Тем самым будет установлен указатель регистра в DS1307. Тогда ведущий начнет передавать байты данных в DS1307, который будет подтверждать каждый полученный байт. По окончании записи ведущий сформирует состояние STOP .

2. Режим чтения из DS1307 . Первый байт принимается и обрабатывается как в режиме ведомого приёмника. Однако в этом режиме бит направления укажет, что направление передачи изменено. Последовательные данные передаются по SDA от DS1307, в то время как последовательные такты - по SCL в DS1307. Состояния START и STOP опознаются как начало и конец последовательной передачи. Байт адреса - первый байт, полученный после того, как ведущим сформировано состояние START . Байт адреса содержит семибитный адрес DS1307, равный 1101000, сопровождаемым битом направления (R/W), который при чтении равен 1. После получения и расшифровки байта адреса DS1307 выдаёт подтверждение ASK на линии SDA. Тогда DS1307 начинает передавать данные, начинающиеся с адреса регистра, на которые указывает указатель регистра. Если указатель регистра не записан перед инициированием режима чтения, то первый адрес, который читается - это последний адрес, оставшийся в указателе регистра. DS1307 должен получить неподтверждение NOASK , чтобы закончить чтение.

Рассмотрим особенности работы с DS1307 на примере простых часов, которые будут показывать часы, минуты и секунды. Данные будут выводиться на LCD дисплей 16х2. Две кнопки "Часы+" и "Минуты+" позволят подвести нужное время. Микроконтроллер Atmega 8 тактируется от внутреннего генератора частотой 1 MHz, поэтому не забудьте поменять фьюзы. Ниже представлена схема подключения.

Управляющая программа включает в себя наборы функций работы с шиной TWI, часами DS1307, LCD дисплеем.

I2CInit - инициализация шины;
I2CStart - передача условия START;
I2CStop - передача условия STOP;
I2CWriteByte - запись данных;
I2CReadByte - чтение данных;
DS1307Read - функция чтения данных из DS1307;
DS1307Write - Функция записи данных в DS1307;
lcd_com - передача команды в LCD;
lcd_data - передача данных в LCD;
lcd_string - функция вывода строки в LCD;
lcd_num_to_str - функция вывода символа типа int;
lcd_init - инициализация LCD.

Ниже представлен код программы:

#include #include // Функция инициализация шины TWI void I2CInit(void) { TWBR = 2; // Настройка частоты шины TWSR = (1 << TWPS1)|(1 << TWPS0); // Предделитель на 64 TWCR |= (1 << TWEN); // Включение модуля TWI } // Функция СТАРТ void I2CStart(void) { TWCR = (1 << TWINT)|(1 << TWEN)|(1 << TWSTA); // Передача условия СТАРТ while(!(TWCR & (1 << TWINT))); // Ожидание установки флага TWINT } // Функция СТОП void I2CStop(void) { TWCR = (1 << TWINT)|(1 << TWEN)|(1 << TWSTO); // Передача условия СТОП while(TWCR & (1 << TWSTO)); // Ожидание завершения передачи условия СТОП } // Функция записи данных по шине uint8_t I2CWriteByte(uint8_t data) { TWDR = data; // Загрузка данных в TWDR TWCR = (1 << TWEN)|(1 << TWINT); // Сброс флага TWINT для начала передачи данных while(!(TWCR & (1 << TWINT))); // Ожидание установки флага TWINT // Проверка статуса // Если адрес DS1307+R и принято "подтверждение"(0x18) // или адрес DS1307+W и принято "подтверждение"(0x40) // или передается байт данных и принято "подтверждение"(0x28) if((TWSR & 0xF8) == 0x18 || (TWSR & 0xF8) == 0x40 || (TWSR & 0xF8) == 0x28) return 1; // OK else return 0; // ОШИБКА } // Функция чтения данных по шине uint8_t I2CReadByte(uint8_t *data,uint8_t ack) { // Возвращаем "подтверждение" после приема if(ack) TWCR |= (1 << TWEA); // Возвращаем "неподтверждение" после приема // Ведомое устройство не получает больше данных // обычно используется для распознования последнего байта else TWCR &= ~(1 << TWEA); // Разрешение приема данных после сброса TWINT TWCR |= (1 << TWINT); while(!(TWCR & (1 << TWINT))); // Ожидание установки флага TWINT // Проверка статуса // Если принят байт данных и возвращается "подтверждение"(0x50) // или принят байт данных и возвращается "ненеподтверждение"(0x58) if((TWSR & 0xF8) == 0x50 || (TWSR & 0xF8) == 0x58) { *data = TWDR; // Читаем данные из TWDR return 1; // OK } else return 0; // ОШИБКА } // Функция чтения данных из DS1307 uint8_t DS1307Read(uint8_t address,uint8_t *data) { uint8_t res; I2CStart(); // СТАРТ res = I2CWriteByte(0b11010000); // адрес DS1307+W if(!res) return 0; // ОШИБКА // Передача адреса необходимого регистра res = I2CWriteByte(address); if(!res) return 0; // ОШИБКА I2CStart(); // Повторный СТАРТ res = I2CWriteByte(0b11010001); // адрес DS1307+R if(!res) return 0; // ОШИБКА // Чтение данных с "неподтверждением" res = I2CReadByte(data,0); if(!res) return 0; // ОШИБКА I2CStop(); // СТОП return 1; // OK } // Функция записи данных в DS1307 uint8_t DS1307Write(uint8_t address,uint8_t data) { uint8_t res; I2CStart(); // СТАРТ res = I2CWriteByte(0b11010000); // адрес DS1307+W if(!res) return 0; // ОШИБКА // Передача адреса необходимого регистра res = I2CWriteByte(address); if(!res) return 0; // ОШИБКА res = I2CWriteByte(data); // Запись данных if(!res) return 0; // ОШИБКА I2CStop(); // СТОП return 1; // OK } // Функции работы с LCD #define RS PD0 #define EN PD2 // Функция передачи команды void lcd_com(unsigned char p) { PORTD &= ~(1 << RS); // RS = 0 (запись команд) PORTD |= (1 << EN); // EN = 1 (начало записи команды в LCD) PORTD &= 0x0F; PORTD |= (p & 0xF0); // старший нибл _delay_us(100); PORTD &= ~(1 << EN); // EN = 0 (конец записи команды в LCD) _delay_us(100); PORTD |= (1 << EN); // EN = 1 (начало записи команды в LCD) PORTD &= 0x0F; PORTD |= (p << 4); // младший нибл _delay_us(100); PORTD &= ~(1 << EN); // EN = 0 (конец записи команды в LCD) _delay_us(100); } // Функция передачи данных void lcd_data(unsigned char p) { PORTD |= (1 << RS)|(1 << EN); // RS = 1 (запись данных), EN - 1 (начало записи команды в LCD) PORTD &= 0x0F; PORTD |= (p & 0xF0); // старший нибл _delay_us(100); PORTD &= ~(1 << EN); // EN = 0 (конец записи команды в LCD) _delay_us(100); PORTD |= (1 << EN); // EN = 1 (начало записи команды в LCD) PORTD &= 0x0F; PORTD |= (p << 4); // младший нибл _delay_us(100); PORTD &= ~(1 << EN); // EN = 0 (конец записи команды в LCD) _delay_us(100); } // Функция вывода строки на LCD void lcd_string(unsigned char command, char *string) { lcd_com(0x0C); lcd_com(command); while(*string != "\0") { lcd_data(*string); string++; } } // Функция вывода переменной void lcd_num_to_str(unsigned int value, unsigned char nDigit) { switch(nDigit) { case 4: lcd_data((value/1000)+"0"); case 3: lcd_data(((value/100)%10)+"0"); case 2: lcd_data(((value/10)%10)+"0"); case 1: lcd_data((value%10)+"0"); } } // Функция инициализации LCD void lcd_init(void) { PORTD = 0x00; DDRD = 0xFF; _delay_ms(50); // Ожидание готовности ЖК-модуля // Конфигурирование четырехразрядного режима PORTD |= (1 << PD5); PORTD &= ~(1 << PD4); // Активизация четырехразрядного режима PORTD |= (1 << EN); PORTD &= ~(1 << EN); _delay_ms(5); lcd_com(0x28); // шина 4 бит, LCD - 2 строки lcd_com(0x08); // полное выключение дисплея lcd_com(0x01); // очистка дисплея _delay_us(100); lcd_com(0x06); // сдвиг курсора вправо lcd_com(0x0C); // включение дисплея, курсор не видим } int main(void) { _delay_ms(100); DDRC = 0x00; PORTC = 0xFF; lcd_init(); // Инициализация LCD I2CInit(); // Инициализация шины I2C lcd_string(0x81, "«acГ Ѕa DS1307"); // Часы на DS1307 lcd_string(0xC4, " : : "); // Запускаем ход часов uint8_t temp; DS1307Read(0x00,&temp); temp &= ~(1 << 7); // обнуляем 7 бит DS1307Write(0x00,temp); while(1) { unsigned char hour, minute, second, temp; // Читаем данные и преобразуем из BCD в двоичную систему DS1307Read(0x00,&temp); // Чтение регистра секунд second = (((temp & 0xF0) >> 4)*10)+(temp & 0x0F); DS1307Read(0x01,&temp); // Чтение регистра минут minute = (((temp & 0xF0) >> 4)*10)+(temp & 0x0F); DS1307Read(0x02,&temp); // Чтение регистра часов hour = (((temp & 0xF0) >> 4)*10)+(temp & 0x0F); lcd_com(0xC4); lcd_num_to_str(hour, 2); // Выводим на экран часы lcd_com(0xC7); lcd_num_to_str(minute, 2); // Выводим на экран минуты lcd_com(0xCA); lcd_num_to_str(second, 2); // Выводим на экран секунды if((PINC & (1 << PC0)) == 0) // Если нажата кнопка { while((PINC & (1 << PC0)) == 0){} // Ждем отпускания кнопки hour++; // Увеличиваем часы на 1 if(hour > 23) hour = 0; // Преобразуем из двоичной системы в BCD и записываем в DS1307 uint8_t temp; temp = ((hour/10) << 4)|(hour%10); DS1307Write(0x02, temp); _delay_ms(100); } if((PINC & (1 << PC1)) == 0) // Если нажата кнопка { while((PINC & (1 << PC1)) == 0){} // Ждем отпускания кнопки minute++; // Увеличиваем минуты на 1 if(minute > 59) minute = 0; // Преобразуем из двоичной системы в BCD и записываем в DS1307 uint8_t temp; temp = ((minute/10) << 4)|(minute%10); DS1307Write(0x01, temp); _delay_ms(100); } } }



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: