Преобразователь интерфейса I2С UART на основе микроконтроллера UPD78F9222 компании NEC

№ 10’2006
PDF версия
2C в UART. В качестве преобразователя будет использоваться недорогой микроконтроллер фирмы NEC — µPD78F9222, принадлежащий к семейству 78K0S/KA1+.

Нередко возникает необходимость в различных преобразователях интерфейсов. В данной статье хотелось бы рассмотреть реализацию преобразователя последовательного интерфейса I
2C в UART. В качестве преобразователя будет использоваться недорогой микроконтроллер фирмы NEC — µPD78F9222, принадлежащий к семейству 78K0S/KA1+ [1]. Микроконтроллер имеет Flash объемом 4 кбайт, 2 кбайт ОЗУ, встроенный интерфейс UART, программируемый супервизор питания, встроенный узел сброса, 8- и 16-разрядные таймеры, встроенные тактовые генераторы: один для ядра, другой для сторожевого таймера, систему прерываний и прочее. Весьма привлекательна и малая стоимость устройства. Однако интерфейс I
2C необходимо эмулировать программно.

При работе с шиной I
2C микроконтроллер (МК)будет выступать в роли «ведущего» (I
2C-Master). В качестве «ведомого» (I
2C-Slave) рассматривается цифровой датчик ADT75 фирмы Analog Devices. Это 12-разрядный датчик температуры с рабочим диапазоном температур от –55 до +125 °С, погрешностью измерения ±2 °С и интерфейсом I
2C. Одновременно к шине I
2C может быть подключено до 8 подобных датчиков (всего в сети I
2C допускается до 128 устройств).

Для создания прототипа преобразователя использовался демонстрационный набор от NEC «Low Pin Count — Do it!» [2] с установленным микроконтроллером uPD78F9222 (рис. 1). Демонстрационная плата подключается к компьютеру через USB-интерфейс, при этом на хост-компьютере создается виртуальный COM-порт, через который происходит как программирование МК, так и обмен данными между МК и хост-компьютером.

Рис. 1. Набор «Low Pin Count — Do it!»
Рис. 1. Набор «Low Pin Count — Do it!»

В состав набора входит несколько демонстрационных программ, позволяющих ближе познакомиться с МК данного семейства. Программирование МК осуществляется при помощи входящей в состав комплекта утилиты. Среди представленных демонстрационных программ есть ADC Demo, на ее примере обеспечивается интерактивное управление оценочным комплектом через гипертерминал персонального компьютера. Эта программа была взята за основу программной эмуляции интерфейса I
2C-UART. Рассмотрим подробно варианты решения данной задачи.

Рис. 2. Схема соединений
Рис. 2. Схема соединений

На рис. 2 приведена схема подключения датчика к плате оценочного комплекта. Контактные площадки 34 и 36 макетного поля CN3 подключены к выводам 17 и 18 микроконтроллера IC3 и являются портами P22 и P21 соответственно. Порт P22 отвечает за сигнал SDA, а P21 — за SCL шины I2C. Временная диаграмма обмена данными через интерфейс I2C изображена на рис. 3.

Рис. 3. Временная диаграмма обмена данными интерфейса I2C
Рис. 3. Временная диаграмма обмена данными интерфейса I2C

Для обеспечения работы интерфейса I2C необходимы следующие процедуры:

  • Процедуры нижнего уровня:
    • iic_init() — инициализация портов;
    • iic_SCL_0() — сброс SCL в «0»;
    • iic_SCL_1() — установка SCL в «1»;
    • iic_istart() — формирование сигнала Start condition (начало передачи);
    • iic_istop() — формирование сигнала Stop condition (конец передачи).
  • Процедуры верхнего уровня:
    • iic_dkwr(addr, data) — запись байта в Slave (ADT75);
    • iic_isend(val) — поразрядная передача байта в порт P22;
    • iic_dkrd(addr, *pnack) — чтение байта из Slave (ADT75);
    • iic_irecv() — поразрядное чтение байта из порта P22.

