Что такое интерфейс I2C. Как работает протокол I2C. Какие устройства используют I2C шину. Как подключить и настроить I2C устройства. Как проанализировать сигналы на шине I2C.
Что такое интерфейс I2C и принцип его работы
I2C (Inter-Integrated Circuit) — это последовательный протокол связи, разработанный компанией Philips для обмена данными между интегральными схемами на коротких расстояниях. Основные особенности интерфейса I2C:
- Использует всего две двунаправленные линии — SDA (данные) и SCL (тактовый сигнал)
- Поддерживает подключение множества устройств к одной шине
- Максимальная скорость передачи данных до 3.4 Мбит/с
- Каждое устройство на шине имеет уникальный 7-битный адрес
- Поддерживает режимы «ведущий-ведомый»
Как работает передача данных по I2C? Основные этапы обмена:
- Ведущее устройство формирует состояние СТАРТ
- Передается 7-битный адрес ведомого устройства и бит направления передачи
- Ведомое устройство подтверждает прием адреса сигналом ACK
- Происходит обмен данными побайтно, каждый байт подтверждается сигналом ACK
- Ведущее устройство формирует состояние СТОП
Какие устройства используют интерфейс I2C
I2C широко применяется для связи между компонентами электронных устройств. Наиболее распространенные типы I2C устройств:
![](/800/600/https/i0.wp.com/www.mosaic-industries.com/embedded-systems/_media/sbc-single-board-computers/freescale-hcs12-9s12-c-language/instrument-control/iic-i2c-bus-pull-up.png)
- Датчики температуры, давления, влажности и т.д.
- АЦП и ЦАП
- ЖК-дисплеи и OLED-экраны
- Часы реального времени
- EEPROM и другие микросхемы памяти
- Микроконтроллеры
- Аудиокодеки
- Потенциометры и ЦАП
Интерфейс I2C позволяет легко объединять различные устройства на одной шине, что упрощает разработку электронных устройств.
Как подключить и настроить I2C устройства
Для подключения I2C устройств необходимо:
- Соединить линии SDA и SCL всех устройств
- Подтянуть линии к питанию через резисторы 4.7-10 кОм
- Подключить общий провод (GND)
- Подать питание на все устройства (обычно 3.3В или 5В)
Настройка I2C в микроконтроллере обычно включает:
- Инициализацию I2C модуля
- Установку скорости передачи данных
- Настройку прерываний
- Включение подтягивающих резисторов (если есть)
Конкретные шаги настройки зависят от используемого микроконтроллера и его программной библиотеки для работы с I2C.
Анализ сигналов на шине I2C
Для анализа сигналов I2C можно использовать:
- Цифровой осциллограф
- Логический анализатор
- Специализированные I2C анализаторы
При анализе сигналов I2C осциллографом нужно подключить один канал к линии SCL, а второй к SDA. Настройка запуска по переднему фронту SCL позволит захватить передачу данных.
![](/800/600/https/i0.wp.com/learn.circuit.rocks/wp-content/uploads/2021/09/spi-and-i2c.png)
Логический анализатор упрощает декодирование протокола I2C, автоматически выделяя адреса, данные и управляющие сигналы. Это значительно ускоряет отладку I2C устройств.
Преимущества и недостатки интерфейса I2C
Основные преимущества I2C:
- Простота реализации — всего 2 линии
- Возможность подключения множества устройств
- Низкое энергопотребление
- Встроенная поддержка в большинстве микроконтроллеров
Недостатки I2C:
- Невысокая скорость передачи данных
- Ограниченная длина линий связи (до 1-2 метров)
- Необходимость подтягивающих резисторов
- Возможны конфликты адресов устройств
Несмотря на ограничения, простота и универсальность делают I2C очень популярным интерфейсом для связи между компонентами электронных устройств.
Программирование обмена данными по I2C
Для программирования обмена по I2C обычно используются готовые библиотеки. Типовой алгоритм передачи данных:
- Сформировать состояние СТАРТ
- Передать адрес устройства и бит направления
- Дождаться подтверждения (ACK)
- Передать/принять байт данных
- Отправить/принять подтверждение (ACK)
- Повторить шаги 4-5 для остальных байтов
- Сформировать состояние СТОП
Пример передачи данных на Arduino:
![](/800/600/https/img.fruugo.com/product/7/70/1257090707_max.jpg)
Этот код инициализирует I2C, затем каждую секунду отправляет байт 0x55 в регистр 0x00 устройства с адресом 0x50.
Отладка и поиск неисправностей в I2C системах
При отладке I2C устройств могут возникать различные проблемы. Вот некоторые типичные неисправности и способы их устранения:
- Нет связи с устройством:
- Проверить правильность подключения линий SDA и SCL
- Убедиться в наличии подтягивающих резисторов
- Проверить питание устройства
- Убедиться в правильности адреса устройства
- Ошибки передачи данных:
- Проверить уровни напряжения на линиях
- Уменьшить длину проводов или скорость передачи
- Проверить наличие помех от других устройств
- Конфликты на шине:
- Убедиться в уникальности адресов всех устройств
- Проверить, не пытаются ли несколько ведущих устройств одновременно управлять шиной
Использование осциллографа или логического анализатора значительно упрощает поиск неисправностей, позволяя наглядно увидеть проблемы в передаче данных.
![](/800/600/https/alnext.ru/imgx/kf/S949f4011fba14234bc5448bb7f22e2e5w.jpg)
FLASH-I2C адаптер для LCD 1602/2004
Общие сведения:
I2C-flash адаптер для LCD дисплеев 1602/2004 — является преобразователем интерфейсов который обеспечивает обмен данными между двумя шинами: параллельной шиной LCD и шиной I2C. Наличие связи между этими шинами позволяет работать с LCD дисплеем по шине I2C.
- К одной шине LCD можно подключить один LCD дисплей 1602 или 2004.
- К одной шине I2C можно подключить более 100 адаптеров. Адрес адаптера на шине I2C (по умолчанию 0x09) назначается программно и хранится в его энергонезависимой памяти.
Адаптер применяется для управления LCD дисплеями 1602 или 2004 по шине I2C, что экономит количество выводов используемых для подключения дисплея. Вместо 8 выводов к которым можно подключить всего 1 дисплей, используется 2 вывода к которым можно подключить более 100 дисплеев.
Видео:
Редактируется …
Спецификация:
- Напряжение питания: 3,3 В или 5 В (постоянного тока).
- Потребляемый ток: до 6 мА.
- Интерфейс: I2C.
- Скорость шины I2C: 100 кбит/с.
- Адрес на шине I2C: устанавливается программно (по умолчанию 0x09).
- Уровень логической 1 на линиях шины I2C: 3,3 В (толерантны к 5 В).
- Рабочая температура: от -20 до +70 °С.
- Габариты: 41,91 х 17,15 мм (1650 x 675 mil).
- Вес: 6 г.
Подключение:
По умолчанию все модули FLASH-I2C имеют установленный адрес 0х09.
— Перед подключением 1 модуля к шине I2C настоятельно рекомендуется изменить адрес модуля.
— При подключении 2 и более FLASH-I2C модулей к шине необходимо в обязательном порядке предварительно изменить адрес каждого модуля, после чего уже подключать их к шине.
Более подробно о том, как это сделать, а так же о многом другом, что касается работы FLASH-I2C модулей, вы можете прочесть в этой статье.
В верхней части платы расположена колодка шины LCD для подключения дисплея.
- GND — общий вывод питания.
- Vcc — вывод питания LCD дисплея 3,3 или 5 В (выбирается перемычками на плате).
- VO — (Voltage cOntrast) контрастность экрана.
- RS — (Register Select) линия выбора регистра команд / данных.
- RW — (Read/Write) линия выбора направления передачи.
- E — (Enable) линия тактирования по спаду.
- D0-D7 — (Data) линии данных (адаптер использует только D4-D7).
- A — (Anode) положительный вывод питания подсветки LCD дисплея.
- K — (Cathode) отрицательный вывод питания подсветки LCD дисплея.
По бокам платы расположены разъемы для подключения адаптера к шине I2C. Шина подключается к любому разъему I2C, а второй разъем можно использовать для подключения следующего адаптера, или других устройств.
- SCL — вход/выход линии тактирования шины I2C.
- SDA — вход/выход линии данных шины I2C.
- Vcc — вход питания 3,3 или 5 В.
- GND — общий вывод питания.
По центру платы расположены две перемычки выбора питания LCD дисплея.
- 5V — установка данной перемычки соединит вывод Vcc шины LCD с выводом Vcc шины I2C.
- 3V3 — установка данной перемычки подключит вывод Vcc шины LCD к стабилизатору +3,3 В.
- Не устанавливайте обе перемычки одновременно, это может повредить адаптер и дисплей.
Подключение дисплея к адаптеру:
LCD Дисплей 1602 или 2004 подключается к колодке LCD адаптера. Распиновка колодки адаптера совпадает с распиновкой колодки дисплея. После подключения дисплея к адаптеру нужно настроить контрастность экрана.
Для настройки контрастности экрана установите переключатель режима работы адаптера в положение «ADR» и подайте питание на шину I2C. Плавно поворачивайте отвёрткой крестовину подстроечного резистора (рядом с которым присутствует надпись «КОНТРАСТ») до появления на экране текста с указанием адреса и яркости. После настройки контрастности экрана установите переключатель режима работы адаптера в положение «ON».
Питание:
Входное напряжение питания адаптера зависит от напряжения питания LCD дисплея.
- Если к адаптеру подключён дисплей требующий питания 5В, то на выводы Vcc и GND колодки I2C подается напряжение 5В постоянного тока, а на плате адаптера замыкается перемычка «5V».
- Если к адаптеру подключён дисплей требующий питания 3,3В, то на выводы Vcc и GND колодки I2C подается напряжение 3,3В или 5В постоянного тока (поддерживаются оба напряжения), а на плате адаптера замыкается перемычка «3V3».
Подробнее о модуле:
Адаптер построен на базе микроконтроллера STM32F030F4, снабжен собственным стабилизатором напряжения, резистором настройки контрастности дисплея и переключателем режима работы: «ON» и «ADR».
- Если переключатель установлен в положение «ON», то адаптер находится в основном режиме работы, при котором осуществляется обмен данными между шинами LCD и I2C, что позволяет работать с LCD дисплеем по шине I2C.
Работа с LCD дисплеем выполняется так же, как и при использовании конвертера на базе чипа PCF8574, что делает адаптер полностью совместимым с библиотеками разработанными для I2C LCD дисплеев 1602 и 2004.
- Если переключатель установлен в положение «ADR», то адаптер работает в режиме адресного доступа к своим регистрам, что позволяет управлять настройками адаптера. В этом режиме нельзя работать с LCD дисплеем, на его экране будет отображаться информация о текущем адресе адаптера на шине I2C и о установленной яркости подсветки дисплея в %. Доступ к регистрам адаптера осуществляется по шине I2C.
Адаптер позволяет настроить такие параметры как:
- Адрес адаптера на шине I2C. При изменении адреса, можно указать, что новый адрес должен сохраниться в flash память модуля, а значит адрес сохранится и после отключения питания.
- Яркость свечения подсветки дисплея. Значение яркости от 0 до 100% автоматически сохраняется в flash память модуля (сохранится после отключения и включения питания).
- Подтяжка линий шины I2C (по умолчанию включена). В случае наличия на шине I2C большого количества модулей с подтяжкой линий SDA и SCL, отключение подтяжки некоторых модулей может существенно улучшить связь с микроконтроллером.
Для настройки параметров адаптера не требуются библиотеки.
Для работы с LCD дисплеями 1602 и 2004 по шине I2C предлагаем воспользоваться библиотекой LiquidCrystal_I2C_V112.
Подробнее про установку библиотеки читайте в нашей инструкции.
Примеры:
Вывод данных на LCD дисплей:
Для работы с LCD дисплеем нужно установить переключатель работы адаптера в положение «ON» (режим работы с дисплеем). Работа с дисплеем осуществляется так же как и при использов
Подключение LCD 1602 по I2C интерфейсу | RadioLaba.ru
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
#include <P16F628A.INC>
LIST p=16F628A
__CONFIG H’3F10′ ;Конфигурация микроконтроллера
errorlevel -302 ;не выводить сообщения с ошибкой 302 в листинге
Sec equ 0020h ;вспомогательные регистры счета
Sec1 equ 0021h ;
Sec2 equ 0022h ;
scetbit equ 0024h ;вспомогательный регистр счета кол-ва бит
perem equ 0025h ;вспомогательный регистр приема/передачи байта по интерфейсу
tmp equ 0026h ;вспомогательный регистр счетчик
;
lcd_tmp equ 0027h ;вспомогательный регистр передачи инструкций
;
adr_i2c equ 0028h ;регистры подпрограммы передачи данных по интерфейсу
tmp_i2c equ 0029h ;
slave_adr equ 002Ah ;
data_i2c equ 002Bh ;
;
flag equ 007Fh ;регистр флагов
#DEFINE sda PORTB,0 ;линия sda
#DEFINE scl PORTB,1 ;линия scl
#DEFINE sda_io TRISB,0 ;линия направления sda
#DEFINE scl_io TRISB,1 ;линия направления scl
#DEFINE knp_led PORTB,2 ;кнопка вкл/выкл подсветки
#DEFINE led PORTB,3 ;светодиод ошибки передачи данных по интерфейсу
;flag,2 — флаг состояния подсветки (0 — выключена, 1 — включена)
;flag,3 — флаг передачи команда/данные (0 — команда, 1 — данные)
;flag,4 — флаг направления передачи (0 — чтение, 1 — запись)
;flag,5 — флаг окончания приема данных от ведомого
;flag,6 — флаг ошибки передачи по интерфейсу I2C (отсутствие подтверждения от ведомого)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 0000h ;начать выполнение программы с адреса 0000h
goto Start ;переход на метку Start
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Основная программа
Start movlw b’00000000′ ;установка значений выходных защелок порта B
movwf PORTB ;
;
movlw b’00000111′ ;выключение компараторов
movwf CMCON ;
;
bsf STATUS,RP0 ;выбрать 1-й банк
movlw b’11110111′ ;настройка линий ввода\вывода порта B
movwf TRISB ;RB3 — на выход, остальные на вход
bcf STATUS,RP0 ;выбрать 0-й банк
;
clrf flag ;сброс регистра флагов
;
call lcd_led_on ;вызов подпрограммы включения подсветки
;
call init_lcd ;вызов подпрограммы инициализации дисплея
call err_prov ;проверка ошибки
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movlw 0x02 ;установка адреса DDRAM памяти (1-я строка 3-я позиция)
call lcd_adr ;вызоа подпрограммы передачи адреса DDRAM
movlw ‘R’ ;Вывод надписи RadioLaba. ru
call lcd_dat ;
movlw ‘a’ ;
call lcd_dat ;
movlw ‘d’ ;
call lcd_dat ;
movlw ‘i’ ;
call lcd_dat ;
movlw ‘o’ ;
call lcd_dat ;
movlw ‘L’ ;
call lcd_dat ;
movlw ‘a’ ;
call lcd_dat ;
movlw ‘b’ ;
call lcd_dat ;
movlw ‘a’ ;
call lcd_dat ;
movlw ‘.’ ;
call lcd_dat ;
movlw ‘r’ ;
call lcd_dat ;
movlw ‘u’ ;
call lcd_dat ;
;
call paus ;пауза 1 сек
;
movlw 0x43 ;установка адреса DDRAM памяти (2-я строка 4-я позиция)
call lcd_adr ;вызоа подпрограммы передачи адреса DDRAM
;
movlw ‘L’ ;Вывод надписи LCD 1602A
call lcd_dat ;
movlw ‘C’ ;
call lcd_dat ;
movlw ‘D’ ;
call lcd_dat ;
movlw ‘ ‘ ;
call lcd_dat ;
movlw ‘1’ ;
call lcd_dat ;
movlw ‘6’ ;
call lcd_dat ;
movlw ‘0’ ;
call lcd_dat ;
movlw ‘2’ ;
call lcd_dat ;
movlw ‘A’ ;
call lcd_dat ;
;
call paus ;пауза 1 сек
call paus ;пауза 1 сек
;
movlw . 16 ;сдвиг экрана влево на 16 позиций
movwf tmp ;
met_1 movlw b’00011000′ ;команда сдвига экрана влево
call lcd_comm ;вызов подпрограммы передачи команды
decfsz tmp,F ;
goto met_1 ;
movlw 0x13 ;установка адреса DDRAM памяти (1-я строка 20-я позиция)
call lcd_adr ;вызоа подпрограммы передачи адреса DDRAM
movlw ‘P’ ;Вывод надписи PCF8574AT
call lcd_dat ;
movlw ‘C’ ;
call lcd_dat ;
movlw ‘F’ ;
call lcd_dat ;
movlw ‘8’ ;
call lcd_dat ;
movlw ‘5’ ;
call lcd_dat ;
movlw ‘7’ ;
call lcd_dat ;
movlw ‘4’ ;
call lcd_dat ;
movlw ‘A’ ;
call lcd_dat ;
movlw ‘T’ ;
call lcd_dat ;
;
call paus ;пауза 1 сек
;
movlw 0x54 ;установка адреса DDRAM памяти (2-я строка 21-я позиция)
call lcd_adr ;вызоа подпрограммы передачи адреса DDRAM
;
movlw ‘I’ ;Вывод надписи I2C bus
call lcd_dat ;
movlw ‘2’ ;
call lcd_dat ;
movlw ‘C’ ;
call lcd_dat ;
movlw ‘ ‘ ;
call lcd_dat ;
movlw ‘b’ ;
call lcd_dat ;
movlw ‘u’ ;
call lcd_dat ;
movlw ‘s’ ;
call lcd_dat ;
;
call paus ;пауза 1 сек
call paus ;пауза 1 сек
;
sdvig movlw . 16 ;сдвиг экрана вправо на 16 позиций с одновременным опросом кнопки подсветки
movwf tmp ;с частотой 10 Гц
sdvig_1 movlw b’00011100′ ;команда сдвига экрана вправо
call lcd_comm ;вызов подпрограммы передачи команды
call knp_opros ;вызов подпрограммы опроса кнопки подсветки
movlw .100 ;
call paus_lcd ;пауза 100 мс
decfsz tmp,F ;
goto sdvig_1 ;
movlw .20 ;пауза 2 сек с опросом кнопки подсветки с частотой 10 Гц
movwf tmp ;
sdvig_2 call knp_opros ;вызов подпрограммы опроса кнопки подсветки
movlw .100 ;
call paus_lcd ;пауза 100 мс
decfsz tmp,F ;
goto sdvig_2 ;
movlw . 16 ;сдвиг экрана влево на 16 позиций с одновременным опросом кнопки подсветки
movwf tmp ;с частотой 10 Гц
sdvig_3 movlw b’00011000′ ;команда сдвига экрана влево
call lcd_comm ;вызов подпрограммы передачи команды
call knp_opros ;вызов подпрограммы опроса кнопки подсветки
movlw .100 ;
call paus_lcd ;пауза 100 мс
decfsz tmp,F ;
goto sdvig_3 ;
movlw .20 ;пауза 2 сек с опросом кнопки подсветки с частотой 10 Гц
movwf tmp ;
sdvig_4 call knp_opros ;вызов подпрограммы опроса кнопки подсветки
movlw .100 ;
call paus_lcd ;пауза 100 мс
decfsz tmp,F ;
goto sdvig_4 ;
goto sdvig ;переход на метку sdvig
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
knp_opros btfsc knp_led ;Подпрограмма опроса кнопки подсветки дисплея
return ;кнопка не нажата: выход из подпрограммы
call paus_knp ;кнопка нажата, ожидание отжатия
btfss knp_led ;
goto $-2 ;
;
btfsc flag,2 ;опрос флага состояния подсветки
goto knp_1 ;
call lcd_led_on ;подсветка выключена: вызов подпрограммы включения подсветки
return ;выход из подпрограммы
;
knp_1 call lcd_led_off ;подсветка включена: вызов подпрограммы выключения подсветки
return ;выход из подпрограммы
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
err_prov btfss flag,6 ;проверка ошибок передачи данных
return ;нет ошибок: выход из подпрограммы
err_1 bsf led ;ошибка: включить светодиод led
goto err_1 ;переход на метку err_1: зацикливание программы
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Подпрограмма включения/выключения подсветки дисплея
lcd_led_on movlw b’00001000′ ;Команда включения подсветки 3-й бит в 1
movwf adr_i2c ;
bsf flag,2 ;установка флага включенного состояния подсветки
goto lcd_led_1 ;
lcd_led_off movlw b’00000000′ ;Команда выключения подсветки 3-й бит в 0
movwf adr_i2c ;
bcf flag,2 ;установка флага выключенного состояния подсветки
lcd_led_1 movlw b’01111110′ ;
movwf slave_adr ;запись адреса микросхемы PCF8574AT в регистр slave_adr
clrf tmp_i2c ;
call write_i2c ;вызов подпрограммы записи по интерфейсу i2c
return ;выход из подпрограммы
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Подпрограмма инициализации дисплея LCD 1602
init_lcd movlw . 15 ;пауза 15 мс
call paus_lcd ;
movlw b’00110000′ ;Передача команды 0011 (старший полубайт)
call lcd_comm_1 ;вызов подпрограммы передачи полубайта команды на дисплей
btfsc flag,6 ;проверка ошибки
return ;
movlw .5 ;пауза 5 мс
call paus_lcd ;
movlw b’00110000′ ;Передача команды 0011 (старший полубайт)
call lcd_comm_1 ;вызов подпрограммы передачи полубайта команды на дисплей
btfsc flag,6 ;проверка ошибки
return
анализ сигналов шины I2C / Хабр
Как я уже неоднократно упоминал в своих публикациях, любительские проекты финансируются из семейного бюджета, и радиолюбитель, обычно, не может себе позволить покупку дорогостоящего измерительного оборудования. Приходится довольствоваться тем, что есть. Или тем, что удаётся взять попользоваться «на время». А иногда от безысходности радиолюбителю приходится «сверлить пилой и пилить буравчиком».
Недавно я испытал потребность выяснить, что на самом деле передаётся в разрабатываемом мной устройстве по шине I2C. Это был тот счастливый момент, когда можно было себе позволить «пилить пилой».
Как происходит обмен данными между устройствами по протоколу I2C можно узнать здесь. Для анализа сигналов на шине I2C можно применить, как цифровой двухканальный осциллограф с памятью, так и логический анализатор.
При работе с радиоэлектронной аппаратурой осциллограф является наиболее универсальным инструментом. Современные цифровые осциллографы обладают рядом полезных свойств, позволяющих производить, в том числе, и анализ сигналов шины I2C.
В данном случае мне достался «на время» цифровой двухканальный осциллограф с памятью Rigol DS1102 (цена на сайте производителя $461). У этого прибора есть два канала измерения с полосой пропускания до 100 MHz и частотой выборки сигнала 1 GSa/s.
К сигналу SCL был подключен Ch2. К сигналу SDA был подключен Ch3. Для обоих каналов был установлен масштаб 1.00 V/дел. Масштаб развёртки – 10 us/дел. Для наглядности луч первого канала смещён в верхнюю половину экрана, а луч второго канала – в нижнюю.
В меню Trigger осциллограф был настроен на однократное измерение с запуском по достижению передним фронтом в канале Ch2 уровня 1.00 V:
После включения тестируемого оборудования была нажата большая красная кнопка Run/Stop. Осциллограф встал в режим ожидания, затем запустился. Через несколько секунд запись была остановлена вручную.
Полученная осциллограмма записывалась на внешний носитель поэкранно:
Произведём разбор записанных сигналов. На первом экране мы видим отображение настроек прибора и осциллограмму сигналов SCL (верхняя часть) и SDA (нижняя часть экрана), на которой читаем слева направо:
- сигнал START: ведущее устройство выставляет низкий уровень сначала на шине SDA, а затем на шине SCL;
- 7-bit адрес: читаем 0x60 (1100000) на шине SDA по передним фронтам SCL;
- признак режима записи: читаем на шине SDA низкий уровень по следующему переднему фронту SCL;
- сигнал ACK: ведущее устройство после передачи байта переключается на приём по шине SDA, на SDA устанавливается высокий уровень, ведомое устройство по заднему фронту SCL выставляет на SDA низкий уровень (собственно, сигнал ACK), который ведущее устройство считывает по переднему фронту SCL;
- сигнал STOP: ведущее устройство выставляет высокий уровень сначала на шине SCL, а затем на шине SDA
Подобным образом, медленно, но верно, можно произвести вручную дешифровку остальных частей записи.
![](/800/600/https/hetpro-store.com/TUTORIALES/wp-content/uploads/2017/10/I2C-Conexiones.jpg)
Дешифрацию протокола можно произвести более простым методом, используя логический анализатор и соответствующее программное обеспечение.
Для использования в качестве логического анализатора мне был любезно предоставлен коллегами Saleae Logic 8 (цена на сайте производителя $399). В качестве программного обеспечения использовалась демо-версия Saleae Logic 1.2.18, взятая с официального сайта. Устанавливая данное программное обеспечение, я принял лицензионное соглашение с условием, в том числе, не использовать данное программное обеспечение с оборудованием сторонних производителей.
В программе был включен анализатор протокола I2C. Для сигнала SCL был назначен канал CH0, а для сигнала SDA – канал Ch2. Частота выборки сигнала 24 MSa/s.
Запуск был настроен по «переднему» фронту CH0. Для отображения данных был выбран шестнадцатеричный формат.
После включения тестируемого оборудования была нажата большая зелёная кнопка Start, и через несколько секунд на экран вывелась диаграмма:
Максимум пользы в применении логического анализатора я вижу в том, что программа сама дешифрует полученные данные. Результаты дешифровки заносятся построчно в окно Decoded Protocols. При выборе в окне строки данных, программа показывает расположение этих данных на диаграмме.
Для сравнения вариантов я «склеил» в графическом редакторе четыре снимка экрана осциллографа и фрагмент диаграммы логического анализатора:
Start обозначен зеленым кружочком, Stop – красным кружочком. На диаграмме сначала происходит проверка наличия на шине устройства с адресом 0x60, а затем производится запись в регистр 0xB7 этого устройства значения 0x80.
Если подходить к сравнению вариантов «с пристрастием», то можно заметить, что на диаграмме логического анализатора (частота выборки 24 MSa/s) присутствует «джиттер» сигнала SCL, которого нет, как такового, на осциллограмме с частотой выборки 1 GSa/s. В остальном картина совпадает, а логическим анализатором ещё и производится правильная дешифрация данных в автоматическом режиме.
При выборе «или-или» в «сухом остатке» имеем, в случае осциллографа, дорогое универсальное устройство, не такое удобное для анализа шины, как логический анализатор, но за сопоставимые с ним деньги. В этих условиях лично я, как инженер «старой закалки», приобрёл бы цифровой осциллограф.
Однако, если бы существовало программное обеспечение с лицензионным соглашением, позволяющим использование недорогих клонов популярных логических анализаторов, типа Saleae Logic 8 или DSLogic Plus…
Недорогие клоны популярных логических анализаторов, и не только их, поддерживает программное обеспечение open source проекта sigrok.
Было собрано рабочее место:
После чего начались «танцы с бубном». На Windows 10 запустилась только 32-разрядная версия PulseView. Наличие в системе недорогого китайского клона Saleae Logic (цена на сайте продавца $7) она не определила.
После этого, в Zadig для устройства Logic были установлены драйверы WinUSB, и после повторного сканирования оно определилось в Zadig, как устройство fx2latw:
После этого для устройства fx2latw в Zadig снова были установлены драйверы WinUSB, и только после этого PulseView увидела в списке устройство «Saleae Logic». Устройство было подключено.
После подключения устройства были произведены следующие настройки программы (слева направо по панели инструментов, начиная с надписи «Saleae Logic»):
- выставлено Pre-trigger capture ratio = 2% по нажатию кнопки с ключом и отвёрткой;
- отключены лишние входы по нажатию кнопки с красным щупом;
- выставлен объем записи 100 К выборок;
- выставлена частота выборки 24 MHz;
- включен анализатор протокола I2C по нажатию кнопки с жёлто-зелёным значком.
Далее в панели слева от каналов:
- каналам присвоены соответствующие сигналам текстовые метки;
- условием запуска назначен задний фронт сигнала SDA;
- сигналам I2C назначены соответствующие каналы.
После включения тестируемого оборудования была нажата кнопка Run. Получен уже знакомый результат:
Похоже, «танцы с бубном» того стоили!
UPD: После ручной установки в Диспетчере устройств для устройства USB Logic драйвера libusb-win32 программа PulseView начала стабильно определять наличие в системе «Saleae Logic» без манипуляций с Zadig.
Краткие выводы:
В статье была описана методика проведения анализа сигналов шины I2C с помощью цифрового осциллографа с памятью и логических анализаторов с пакетами прикладного программного обеспечения.
Универсальным методом анализа сигналов, но недешёвым и небыстрым, является применение цифрового осциллографа с памятью.
Быстрым и бюджетным методом анализа сигналов, но с нетривиальной задачей подключения оборудования, является применение недорогого клона логического анализатора в связке с PulseView.
Буду рад, если своей публикацией помог сэкономить читателям время и деньги.
В следующей публикации расскажу, как измерял частоту, на которой запустился кварцевый резонатор в синтезаторе частоты, без частотомера. Но это уже другая история…
Подробное описание интерфейса I2C — radiohlam.ru
Интерфейс I2C (или по другому IIC) — это достаточно широко распространённый сетевой последовательный интерфейс, придуманный фирмой Philips и завоевавший популярность относительно высокой скоростью передачи данных (обычно до 100 кбит/с, в современных микросхемах до 400 кбит/с), дешевизной и простотой реализации.
1) Физика.
Физически сеть представляет собой двухпроводную шину, линии которой называются DATA и CLOCK (необходим ещё и третий провод — земля, но интерфейс принято называть двухпроводным по количеству сигнальных проводов). Соответственно, по линии DATA передаются данные, линия CLOCK служит для тактирования. К шине может быть подключено до 128 абонентов, каждый со своим уникальным номером. В каждый момент времени информация передаётся только одним абонентом и только в одну сторону.
Устройства I2C имеют выход с «открытым коллектором». Когда выходной транзистор закрыт — на соответствующей линии через внешний подтягивающий резистор устанавливается высокий уровень, когда выходной транзистор открыт — он притягивает соответствующую линию к земле и на ней устанавливается низкий уровень (смотрите рисунок). Резисторы имеют номинал от нескольких килоОм до нескольких десятков килоОм (чем выше скорость — тем меньше номинал резисторов, но больше энергопотребление). На рисунке треугольниками на входе показано, что входы высокоомные и, соответственно, влияния на уровни сигналов на линиях они не оказывают, а только «считывают» эти уровни. Обычно используются уровни 5В или 3,3В.
2) Логика.
Любое устройство на шине I2C может быть одного из двух типов: Master (ведущий) или Slave (ведомый). Обмен данными происходит сеансами. «Мастер»-устройство полностью управляет сеансом: инициирует сеанс обмена данными, управляет передачей, подавая тактовые импульсы на линию Clock, и завершает сеанс.
Кроме этого, в зависимости от направления передачи данных и «Мастер» и «Слэйв»-устройства могут быть «Приёмниками» или «Передатчиками». Когда «Мастер» принимает данные от «Слэйва» — он является «Приёмником», а «Слэйв» — «Передатчиком». Когда же «Слэйв» принимает данные от «Мастера», то он уже является «Приёмником», а «Мастер» в этом случае является «Передатчиком».
Не надо путать тип устройства «Мастер» со статусом «Передатчика». Несмотря на то, что при чтении «Мастером» информации из «Слэйва», последний выставляет данные на шину Data, делает он это только тогда, когда «Мастер» ему это разрешит, установкой соответствующего уровня на линии Clock. Так что, хотя «Слэйв» в этом случае и управляет шиной Data, — самим обменом всё равно управляет «Мастер».
В режиме ожидания (когда не идёт сеанс обмена данными) обе сигнальные линии (Data и Clock) находятся в состоянии высокого уровня (притянуты к питанию).
Каждый сеанс обмена начинается с подачи «Мастером» так называемого Start-условия. «Старт-условие» — это изменение уровня на линии Data с высокого на низкий при наличии высокого уровня на линии Clock.
После подачи «Старт-условия» первым делом «Мастер» должен сказать с кем он хочет пообщаться и указать, что именно он хочет — передавать данные в устройство или читать их из него. Для этого он выдаёт на шину 7-ми битный адрес «Слэйв» устройства (по другому говорят: «адресует «Слэйв» устройство»), с которым хочет общаться, и один бит, указывающий направление передачи данных (0 — если от «Мастера» к «Слэйву» и 1 — если от «Слэйва» к «Мастеру»). Первый байт после подачи «Старт»-условия всегда всеми «Слэйвами» воспринимается как адресация.
Поскольку направление передачи данных указывается при открытии сеанса вместе с адресацией устройства, то для того, чтобы изменить это направление, необходимо открывать ещё один сеанс (снова подавать «Старт»-условие, адресовать это же устройство и указывать новое направление передачи).
После того, как «Мастер» скажет, к кому именно он обращается и укажет направление передачи данных, — начинается собственно передача: «Мастер» выдаёт на шину данные для «Слэйва» или получает их от него. Эта часть обмена (какие именно данные и в каком порядке «Мастер» должен выдавать на шину, чтобы устройство его поняло и сделало то, что ему нужно) уже определяется каждым конкретным устройством.
Заканчивается каждый сеанс обмена подачей «Мастером» так называемого Stop-условия, которое заключается в изменении уровня на линии Data с низкого на высокий, опять же при наличии высокого уровня на линии Clock. Если на шине сформировано Stop-условие, то закрываются все открытые сеансы обмена.
Внутри сеанса любые изменения на линии Data при наличии высокого уровня на линии Clock запрещены, поскольку в это время происходит считывание данных «Приёмником». Если такие изменения произойдут, то они в любом случае будут восприняты либо как «Старт»-условие (что вызовет прекращение обмена данными), либо как «Стоп»-условие (что будет означать окончание текущего сеанса обмена). Соответственно, во время сеанса обмена установка данных «Передатчиком» (выставление нужного уровня на линии Data) может происходить
только при низком уровне на линии Clock.
Несколько слов по поводу того, в чём в данном случае разница между «прекращением обмена данными» и «окончанием сеанса обмена». В принципе «Мастеру» разрешается, не закрыв первый сеанс обмена, открыть ещё один или несколько сеансов обмена с этим же (например, как было сказано выше, для изменения направления передачи данных) или даже с другими «Слэйвами», подав новое «Старт»-условие без подачи «Стоп»-условия для закрытия предыдущего сеанса. Управлять линией Data, для того, чтобы отвечать «Мастеру», в этом случае будет разрешено тому устройству, к которому «Мастер» обратился последним, однако старый сеанс при этом нельзя считать законченным. И вот почему. Многие устройства (например те же eeprom-ки 24Схх) для ускорения работы складывают данные, полученные от «Мастера» в буфер, а разбираться с этими полученными данными начинают только после получения сигнала об окончании сеанса обмена (то есть «Стоп-условия»).
То есть, например, если на шине висит 2 микросхемы eeprom 24Cxx и вы открыли сеанс записи в одну микросхему и передали ей данные для записи, а потом, не закрывая этот первый сеанс, открыли новый сеанс для записи в другую микросхему, то реальная запись и в первую и во вторую микросхему произойдёт только после формирования на шине «Стоп-условия», которое закроет оба сеанса. После получения данных от «Мастера» eeprom-ка складывает их во внутренний буфер и ждёт окончания сеанса, для того, чтобы начать собственно процесс записи из своего внутреннего буфера непосредственно в eeprom. То есть, если вы после после передачи данных для записи в первую микруху не закрыли этот сеанс, открыли второй сеанс и отправили данные для записи во вторую микруху, а потом, не сформировав «Стоп-условие», выключили питание, то реально данные не запишутся ни в первую микросхему, ни во вторую. Или, например, если вы пишете данные попеременно в две микрухи, то в принципе вы можете открыть один сеанс для записи в первую, потом другой сеанс для записи во вторую, потом третий сеанс для записи опять в первую и т.д., но если вы не будете закрывать эти сеансы, то в конце концов это приведёт к переполнению внутренних буферов и в итоге к потере данных.
Здесь можно привести такую аналогию: ученики в классе («слэйвы») и учитель («мастер»). Допустим учитель вызвал какого-то ученика (пусть будет Вася) к доске и попросил его решить какой-то пример. После того как Вася этот пример решил, учитель вызвал к доске Петю и начал спрашивать у него домашнее задание, но Васю на место не отпустил. Вот в этом случае вроде бы разговор с Васей закончен, — учитель разговаривает с Петей, но Вася стоит у доски и не может спокойно заниматься своими делами (сеанс общения с ним не закрыт).
В случае, если «Слэйв» во время сеанса обмена не успевает обрабатывать данные, — он может растягивать процесс обмена, удерживая линию Clock в состоянии низкого уровня, поэтому «Мастер» должен проверять возврат линии Clock к высокому уровню после того, как он её отпустит. Хотелось бы подчеркнуть, что не стоит путать состояние, когда «Слэйв» не успевает принимать или посылать данные, с состоянием, когда он просто занят обработкой данных, полученных в результате сеанса обмена. В первом случае (во время обмена данными) он может растягивать обмен, удерживая линию Clock, а во втором случае (когда сеанс обмена с ним закончен) он никакие линии трогать не имеет права. В последнем случае он просто не будет отвечать на «обращение» к нему от «Мастера».
Внутри сеанса передача состоит из пакетов по девять бит, передаваемых в обычной положительной логике (то есть высокий уровень — это 1, а низкий уровень — это 0). Из них 8 бит передаёт «Передатчик» «Приёмнику», а последний девятый бит передаёт «Приёмник» «Передатчику». Биты в пакете передаются старшим битом вперёд. Последний, девятый бит называется битом подтверждения ACK (от английского слова acknowledge — подтверждение). Он передаётся в инвертированном виде, то есть 0 на линии соответствует наличию бита подтверждения, а 1 — его отсутствию. Бит подтверждения может сигнализировать как об отсутствии или занятости устройства (если он не установился при адресации), так и о том, что «Приёмник» хочет закончить передачу или о том, что команда, посланная «Мастером», не выполнена.
Каждый бит передаётся за один такт. Та половина такта, во время которой на линии Clock установлен низкий уровень, используется для установки бита данных на шину передающим абонентом (если предыдущий бит передавал другой абонент, то он в это время должен отпустить шину данных). Та половина такта, во время которой на линии Clock установлен высокий уровень, используется принимающим абонентом для считывания установленного значения бита с шины данных.
Вот собственно и всё. На рисунках ниже всё это описание показано в графической форме.
3) Диаграммы и тайминги.
Параметр | Обозн. | Мин.знач. | Комментарий |
Свободная шина | tBUF | 4,7 мкс | это минимальное время, в течении которого обе линии должны находиться в свободном состоянии перед подачей «Старт»-условия |
Фиксация «Старт»- условия | tHD;STA | 4,0 мкс | минимальное время от подачи «Старт»- условия до начала первого такта передачи |
Готовность «Стоп»- условия | tSU;STO | 4,0 мкс | минимальное время, через которое можно подавать «Стоп»- условие после освобождения шины Clock |
Длительность LOW полупер.![]() | tLOW | 4,7 мкс | минимальная длительность полупериода установки данных (когда на шине Clock низкий уровень) |
Длительность HIGH полупер. шины Clock | tHIGH | 4,0 мкс | минимальная длительность полупериода считывания данных (когда на шине Clock высокий уровень) |
Удержание данных | tHD;DAT | 0 | то есть данные на шину Data можно выставлять сразу после спада на линии Clock |
Готовность данных | tSU;DAT | 250 нс | то есть поднимать уровень на шине Clock можно не ранее 250 нс после установки данных на шине Data |
Минимальные значения времени в таблице указаны для максимальной скорости передачи 100 кбит/с.
Программная реализация мастер-абонента шины I2C в режиме single-master, библиотеки процедур: для PIC, для AVR
Программа для устройства копирования микросхем памяти 24Cxx (здесь можно посмотреть пример использования приведённых выше библиотек для реализации режима I2C-Master на PIC-контроллере)
Программа 2 для контроллера I2C-шлюза, режим Slave из терминалки ПК (а тут посмотреть пример того, как можно сделать I2C-Slave на контроллере AVR)
I2C [Амперка / Вики]
Шина I2C позволяет микроконтроллеру взаимодействовать с различными устройствами, такими как гироскопы, акселерометры, датчики давления, EEPROM-память, дисплеи.
Объекты из класса уже созданы и для начала работы с ними, достаточно выполнить метод I2Cn.setup
, подставив вместо n
— номер шины. К шине I2C1
, если она выведена на отдельные контакты, вы можете обращаться как к PrimaryI2C
.
Типовой сценарий использования таков:
// Настройка интерфейса // (необязательна при использовании выделенных I2C) I2C2.setup({sda: P0, scl: P1, bitrate: 400000}); // Передача пакета данных I2C2.writeTo(0x28, [0xFF, 0x30]); // Приём данных var myTwoBytes = I2C2.readFrom(0x28, 2);
Реализация поддерживает только I²C в режиме ведущего устройства.
Методы
Статический метод возвращает экземпляр интерфейса I2C
, который может работать с пином pin
(например, I2C1
).
Возвращает undefined
, если на пине не поддерживается I²C.
I2C.readFrom(address, quantity)
Запрашивает quantity
байт от ведомого устройства с адресом address
. Посылает STOP-сигнал на шину I²C по завершению. Возвращает полученные данные в виде буфера
Uint8Array
.
Адрес устройства должен быть 7-битным числом или объектом вида {address: 12, stop: false}
. В последнем случае в конце запроса не будет послан сигнал STOP.
Настраивает I²C-интерфейс на работу с заданными пинами и на заданной скорости.
В качестве options
ожидается объект вида {sda: pin, scl: pin, bitrate: 100000}
, где sda
и scl
— пины с соответствующими функциями, bitrate
— скорость передачи.
Если sda
или scl
не заданы, в качестве значений используются пины по умолчанию для данного I²C-интерфейса.
Если не задан bitrate
, используется значение по умолчанию 50000 (50 кГц). Обратите внимание: 400 кГц — максимум для большинства периферии.
Если options
не передан вовсе, используются умолчания для всех значений.
Вызов I2C.setup
необходим для правильной настройки режима работы пинов интерфейса. Однако для экземпляра PrimaryI2C
вызов не обязателен: он настраивается автоматически при старте микроконтроллера.
I2C.writeTo(address, data, …)
Передаёт данные ведомому I²C-устройству с адресом address
. Посылает STOP-сигнал на шину после завершения.
В качестве data, …
ожидается один или более элемент для передачи. Элементами могут быть целые числа, строки, массивы.
Адрес устройства должен быть 7-битным числом или объектом вида {address: 12, stop: false}
. В последнем случае в конце запроса не будет послан сигнал STOP.
Декодирование и анализ сигналов шин I2C, SPI, RS-232C, RS-422, RS-485 и UART с использованием осциллографов LeCroy
Декодирование и анализ сигналов шин I2C, SPI, RS-232C, RS-422, RS-485 и UART с использованием осциллографов LeCroy
Декодирование и анализ сигналов шин I2C, SPI, RS-232C, RS-422, RS-485 и UART с использованием осциллографов LeCroyА. |
Часть 1: I2C
Шина межмикросхемного управления Inter-Integrated Circuit (или имеющая альтернативные обозначения IIC, I2C или будем дальше упрощенно ее именовать I2C) была разработана в начале 80-х годов компанией Philips для межмикросхемного управления в блоках телевизоров с целью наращивания возможностей телевизионных приемников с одновременным сокращением числа печатных проводников на платах, соединяющих между собой все растущее число ИМС. Задачей появления шины I2C являлось перейти от параллельной передачи данных, неизбежно имеющей число проводников равное разрядности шины, что значительно затрудняло разводку печатных плат и создавало массу других проблем, к последовательной передаче данных по трем проводам. Интерес у разработчиков и конструкторов различного рода радиоэлектронных устройств к шине I2C не ослабевал все эти годы, но отмена с 1 октября 2006 года компанией Philips отчислений за использование протокола I2C вызвало оживление интереса и дало новый толчок к все более широкому использованию шины I2C в различного рода электронных устройствах, не связанных с телевизионным приемом. В настоящее время шина I2C широко используется в микросхемах памяти, видеопроцессорах, модулей обработки аудио- и видео-сигналов, АЦП и ЦАП, драйверах ЖК-индикаторов, телефонах, кодеках и многих других устройствах. «Второе» и тем более такое бурное «рождение» шины I2C не могло не остаться незамеченным производителями средств визуальной диагностики – производителями цифровых осциллографов. Долгие годы инженеры и разработчики, при разработке и отладке устройств использующих протокол I2C, применяли программно-аппаратные средства, если и позволяющие производить декодирование протокола I2C, то абсолютно не приспособленные для анализа этих сигналов на физическом уровне, то есть с визуальным просмотром процессов происходящих на шине, с одновременным декодированием протокола. Эти проблемы полностью решает современный цифровой осциллограф, имеющий возможность декодирования протоколов I2C. К числу таких осциллографов можно отнести осциллографы LeCroy серии WaveSurfer Xs, WaveRunner, WavePro и WaveMaster.
Для того, что бы разобраться в особенностях декодирования и анализа шины I2C кратко обратимся к структуре шины I2C.
В стандартном режиме шина I2C обеспечивает передачу последовательных 8-битных данных со скоростью до 100 кбит/с, до 400 кбит/с в скоростном режиме или со скоростью 3,4 Мбит/с в высокоскоростном режим работы. Для осуществления процесса обмена информацией по I2C шине, используется всего два сигнала линия данных SDA линия синхронизации SCL. Для обеспечения реализации двунаправленности шины без применения сложных арбитров шины выходные каскады устройств, подключенных к шине, имеют открытый сток или открытый коллектор для обеспечения функции монтажного «И». Максимальное допустимое количество микросхем, подсоединённых к одной шине, ограничивается максимальной емкостью шины 400 пФ. На рисунке представлен принцип подключения нескольких ИМС к одной шине обмена.
Рисунок 1 |
Каждое устройство на шине I2C распознается по уникальному адресу и может работать как передатчик или приёмник, в зависимости от назначения устройства.
Кроме того, устройства могут быть классифицированы как ведущие и ведомые при передаче данных. Ведущий — это устройство, которое инициирует передачу данных и вырабатывает сигналы синхронизации. При этом любое адресуемое устройство считается ведомым по отношению к ведущему.
Процедура синхронизации двух устройств. Эта процедура основана на том, что все I2C-устройства подключаются к шине по правилу монтажного «И». В исходном состоянии оба сигнала SDA и SCL находятся в высоком состоянии.
Состояние СТАРТ и СТОП. Процедура обмена начинается с того, что ведущий формирует состояние СТАРТ — ведущий генерирует переход сигнала линии SDA из ВЫСОКОГО состояния в НИЗКОЕ при ВЫСОКОМ уровне на линии SCL. Этот переход воспринимается всеми устройствами, п
% PDF-1.5
%
2983 0 объект
>
endobj
xref
2983 107
0000000016 00000 н.
0000003085 00000 н.
0000003271 00000 н.
0000003401 00000 п.
0000003438 00000 п.
0000003820 00000 н. 0000003952 00000 н.
0000004097 00000 н.
0000004201 00000 п.
0000004240 00000 н.
0000004319 00000 н.
0000004397 00000 н.
0000005683 00000 п.
0000006616 00000 н.
0000007194 00000 н.
0000007807 00000 н.
0000008039 00000 н.
0000008265 00000 н.
0000009411 00000 н.
0000010783 00000 п.
0000012105 00000 п.
0000013398 00000 п.
0000014335 00000 п.
0000015080 00000 п.
0000017773 00000 п.
0000020934 00000 п.
0000020975 00000 п.
0000021035 00000 п.
0000021143 00000 п.
0000021279 00000 п.
0000021449 00000 п.
0000021581 00000 п.
0000021697 00000 п.
0000021875 00000 п.
0000022039 00000 п.
0000022261 00000 п.
0000022449 00000 п.
0000022557 00000 п.
0000022717 00000 п.
0000022949 00000 п.
0000023119 00000 п.
0000023284 00000 п.
0000023490 00000 п.
0000023646 00000 п.
0000023794 00000 п.
0000023918 00000 п.
0000024100 00000 п.
0000024228 00000 п.
0000024412 00000 п.
0000024546 00000 п.
0000024746 00000 п.
0000024882 00000 п.
0000025068 00000 п.
0000025202 00000 п.
0000025364 00000 п.
0000025532 00000 п.
0000025660 00000 п.
0000025782 00000 п.
0000025906 00000 п.
0000026040 00000 п.
0000026180 00000 п.
0000026316 00000 п.
0000026500 00000 п.
0000026638 00000 п.
0000026834 00000 п.
0000026980 00000 п.
0000027132 00000 п.
0000027280 00000 п.
0000027526 00000 п.
0000027734 00000 п.
0000027942 00000 н.
0000028202 00000 п.
0000028472 00000 п.
0000028688 00000 п.
0000028878 00000 п.
0000029126 00000 п.
0000029302 00000 п.
0000029492 00000 п.
0000029704 00000 п.
0000029882 00000 п.
0000030056 00000 п.
0000030306 00000 п.
0000030514 00000 п.
0000030696 00000 п.
0000030884 00000 п.
0000031130 00000 п.
0000031262 00000 п.
0000031404 00000 п.
0000031552 00000 п.
0000031710 00000 п.
0000031888 00000 п.
0000032050 00000 п.
0000032158 00000 п.
0000032442 00000 п.
0000032546 00000 п.
0000032816 00000 п.
0000032942 00000 п.
0000033202 00000 п.
0000033316 00000 п.
0000033570 00000 п.
0000033694 00000 п.
0000033970 00000 п.
0000034098 00000 п.
0000034372 00000 п.
0000034496 00000 п.
0000034640 00000 п.
0000002436 00000 н.
трейлер
] / Назад 2062541 >>
startxref
0
%% EOF
3089 0 объект
> поток
hb«a`c`c` ʀ
Эмуляция протокола I2C на C #
Введение
В этой статье мы описываем, как протокол I 2 C может быть смоделирован в приложении Visual Studio C #.I 2 C — широко используемый протокол связи нижнего уровня для устройств. Различные компьютерные периферийные устройства соответствуют протоколам I 2 C, например: устройства памяти, КПК, сотовые телефоны и т. Д. Обычно для доступа к этим периферийным устройствам компьютерам требуется дополнительный микроконтроллер / микропроцессор. Это значительно увеличивает стоимость устройства. В этой статье представлено возможное решение этой проблемы; в нем описывается, как приложение C #, работающее в ОС Windows®, может получить доступ к периферийному устройству I 2 C.
Фон
Периферийный интерфейс I 2 C был изобретен Philips Electronics NV. Этот протокол широко используется для связи процессоров с устройствами памяти, КПК, сотовыми телефонами и т. Д.
И C # — мощный язык, поддерживаемый Microsoft Visual Studio; C # — это своего рода язык, который предоставляет программисту универсальные возможности, унаследованные как от Java, так и от C ++. Из-за эволюции C # возникли споры о том, что это прямая пародия на Java, но такие функции, как LINQ и безопасное переключение на указатели, доказывают, что C # более продвинутый по сравнению с его аналогами.Приложения, построенные на C #, одинаково эффективны в процессе сбора данных, как MATLAB и Labview. В C # нам не нужны какие-либо дополнительные функции, такие как объекты ActiveX или mscomm, как в VB6 или VC ++ 6.0. SerialPort
класса в C # достаточно для поддержки простого оборудования с различными скоростями передачи.
Обычно приложение C # взаимодействует с I 2 C с помощью микроконтроллера моста. Схема связи этого типа показана на рис. 1.
Рис. 1. Обычно используется схема для связи с устройством I 2 C через приложение C #.
У этой схемы есть определенные недостатки, и мы собираемся обсудить эти недостатки в следующем разделе.
Недостатки косвенной связи
Схема (изображенная на рисунке 1) имеет следующие недостатки:
D м = d 1 + d 2 ……………………. (1)
Эта задержка будет значительной в приложениях, требующих быстрого сбора данных (всегда желательно иметь меньшую задержку).Обычное значение d 1 = 20 мс (при 9600 бод).
- Как мы можем заметить, существует двухэтапная коммуникация; первое приложение связывается с микроконтроллером, затем оно связывается с устройством I 2 C. Пусть d 1 и d 2 будут задержками, задействованными на этих этапах, соответственно. Общая задержка в процессе связи будет:
- Во-вторых, стоимость микроконтроллера также является нежелательным фактором при производстве периферийных устройств.
Микроконтроллеры (имеющие RS232, а также I 2 C) доступны по разным ценам (обычно от 9 до 30 долларов). А дорогостоящий микроконтроллер может существенно увеличить конечную стоимость прототипа.
Несомненно, исключение микроконтроллеров из схемы (показанной на рисунке 1) было бы выгодно с точки зрения небольшого времени обработки, а также с точки зрения снижения стоимости конечного устройства.
Эмуляция как возможное решение
Поскольку в C # программист оснащен классом SerialPort
(этот класс содержит множество методов для отправки и получения), последовательный порт представляет собой простой интерфейс для приложений, созданных на C #, для связи с внешним миром.К этим контактам последовательного порта можно получить прямой доступ из приложения. Эти контакты: RTS, DTR и CTS (см. Рисунок 2). RTS и DTR являются выходными выводами, то есть программное приложение C # может записывать эти выводы с логическим значением, которое ему нужно. Хотя CTS является входным контактом, программное приложение может считывать логическое значение с этого контакта.
Можно ли с помощью этих выводов эмулировать протокол I 2 C? Конечно да. Фактически, устройства I 2 C взаимодействуют с микроконтроллером с двумя контактами, SCL и SDA.Показан образец устройства I 2 C (на рисунке 3). Если мы обратимся к уровням земли, порт RS232 ПК и устройства I 2 C одинаковы, и мы следуем соединениям, приведенным в таблице 1, I 2 C можно легко эмулировать, отображая микроконтроллер схемы (показанной на рисунке 1) как избыточный. Это может показаться странным, но приложение может немного писать для вывода SDA; одновременно с этим приложение может считывать битовое значение из SDA с помощью CTS. Единственная сложность — реализовать весь протокол I 2 C в коде C #.Когда необходимая библиотека кода готова, программисты на C # могут без проблем выполнять такие операции, как сбор данных (I 2 C сенсорных микросхем, таких как DS1621), доступ к памяти, связь с мобильными телефонами и т. д. Более того, в микроконтроллерах не будет перегруженности программированием прошивки.
Рис.2: Распиновка RS 232 DB9
Рис. 3. Распиновка DS1621 (устройство I 2 C)
I 2 C Краткий обзор протокола
Рис. 4: Временная диаграмма шины I2C (увеличьте масштаб, чтобы лучше рассмотреть)
I 2 C — двунаправленная 2-проводная шина.Устройство, которое отправляет данные, идентифицируется как передатчик, а устройство, получающее данные, идентифицируется как получатель. За генерацию SCL (тактового сигнала) отвечает ведущее устройство. Обычно соединения между этими устройствами (линии SDA и SCL) выполняются через двунаправленные линии с открытым стоком. Был определен следующий протокол шины (см. Рисунок 4):
- Данные инициируются, когда шина свободна.
- Линия данных (SDA) должна оставаться стабильной, когда линия синхронизации (SCL) находится на высоком уровне.
В случае перехода в SDA при высоком уровне вероятности нежелательной почты это будет интерпретироваться как управляющий сигнал.
Важные условия автобуса:
- Когда уровень SCL и SDA высокий, шина находится в режиме ожидания.
- Переход SDA с высокого уровня на низкий
Эффективная разработка SCL в TIA Portal V14
В недавнем выпуске TIA Portal V14 и V14 SP1 было добавлено несколько новых дополнений для повышения эффективности и организации кода, написанного на SCL (язык структурированного управления).
Недавно я использовал многие из этих новых функций при написании кода на SCL и хотел поделиться ими с вами. Мы начнем с определения SCL и его использования в программировании, затем сравним лестничную диаграмму с SCL, затем обсудим встроенные сети SCL, регионы и синхронизацию регионов и закончим обзором оптимизированного Surround With …
Что такое SCL и когда мне следует программировать с его помощью?
SCL означает Structured Control Language и представляет собой текстовую форму программирования ПЛК Siemens .
SCL открывает несколько новых конструкций, которые недоступны при программировании с использованием традиционной релейной логики, включая циклы FOR и WHILE , а также оператор CASE . Они особенно полезны при работе с большими объемами данных в форме массива. Использование SCL также увеличивает удобочитаемость любых арифметических вычислений.
Как выглядит SCL?
Ниже приведен пример кода, написанного как на релейной диаграмме, так и на SCL для достижения одного и того же результата.
Релейная логика
Я создал массив из пяти целых чисел и хотел бы проверить, равны ли какие-либо индексы моего массива трем. Чтобы получить эту информацию за одно сканирование моей логики в Ladder , мне нужно будет проверить каждый индекс индивидуально, чтобы определить, равен ли какой-либо из них 3.
Для небольшого массива написание этого кода в релейной логике не так уж и плохо. Однако представьте, что у меня есть массив из сотни или даже тысячи целых чисел, и мне нужно проверить их все.
SCL
При изучении логики SCL неожиданно решение релейной логики кажется неэффективным по сравнению. Используя комбинацию цикла FOR , оператора IF и EXIT , я могу легко проверить массив любого размера за одно сканирование.
Если требовалось мое приложение, я мог бы даже вложить циклы FOR друг в друга, чтобы проверять или устанавливать значения UDT, который содержит массив переменных.
Встроенные сети SCL
В TIA Portal V14 теперь есть возможность создавать функциональных блоков и вызовов функций , которые содержат код, написанный как на LAD, так и на SCL. Сеть SCL может быть легко вставлена в функцию без необходимости создания отдельной функции SCL.
Например, ранее было необходимо использовать математические операции LAD или отдельную функцию SCL для объединения сложных вычислений, которые теперь можно легко записать в сети SCL.
Регионы
- Регионы — это новый организационный инструмент SCL, который обеспечивает такой же уровень организации, как сеть в функции LAD.
- Области складываются, и их легко перемещать с помощью боковой панели.
- При необходимости регионы могут быть вложены друг в друга для обеспечения еще более высокого уровня организации.
- Имейте в виду, что регионы не могут пересекать логические границы.Например, если регион начинается внутри одного case оператора case, он также должен заканчиваться в том же регистре. Несоблюдение этого правила приведет к ошибке компилятора.
- Области делают строки комментариев, которые служат только в качестве разделителя для нового раздела кода, ненужного.
ДО
ПОСЛЕ
Синхронизация регионов
- Навигация на боковой панели, которая показывает регионы в функции вероятности нежелательной почты (SCL), также может быть настроена на синхронизацию с кодом.
Это означает, что при расширении или сжатии области на боковой панели основная часть кода отразит изменение.
- При включенной синхронизации большие объемы кода SCL можно легко минимизировать или максимизировать без интенсивного использования колеса прокрутки, чтобы найти, где начинается область.
- Имейте в виду, что логические утверждения, такие как IF … THEN …, также могут быть расширены или сжаты, но не синхронизированы с областью, в которой они находятся.
СИНХРОНИЗИРОВАННЫЙ, СВОБОДНЫЙ
СИНХРОНИЗИРОВАННЫЕ, ВСЕ РАСШИРЕННЫЕ (ВЛОЖЕННЫЕ РЕГИОНЫ)
Объемный звук с
Начиная с версии V14 SP1, возможность добавления логических операторов, областей и комментариев к существующему коду была значительно упрощена с добавлением опции «Окружить с помощью…» .
Просто выделите фрагмент кода, щелкните его правой кнопкой мыши и выберите то, что вы хотите окружить . Это особенно полезно для быстрого добавления областей в код, написанный ранее для V14, или для быстрого комментирования фрагментов кода во время отладки.
Надеюсь, некоторые из этих советов позволят вам создать более эффективный код ПЛК и в то же время увеличить скорость разработки.
Если вам нужен опыт DMC, воспользуйтесь нашими услугами по программированию ПЛК Siemens или свяжитесь с нами, чтобы начать работу над проектом сегодня.
Компьютер сдал IELTS
Мы постоянно совершенствуем IELTS — самый популярный в мире тест по английскому языку для получения высшего образования и глобальной миграции — чтобы улучшить опыт IELTS для наших тестируемых и заинтересованных лиц.
IELTS Academic and General Training предоставляет больше возможностей для участников тестирования и заинтересованных сторон, сохраняя при этом всю текущую безопасность, доверие и целостность теста.
С компьютерным IELTS доступно больше дат тестирования, участники тестирования могут выбрать IELTS в удобное для них время, и они получат свои результаты через 3-5 дней.
Форма отчета о тестировании, содержание, время и структура теста одинаковы, независимо от того, проходите ли вы тест на бумаге или на компьютере, а тест Speaking всегда проводится лицом к лицу с сертифицированным экзаменатором IELTS.
Если вы выберете компьютерный IELTS, вы будете проходить тест на аудирование, чтение и письмо с помощью компьютера. Все аспекты теста идентичны бумажному IELTS, в том числе:
- Типы вопросов
- Содержимое
- Время *
- Маркировка
- Перед началом каждой части теста на аудирование у вас будет время, чтобы прочитать вопросы.
- После окончания каждой части теста на аудирование у вас будет время, чтобы просмотреть свои ответы.
- По окончании теста на аудирование у вас будет 2 минуты, чтобы проверить свои ответы.
Подробнее о формате теста IELTS читайте здесь.
Что нужно знать о компьютерном IELTS
Часто задаваемые вопросы
Важно выбрать правильный вариант, чтобы при прохождении теста вы чувствовали себя комфортно и уверенно. Вам необходимо решить, предпочитаете ли вы читать тексты и записывать ответы на компьютере или на бумаге.
Как выбрать свой вариант и подготовиться к тесту:
Примеры вопросов теста помогут вам решить, какой вариант вы предпочитаете, и подготовиться к тесту. Эти образцы материалов дадут вам представление о том, чего ожидать в разделах «Аудирование», «Чтение» и «Письмо».
Компьютерный IELTS в настоящее время доступен на:
- Аргентина (Буэнос-Айрес)
- Армения (Ереван)
- Австралия (Аделаида, Брисбен, Мельбурн, Перт, Сидней, Вуллонгонг)
- Австрия
- Азербайджан (Баку)
- Бахрейн (Манама)
- Бангладеш (Дакка)
- Беларусь
- Бразилия (Бразилиа, Куритиба, Рио-де-Жанейро, Сан-Паулу)
- Болгария
- Камбоджа (Пномпень)
- Канада (Калгари, Галифакс, Миссиссауга, Монреаль, Оттава, Скарборо, Торонто, Виннипег)
- Чили (Сантьяго)
- Колумбия (Богота, Медельин)
- Хорватия (Загреб)
- Китай (Гуанчжоу, Пекин, Шанхай, Чунцин)
- Кипр (Никосия)
- Чешская Республика
- Дания
- Египет (Каир, Александрия)
- Эстония
- Финляндия
- Франция (Париж)
- Германия
- Гана (Аккра)
- Греция (Афины)
- Гонконг (Макао, Гонконг)
- Венгрия
- Индия (Ахмадабад, Амритсар, Батинда, Бангалор, Бангалор, Чандигарх, Ченнаи, Дели, Хайдарабад, Джаландхар, Лудхиана, Мумбаи, Нойда, Пуна)
- Индонезия (Бали, Джакарта, Сурабая)
- Ирландия (Дублин)
- Израиль (Тель-Авив)
- Италия (Бари, Милан, Салерно, Рим)
- Япония (Токио)
- Иордания (Амман)
- Казахстан (Алматы, Астана)
- Кения (Найроби)
- Кувейт (Салмия, Сафат)
- Лаос (Вьентьян)
- Латвия
- Ливан (Бейрут)
- Литва
- Малайзия (Куала-Лумпур, Пенанг)
- Мексика (Мехико, Кондеса, Койоакан, Сателит, Гвадалахара, Монтеррей, Керетаро)
- Мьянма (Янгон)
- Непал (Катманду)
- Нидерланды
- Новая Зеландия (Окленд, Веллингтон)
- Нигерия (Лагос)
- Северная Македония (Скопье)
- Норвегия
- Оман (Маскат)
- Пакистан (Исламбад, Карачи, Лахор)
- Перу (Лима)
- Филиппины (Манила, Себу, Багио)
- Польша (Варшава)
- Португалия (Лиссабон)
- Катар (Доха)
- Румыния (Бухарест)
- Россия (Москва, Санкт-Петербург)
- Саудовская Аравия (Эль-Хобар, Эр-Рияд, Даммам, Джидда)
- Сербия (Белград)
- Сингапур (Сингапур)
- Словакия
- Словения
- ЮАР (Йоханнесбург, Претория)
- Южная Корея (Сеул)
- Испания (Барселона, Бильбао, Мадрид)
- Шри-Ланка (Коломбо, Канди)
- Швеция (Гётеборг, Мальмё)
- Швейцария (Берн, Женева, Лозанна, Лугано, Сен-Галлен, Винтертур, Цюрих)
- Тайвань, Китай (Гаосюн, Тайбэй, Тайчжун, Таоюань, Нью-Тайбэй, Синьчжу)
- Таиланд (Бангкок)
- Турция (Анкара, Эрзурум, Стамбул)
- Вьетнам (Ханой, Хошимин)
- Украина (Киев)
- Объединенные Арабские Эмираты (Абу-Даби, Дубай, Шарджа)
- Соединенное Королевство
- Соединенные Штаты Америки (Нью-Джерси)
- Узбекистан (Ташкент)
Записаться на тест IELTS
Компьютерные видеоуроки по IELTS
Эти видеоролики помогут вам понять, как разделы «Аудирование», «Чтение» и «Письмо» отображаются на компьютере, а также покажут, как использовать опцию справки, делать заметки или выделять текст во время теста.