На рис. 4 представлены блок-схемы этих процедур с кратким описанием.

а) iic_init() — инициализация портов;
б) iic_SCL_0()’ сброс SCL в «0»;

в) iic_SCL_1() — установка SCL в «1»;

г) iic_istart() — формирование сигнала Start condition (начало передачи);

д) iic_istop() — формирование сигнала Stop condition (конец передачи);

е) iic_dkwr(addr, data) — запись байта в Slave;

ж) iic_dkrd(addr, *pnack) — чтение байта из Slave;

з) iic_isend(val) — поразрядная передача байта в порт P22;

и) iic_irecv() — поразрядное чтение байта из порта P22

Задержки длительностью 5 мкс в процедурах iic_SCL_0() и iic_SCL_1() необходимы для организации скорости обмена в 100 кбит/с.

В процедурах iic_dkwr(addr, data) и iic_dkrd(addr, *pnack) addr — адрес внешнего устройства на шине I2C (значение от 0 до 127, сдвинутое на 1 бит влево), data — данные.

В процедуре чтения iic_dkrd(addr, *pnack) при вызове процедуры iic_isend(val) младший бит addr устанавливается в «1», указывая на то, что происходит чтение из устройства.

Основной цикл программы представлен на диаграмме рис. 5. Изначально выполняются процедуры инициализации МК. Затем программа зацикливается, ожидая прерывания от интерфейса UART, которое поступает при приеме 1-го байта из хост-компьютера.

Рис. 5. Блок-схема программы
Рис. 5. Блок-схема программы

Далее идет анализ принятого байта и, в зависимости от принятого символа, следует переход к записи информации в Slave (WR, если принят символ W или w) или к чтению байта из Slave (RD, если принят символ R или r). Если же ни одно условие не выполняется, следует переход на процедуру передачи хосту сообщения об ошибке— Error.

При записи байта в Slave требуются дополнительные данные от компьютера: адрес устройства (Addr) и непосредственно данные (Data). Эти данные считываются процедурой rdUART2(), которая также преобразует принятые 2 символа в десятичный формат. Затем управление передается процедуре выдачи данных на шину I2C — iic_dkwr(Addr, Data). Формат данных, передаваемых из компьютера, должен быть в виде Waadd, где W — команда записи, аа — адрес устройства умноженный на 2 в шестнадцатеричном представлении (например: 4Ah = 74 = 37H2, где 37 — десятичный адрес устройства), dd — сами данные для записи в шестнадцатиричном виде (например: A8h = 168). Пример команды—w4AA8. Если при выполнении команды записи происходит ошибка, то в компьютер передается соответствующее сообщение, иначе передается сообщение Ok.

При чтении байта из Slave требуется только адрес устройства, представленный в том же виде, что и в команде записи. Форма команды имеет вид: Raa, где R — команда на чтение, aa — адрес устройства. Если все параметры заданы верно, то в UART передается сообщение DATA=, считанный из устройства байт данных и сообщение Ok. Если же возникли ошибки, то передается сообщение Error.

После окончания процедуры записи или считывания, а также если были ошибки, МК переходит в режим ожидания приема байта команды.

Несколько слов об используемых процедурах:

  • rdUART() — прием одного байта данных из UART;
  • rdUART2() — прием двух байтов из UART и преобразование их в десятичный формат;
  • wrUART()— передача сообщений в UART.

Для облегчения настройки периферии микроконтроллеров NEC у разработчика есть возможность использовать бесплатную среду Applilet (рис. 6).

Рис. 6. Бесплатная среда настройки периферии МК NEC
Рис. 6. Бесплатная среда настройки периферии МК NEC

Эта среда позволяет за считанные минуты сформировать исходный код, необходимый для инициализации периферийных устройств используемого МК, на языке C или ассемблера. Все действия сводятся к установке нужных галочек и ввода необходимых параметров. На рис. 7 и 8 приведен пример настройки UART и портов P21, P22, используемых в настоящем проекте для формирования сигналов интерфейса I2C.

Рис. 7. Настройка UART в Applilet
Рис. 7. Настройка UART в Applilet
Рис. 8. Настройка портов P21 и P22
Рис. 8. Настройка портов P21 и P22

Входящий в оценочный комплект софт от IAR включает:

  • менеджер проектов (интегрированная среда разработки);
  • ассемблер;
  • Си-компилятор;
  • симулятор.

Этот софт позволяет создавать полноценные программные проекты для микроконтроллеров uPD78F9222. После того как программа откомпилирована и загружена в МК оценочного комплекта, можно запустить стандартную программу HyperTerminal, входящую в ОС Windows, настроить ее на работу с виртуальным COM-портом, выставить параметры связи — такие же, как и в настройках UART-микроконтроллера. Теперь хост-компьютер играет роль терминала для оценочного комплекта.

После сброса МК на терминале должна появиться надпись: I2C UART. Можно начинать процедуры обмена данными. На рис. 9 приведен пример считывания текущей температуры из ADT75. Посылаем команду W9000 — адрес устройства 48h (умножаем на 2, получаем 90h, см. DataSheet на ADT75 [3]) и адрес регистра температуры 00. После получения подтверждения выполнения команды Ok, посылаем команду считывания из устройства 90 — R90. Получаем содержимое регистра температуры, в нашем случае оно равно 19h, что соответствует 25 °С (судя по описанию на ADT75).

Рис. 9. Пример обмена данными
Рис. 9. Пример обмена данными

Конечно, программу можно доработать и посылать в компьютер уже вычисленное значение температуры. Причем можно немного усложнить и считывать 2 и более байта данных с шины I2C. Так как м/с датчика температуры имеет разрядность 12 бит, мы считываем только старшие 8, но это уже тема для другой статьи.

В завершение хочется напомнить, что отладочным комплектом «Low Pin Count — Do it!» можно воспользоваться как программатором. Достаточно вывести линии X1_cpld, X2_cpld, RES_N, VCC_uPD и GND с платы на отдельный разъем и подключать его к собственной разработке.

Один из вариантов схемы готового устройства приведен на рис. 10. «Лишние» узлы можно смело выкидывать (за исключением МК). Исходные коды полученного проекта можно найти на сайте [4].

<img class="wp-image-127662 size-full" src="https://kit-e.ru/wp-content/uploads/58_10-1.jpg" alt="Пример реализации преобразователя I2C UART» title=»» width=»745″ height=»255″>
Рис. 10. Пример реализации преобразователя I2C UART

Литература

  1. www.eltech.spb.ru/pdf/nec/234/nec_234.pdf
  2. www.eltech.spb.ru/techinfo.html?aid=243
  3. www.analog.com/en/prod/0,2877,ADT75,00.html
  4. www.eltech.spb.ru/addons/NEC_I2C-UART.rar
  5. www.semtech.com/products/product-detail.jsp?navId=H0,C157,C159,P1471
xosotin chelseathông tin chuyển nhượngcâu lạc bộ bóng đá arsenalbóng đá atalantabundesligacầu thủ haalandUEFAevertonxosofutebol ao vivofutemaxmulticanaisonbetbóng đá world cupbóng đá inter milantin juventusbenzemala ligaclb leicester cityMUman citymessi lionelsalahnapolineymarpsgronaldoserie atottenhamvalenciaAS ROMALeverkusenac milanmbappenapolinewcastleaston villaliverpoolfa cupreal madridpremier leagueAjaxbao bong da247EPLbarcelonabournemouthaff cupasean footballbên lề sân cỏbáo bóng đá mớibóng đá cúp thế giớitin bóng đá ViệtUEFAbáo bóng đá việt namHuyền thoại bóng đágiải ngoại hạng anhSeagametap chi bong da the gioitin bong da lutrận đấu hôm nayviệt nam bóng đátin nong bong daBóng đá nữthể thao 7m24h bóng đábóng đá hôm naythe thao ngoai hang anhtin nhanh bóng đáphòng thay đồ bóng đábóng đá phủikèo nhà cái onbetbóng đá lu 2thông tin phòng thay đồthe thao vuaapp đánh lô đềdudoanxosoxổ số giải đặc biệthôm nay xổ sốkèo đẹp hôm nayketquaxosokq xskqxsmnsoi cầu ba miềnsoi cau thong kesxkt hôm naythế giới xổ sốxổ số 24hxo.soxoso3mienxo so ba mienxoso dac bietxosodientoanxổ số dự đoánvé số chiều xổxoso ket quaxosokienthietxoso kq hôm nayxoso ktxổ số megaxổ số mới nhất hôm nayxoso truc tiepxoso ViệtSX3MIENxs dự đoánxs mien bac hom nayxs miên namxsmientrungxsmn thu 7con số may mắn hôm nayKQXS 3 miền Bắc Trung Nam Nhanhdự đoán xổ số 3 miềndò vé sốdu doan xo so hom nayket qua xo xoket qua xo so.vntrúng thưởng xo sokq xoso trực tiếpket qua xskqxs 247số miền nams0x0 mienbacxosobamien hôm naysố đẹp hôm naysố đẹp trực tuyếnnuôi số đẹpxo so hom quaxoso ketquaxstruc tiep hom nayxổ số kiến thiết trực tiếpxổ số kq hôm nayso xo kq trực tuyenkết quả xổ số miền bắc trực tiếpxo so miền namxổ số miền nam trực tiếptrực tiếp xổ số hôm nayket wa xsKQ XOSOxoso onlinexo so truc tiep hom nayxsttso mien bac trong ngàyKQXS3Msố so mien bacdu doan xo so onlinedu doan cau loxổ số kenokqxs vnKQXOSOKQXS hôm naytrực tiếp kết quả xổ số ba miềncap lo dep nhat hom naysoi cầu chuẩn hôm nayso ket qua xo soXem kết quả xổ số nhanh nhấtSX3MIENXSMB chủ nhậtKQXSMNkết quả mở giải trực tuyếnGiờ vàng chốt số OnlineĐánh Đề Con Gìdò số miền namdò vé số hôm nayso mo so debach thủ lô đẹp nhất hôm naycầu đề hôm naykết quả xổ số kiến thiết toàn quốccau dep 88xsmb rong bach kimket qua xs 2023dự đoán xổ số hàng ngàyBạch thủ đề miền BắcSoi Cầu MB thần tàisoi cau vip 247soi cầu tốtsoi cầu miễn phísoi cau mb vipxsmb hom nayxs vietlottxsmn hôm naycầu lô đẹpthống kê lô kép xổ số miền Bắcquay thử xsmnxổ số thần tàiQuay thử XSMTxổ số chiều nayxo so mien nam hom nayweb đánh lô đề trực tuyến uy tínKQXS hôm nayxsmb ngày hôm nayXSMT chủ nhậtxổ số Power 6/55KQXS A trúng roycao thủ chốt sốbảng xổ số đặc biệtsoi cầu 247 vipsoi cầu wap 666Soi cầu miễn phí 888 VIPSoi Cau Chuan MBđộc thủ desố miền bắcthần tài cho sốKết quả xổ số thần tàiXem trực tiếp xổ sốXIN SỐ THẦN TÀI THỔ ĐỊACầu lô số đẹplô đẹp vip 24hsoi cầu miễn phí 888xổ số kiến thiết chiều nayXSMN thứ 7 hàng tuầnKết quả Xổ số Hồ Chí Minhnhà cái xổ số Việt NamXổ Số Đại PhátXổ số mới nhất Hôm Nayso xo mb hom nayxxmb88quay thu mbXo so Minh ChinhXS Minh Ngọc trực tiếp hôm nayXSMN 88XSTDxs than taixổ số UY TIN NHẤTxs vietlott 88SOI CẦU SIÊU CHUẨNSoiCauVietlô đẹp hôm nay vipket qua so xo hom naykqxsmb 30 ngàydự đoán xổ số 3 miềnSoi cầu 3 càng chuẩn xácbạch thủ lônuoi lo chuanbắt lô chuẩn theo ngàykq xo-solô 3 càngnuôi lô đề siêu vipcầu Lô Xiên XSMBđề về bao nhiêuSoi cầu x3xổ số kiến thiết ngày hôm nayquay thử xsmttruc tiep kết quả sxmntrực tiếp miền bắckết quả xổ số chấm vnbảng xs đặc biệt năm 2023soi cau xsmbxổ số hà nội hôm naysxmtxsmt hôm nayxs truc tiep mbketqua xo so onlinekqxs onlinexo số hôm nayXS3MTin xs hôm nayxsmn thu2XSMN hom nayxổ số miền bắc trực tiếp hôm naySO XOxsmbsxmn hôm nay188betlink188 xo sosoi cầu vip 88lô tô việtsoi lô việtXS247xs ba miềnchốt lô đẹp nhất hôm naychốt số xsmbCHƠI LÔ TÔsoi cau mn hom naychốt lô chuẩndu doan sxmtdự đoán xổ số onlinerồng bạch kim chốt 3 càng miễn phí hôm naythống kê lô gan miền bắcdàn đề lôCầu Kèo Đặc Biệtchốt cầu may mắnkết quả xổ số miền bắc hômSoi cầu vàng 777thẻ bài onlinedu doan mn 888soi cầu miền nam vipsoi cầu mt vipdàn de hôm nay7 cao thủ chốt sốsoi cau mien phi 7777 cao thủ chốt số nức tiếng3 càng miền bắcrồng bạch kim 777dàn de bất bạion newsddxsmn188betw88w88789bettf88sin88suvipsunwintf88five8812betsv88vn88Top 10 nhà cái uy tínsky88iwinlucky88nhacaisin88oxbetm88vn88w88789betiwinf8betrio66rio66lucky88oxbetvn88188bet789betMay-88five88one88sin88bk88xbetoxbetMU88188BETSV88RIO66ONBET88188betM88M88SV88Jun-68Jun-88one88iwinv9betw388OXBETw388w388onbetonbetonbetonbet88onbet88onbet88onbet88onbetonbetonbetonbetqh88mu88Nhà cái uy tínpog79vp777vp777vipbetvipbetuk88uk88typhu88typhu88tk88tk88sm66sm66me88me888live8live8livesm66me88win798livesm66me88win79pog79pog79vp777vp777uk88uk88tk88tk88luck8luck8kingbet86kingbet86k188k188hr99hr99123b8xbetvnvipbetsv66zbettaisunwin-vntyphu88vn138vwinvwinvi68ee881xbetrio66zbetvn138i9betvipfi88clubcf68onbet88ee88typhu88onbetonbetkhuyenmai12bet-moblie12betmoblietaimienphi247vi68clupcf68clupvipbeti9betqh88onb123onbefsoi cầunổ hũbắn cáđá gàđá gàgame bàicasinosoi cầuxóc đĩagame bàigiải mã giấc mơbầu cuaslot gamecasinonổ hủdàn đềBắn cácasinodàn đềnổ hũtài xỉuslot gamecasinobắn cáđá gàgame bàithể thaogame bàisoi cầukqsssoi cầucờ tướngbắn cágame bàixóc đĩaAG百家乐AG百家乐AG真人AG真人爱游戏华体会华体会im体育kok体育开云体育开云体育开云体育乐鱼体育乐鱼体育欧宝体育ob体育亚博体育亚博体育亚博体育亚博体育亚博体育亚博体育开云体育开云体育棋牌棋牌沙巴体育买球平台新葡京娱乐开云体育mu88qh88

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *