Шина данных в avr

Цель работы – изучение приема и передачи информации по последовательному каналу I2C (Integrated Circuit) и программирование ввода;вывода.

Двухпроводный последовательный интерфейс I2C и подобные ему (Two-wire Serial Interface, TWI) обеспечивают взаимодействие МК с множеством микросхем (энергонезависимой памятью, контроллерами параллельных портов, LCD-дисплеями, микроконтроллерами и различными специализированными устройствами).

Шина данных в avr

Рис. 5.11. Схема соединения устройств по интерфейсу I2C

Данный интерфейс позволяет объединить до 128 устройств по схеме, приведенной на рис. 5.11.

Интерфейс представляет собой две линии: одна (SDA) используется для передачи данных, другая (SCL) – для тактовых сигналов. Через резисторы R1, R2 обе линии подключены к источнику питания VCC. Выходы устройств выполнены по схеме с открытым коллектором (стоком), что позволяет реализовать функцию «монтажное И» для выходных сигналов. Низкий уровень сигнала логического О на выходе любого из устройств устанавливает низкий уровень на всей линии. Высокий уровень на линии устанавливается, когда выводы всех устройств находятся в третьем (высокоим- педансном) состоянии.

Устройство, подключенное к шине, может иметь статус ведущего (master) или ведомого (slave). Статус микроконтроллера устанавливается программно.

Протоколом работы шины предусмотрены:

• посылка ведущим устройством стартового бита начала обмена;

• передача последовательности из семи разрядов адреса ведомого устройства;

• транзакция чтения или записи 8-битовых данных;

• получение ведущим устройством битов подтверждения передачи адреса и данных;

• формирование бита подтверждения после приема данных;

• посылка ведущим устройством стопового бита.

Шина I2C (TWI) является последовательной: все данные и адреса передаются по линии SDA поразрядно. Каждый передаваемый бит сопровождается тактовым сигналом на линии SCL. В течение всего времени действия сигнала SCL (SCL = 1) состояние линии SDA должно оставаться неизменным. Изменение данных на линии SDA происходит при отсутствии тактового сигнала на линии SCL (SCL = 0). Исключение составляют стартовый и стоповый

Шина данных в avr

Рис. 5.12. Временные диаграммы сигналов интерфейса I2C

биты, определяющие начало и конец обмена. Стартовый бит формируется путем изменения уровня сигнала на линии SDA с 1 на О при SCL = 1, стоповый бит – при изменении сигнала SDA с О на 1 также при SCL = 1. Диаграмма изменения состояний линий интерфейса приведена на рис. 5.12.

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

Протокол обмена по шине предполагает передачу двух типов кадров (пакетов): с адресом и данными (рис. 5.13).

Кадр 7-разрядного адреса содержит:

А – 7-разрядный адрес ведомого устройства, передаваемый ведущим, начиная со старшего разряда;

R;W – управляющий бит, определяющий тип транзакции на шине (R;W = О – запись, R;W = 1 – чтение);

Адрес, передаваемый ведущим устройством после захвата шины, поступает ко всем устройствам, подключенным к ней. Каждое из устройств сравнивает поступающий адрес с собственным. При распознавании ведомым устройством своего адреса оно возвращает на линию SDA сигнал подтверждения АСК низкого уровня во время 9-го тактового сигнала SCL. Если по каким-либо причинам ведомое устройство не способно обслужить запрос ведущего, оно удерживает на линии SDA сигнал высокого уровня. Нулевой адрес используется для общего вызова всех устройств. Управляющий бит в этом случае устанавливается в О, чтобы обеспечить передачу одного и того же сообщения всем устройствам.

После передачи адреса начинается передача данных. Кадр байта данных (рис. 5.13, ^ содержит восемь битов данных и один бит

Шина данных в avr

Рис. 5.13. Формат кадра адреса Читайте также: Настройка датчика давления в шинах из китая

В микроконтроллерах AVR реализация протокола обмена может быть осуществлена двумя способами: программно или про- граммно-аппаратно. Программный способ реализуется с использованием библиотеки функций для формирования протоколов обмена. Этот способ применяется в микроконтроллерах, в которых отсутствуют встроенные аппаратные средства, реализующие протокол обмена. К ним относят микроконтроллеры семейств ATtiny и АТ90. Микроконтроллеры семейства ATmega (модели 8х, 16х, 32х, 323х, 64х, 128х, 163х) имеют в своем составе модуль обмена по интерфейсу TWI, что упрощает программирование ввода;вывода. Рассмотрим подробнее оба способа.

Программная реализация протокола I2C

Программная реализация протоколов I2C для разных случаев взаимодействия устройств представляет собой набор программ, эмулирующих работу ведущего и ведомых устройств с учетом функциональных требований. Наиболее сложным является случай, когда в качестве ведущего и ведомых выступают микроконтроллеры, которые могут быть как передатчиками, так и приемниками при обмене данными и не имеют встроенных средств обмена по I2C. Более простым считается случай, когда одно из устройств (микроконтроллер) является ведущим, а ведомые устройства содержат встроенный порт для обмена по I2C. Такие устройства (датчики, устройства памяти, часы реального времени и др.) широко выпускаются различными фирмами-производителями электронных компонентов и могут быть подключены к микроконтроллеру достаточно просто.

Решая общую задачу организации взаимодействия микроконтроллера с периферийными устройствами, рассмотрим необходимые механизмы программной реализации I2C. Это предполагает программную эмуляцию I2C, существенно упрощающую работу только со стороны ведущего микроконтроллера. Алгоритмы основных транзакций шины, записи и чтения, которые использованы при программировании, представлены на рис. 5.14, 5.15.

Процедура транзакции записи (передача адресного байта и запись байта данных) начинается с захвата линии SDA (SDA = 0) – формирования стартового бита – и установки флага С = 1, косвенно используемого для выявления признака окончания цикла передачи. Путем циклического сдвига влево байта данных первый передаваемый бит вытесняет 1 из флага С в младший разряд регистра данных. Это исключает возможность преждевременного выхода из цикла, когда в регистре данных во время передачи байта остаются нулевые биты. Линия SCL переводится в 0. Значение бита С используется для управления состоянием линии SDA. Если передаваемый бит, установленный в С, равен 1, линия SDA принимает значение SDA = 1, в противном случае SDA = 0. Далее спустя время задержки устанавливается линия SCL в 1 и после проверки, если ведомое устройство не тормозит работу на линии SCL, выполняется циклический переход для вывода следующего бита данных. На последующих итерациях цикла выполняется логический сдвиг. После выявления признака конца передачи, когда все биты регистра данных равны О, выполняется переход к процедуре проверки бита подтверждения.

Видео:Лекция 309. 1-wire интерфейсСкачать

Лекция 309.  1-wire интерфейс

Шина данных в avr

Рис. 5.14. Схема алгоритма записи байта данных

Получение бита подтверждения АСК начинается с захвата линии SCL (SCL = 0) и освобождения ведущим линии SDA (SDA = = 1). После временной паузы линия SCL переключается в состояние 1 и, если она свободна от влияния ведомых устройств, значение SDA считывается в качестве сигнала подтверждения АСК (установка или сброс бита С). После паузы на линии SCL устанавливается 0.

Шина данных в avr

Рис. 5.15. Схема алгоритма чтения байта данных

Процедура транзакции чтения (прием данных от ведомого) начинается с установки признака конца приема (1) в младший разряд регистра данных. Цикл чтения битов данных начинается с захвата линии SCL (SCL = 0), установки 1 на линии SCL, подтверждения высокого уровня сигнала SCL = 1 и последующего ввода бита данных в регистр данных путем опроса линии SDA и сдвига содержимого регистра данных. После очередной паузы выполняется проверка признака конца приема байта данных по значению флага С. Если не все биты получены (С = 0), прием продолжается. Если приняты все биты (С = 1), ведущее устройство переходит к формированию бита подтверждения приема АСК для ведомого устройства. При необходимости формирования бита АСК линия SDA устанавливается в О, линия SCL переводится в состояние 1. После подтверждения SCL = 1 и паузы линия SCL вновь возвращается в состояние 0. На этом чтение байта данных заканчивается.

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

Читайте также: Сравнительная таблица зимних нешипованных шин

SDA = SCL = 1 и последующих изменений согласно приведенным выше временным диаграммам. Используемые задержки времени (паузы) необходимы для обеспечения надежной передачи. Их устанавливают, согласно рекомендациям, на период и длительность сигнала SCL; время удержания неактивного состояния линий интерфейса; время, предшествующее повторному старту, и др.

Работу интерфейса I2C рассмотрим на примере обмена данными между микроконтроллером AT90S8515 и программируемым параллельным портом (ППП) РСА9554 фирмы Philips. Схема сопряжения микроконтроллера МК и параллельного порта ППП приведена на рис. 5.16.

Шина данных в avr

Рис. 5.16. Схема связи микроконтроллера с параллельным портом по интерфейсу I2C

Порт представляет собой микросхему, имеющую канал последовательной связи I2C, с одной стороны, и 8-разрядный параллельный канал ввода;вывода, с другой стороны. Разряды параллельного порта могут быть запрограммированы на ввод или вывод с помощью 8-разрядного управляющего слова, пересылаемого в регистр управления (конфигурации) порта. Для обращения к ППП в микроконтроллерной системе используется один из восьми адресов в диапазоне $40-$47. При этом три младших разряда определяют путем установки сигналов логического О и логической 1 на входах А2-А0. Для обращения к внутренним регистрам порта используется командный байт, значение которого определяет регистр и выполняемую операцию: О – чтение данных с входного регистра порта, 1 – запись данных в выходной регистр порта, 2 – изменение полярности сигналов, 3 – запись в регистр конфигурации (направления передачи). Обращение к порту содержит три посылки: первая служит для передачи адреса, вторая – команды, третья – данных. Обмен с портом выполняется по запросу прерывания, формируемому микросхемой ППП при изменении сигналов на входах порта. Для этого выход INT ППП подключен к входу INTO микроконтроллера (для AT90S8515 линия порта PD2).

Задание 1. Подготовить программу для исследования передачи и приема данных по последовательному каналу I2C, используя в качестве ведомого программируемый параллельный порт. Алгоритмом основной программы предусмотрена такая последовательность действий:

• инициализация порта микроконтроллера с линиями интерфейса;

• настройка системы прерываний микроконтроллера;

• настройка конфигурации ППП;

• вызов процедуры обмена с ППП;

• перевод микроконтроллера в режим пониженного энергопотребления и ожидания прерываний от ППП.

При поступлении запроса выполняются следующие действия:

• инициализация обмена с ППП;

• формирование состояния Start и посылка адреса;

• запись в ППП команды ввода ($00);

• изменение направления обмена;

• формирование состояния Stop;

• формирование состояния Start и посылка адреса;

• обратная пересылка данных в ППП;

• формирование состояния Stop и выход из прерывания.

Далее приведен текст программы на языке Ассемблер для обмена с ППП с включенными процедурами обмена ведущего микроконтроллера по интерфейсу I2C. При программировании протокола I2C ведущего микроконтроллера за основу взята бета-версия 1.0 программы из библиотеки AVR Studio. В программе используются две библиотечные функции задержки: i2c_hp_delay минимум на 5 мкс и i2c_qp_delay минимум на 2,5 мкс.

;Тестовая программа 5.5 для работы с программируемым ;параллельным портом по интерфейсу I2C. Для ввода и вывода ;данных используются по четыре вывода порта. При изменении ;сигналов на входах порта на линии INTO вырабатывается ;запрос прерывания низкого уровня. По прерыванию происходит ;запись входных значений порта ППП и их передача на линии ;вывода.

rjmp RESET ;обработка сброса

rjmp UPDATE ;обработчик прерывания от ППП

.include «8515def.inc» ;файл определений AT90S8515

Видео:AVR 38# Последовательный интерфейс SPIСкачать

AVR 38# Последовательный интерфейс SPI

.def i2cdelay = rl6 ;счетчик цикла задержки

.def i2cadr = rl7 ;регистр адреса шины I2C

.def i2cdata = rl8 ;регистр данных шины I2C

Idi rl6,HIGH(RAMEND) ;установка out sph,rl6 ; указателя

Idi rl6,L0W(RAMEND) ; стека out spl,rl6 ; Инициализация интерфейса I2C

clr i2cdata ;очистка регистра данных

out DDRD,i2cdata Idi i2cdata,0x04 out PORTD,i2cdata ; Настройки микроконтроллера cli

Idi rl6,l«INT0 ;разрешение прерывания INTO

Idi rl6, (1«SE) I (0«ISC01) I (O«ISC0O)

rcall i2c_hp_delay ;пауза в ожидании

rcall i2c_hp_delay ; готовности всех устройств.

;rcall i2c_hp_delay ; подключенных к шине

; Настройка конфигурации микросхемы ППП

Idi i2cadr,$40+i2cwr ;посылка адреса ППП+записи rcall i2c_start ;генерация стартового бита

rcall i2c_write ;команда записи в порт конфигурации Idi i2cdata,$f0 ;старшие 4 бита – на ввод, rcall i2c_write ;младшие 4 бита – на вывод rcall i2c_stop ;генерация стопового бита

Читайте также: Шины в спасске пензенской области

rcall UPDATE ;ввод;вывод через ППП

loop: sleep ;переход в режим пониженного энергопотреблени пор

; Подпрограмма обработки прерывания от ППП UPDATE:

Idi i2cadr,$40+i2cwr ;посылка адреса ППП+записи rcall i2c_start Idi i2cdata,$00

rcall i2c_write ;команда чтения данных из порта Idi i2cadr,$40+i2crd ;изменение направления обмена rcall i2c_rep_start

set ;подтверждения после чтения

rcall i2c_read ;чтение данных

swap i2cdata ;обмен тетрадами

mov r20,i2cdata ;сохранение

rcall i2c_stop ;генерация стопового бита

Idi i2cadr,$40+i2cwr ;изменение направления обмена

rcall i2c_write ;команда вывода данных в порт

rcall i2c_write ;вывод данных

rcall i2c_stop ;генерация стопового бита

ИМПОРТИРОВАННЫЕ ПОДПРОГРАММЫ, ; используемые для работы ведущего МК по протоколу I2C

;Для коммуникации используются линии порта PD – PD6(SCL) и ;PD7(SDA).Управление выводами SDA, SCL с открытым стоком ;осуществляется путем начальной установки битов PORTx ;в О и в дальнейшем с помощью установки;сброса битов ;направления DDRx.

Основные функции: **** ;i2c_start – стартовая посылка, посылка адреса и ;направления,

Видео:Передача данных - шина SPIСкачать

Передача данных - шина SPI

;i2c_rep_start – посылка «повторного старта» (repeated ;start),

;i2c_write – передача байта, i2c_read – прием байта, ;i2c_stop – стоповая посылка

i2c_hp_delay: ;задержка (на 5 мкс минимум)

Idi i2cdelay,2 i2c_hp_delay_loop: dec i2cdelay brne i2c_hp_delay_loop ret

i2c_qp_delay: ;задержка (на 2,5 мкс минимум)

Idi i2cdelay,1 i 2 c_qp_de1a y_lо op: dec i2cdelay brne i2c_qp_delay_loop ret

;Функция повторного старта подготавливает шину I2C к ;формированию стартового бита

;За данной функцией должен следовать вызов i2c_start

sbi DDRD,SCLP ;захват линии SCL (выход SCL=0)

cbi DDRD,SDAP ;освобождение линии SDA

rcall i2c_hp_delay ;задержка

cbi DDRD,SCLP ;освобождение линии SCL (выход SC1=1)

rcall i2c_qp_delay ;задержка

;функция формирования стартового бита ;За данной функцией должен следовать вызов i2c_write

rcall i2c_qp_delay ;задержка

;Функция записи одного байта в ведомое устройство

;Также используется для передачи адреса

;За данной функцией должен следовать вызов i2c_get_ack

rol i2cdata ;сдвиг первого бита в С

rjmp i2c_write_first i2c_write_bit:

Isl i2cdata ;посылка следующего бита в С

breq i2c_get_ack ;переход, если передача завершена

; (регистр пуст) sbi DDRD,SCLP ;захват линии SCL

brcs i2c_write_high ;если бит установлен,

rjmp i2c_write_delay i2c_write_high:

cbi DDRD,SDAP ;освобождение линии SDA

rcall i2c_hp_delay ;задержка cbi DDRD,SCLP ;освобождение линии SCL

rcall i2c_hp_delay ;задержка i2c_write_check_wait:

sbis PIND,SCLP ;ожидание состояния SCL=1

rjmp i2c_write_check_wait rjmp i2c_write_bit

;Функция чтения подтверждения. Используется функцией ;i2c_write

sbi DDRD,SCLP ;захват линии SCL

cbi DDRD,SDAP ;освобождение линии SDA

Видео:AVR 46# I2CСкачать

AVR 46# I2C

rcall i2c_hp_delay ;задержка cbi DDRD,SCLP ;освобождение линии SCL

sbis PIND,SCLP ;ожидание высокого уровня SCL

rcall i2c_hp_delay ;задержка

sbi DDRD,SCLP ;захват линии SCL

;Функция чтения одного байта от ведомого в регистр ;i2c_data

;Значение флага С=1 используется как признак конца приема ;После данной функции должна следовать функция i2c_put_ack

;Загружаем $01 – это после приема данных приведет к ;установке флага С

Idi i2cdata,0x01 i2c_read_bit:

sbi DDRD,SCLP ;захват линии SCL

rcall i2c_hp_delay ;задержка

cbi DDRD,SCLP ;освобождение линии SCL i2c_read_check_wait:

sbis PIND,SCLP ;ожидание состояния SCL=1

rcall i2c_hp_delay ;задержка

rol i2cdata ;сохранение принятого бита

brcc i2c_read_bit ;прием закончен, когда флаг С=1

;Функция формирования подтверждения. Используется функцией ;i2c_read

;При значении флага Т=1 подтверждение не формируется, ;после чего обычно формируется стоповый бит ;При Т=0 формируется подтверждение приема

sbi DDRD,SCLP ;захват линии SCL

brtc i2c_put_ack_low ;если Т=0, формируем подтверждение cbi DDRD,SDAP ;освобождение линии SDA

rjmp i2c_put_ack_high i2c_put_ack_low:

rcall i2c_hp_delay ;задержка

cbi DDRD,SCLP ;освобождение линии SCL

sbis PIND,SCLP ;ожидание освобождения SCL

rcall i2c_hp_delay ;задержка

;Функция формирования стопового бита i2c_stop:

rcall i2c_hp_delay ;задержка

cbi DDRD,SCLP ;освобождение линии SCL

rcall i2c_qp_delay ;задержка

cbi DDRD,SDAP ;освобождение линии SDA

rcall i2c_hp_delay ;задержка

Создать проект в AVR Studio 4 и загрузить тестовую программу. Проверить работу МК в пошаговом режиме, наблюдая выходы

порта PD (PD6, PD7). Эмуляцию сигналов с порта ППП при чтении данных можно выполнить, устанавливая ручным способом биты данных на линии SDA (разряд PIND7). Чтобы ускорить прогон программы, рекомендуется перед компиляцией закомментировать строки программы с проверкой состояния линии SCL.

Создать проект устройства, используя схему рис. 5.16, для проверки работы канала I2C с помощью программы ISIS 6 Professional из пакета Proteus 6 Professional фирмы Labcenter Electronic. Проверить работу устройства в пошаговом режиме.

Видео:AVR 47# Программный I2CСкачать

AVR 47# Программный I2C
  • Свежие записи
    • Нужно ли менять пружины при замене амортизаторов
    • Скрипят амортизаторы на машине что делать
    • Из чего состоит стойка амортизатора передняя
    • Чем стянуть пружину амортизатора без стяжек
    • Для чего нужны амортизаторы в автомобиле
    • Правообладателям
    • Политика конфиденциальности

    🌟 Видео

    SPI интерфейс в микроконтроллерах AVRСкачать

    SPI интерфейс в микроконтроллерах AVR

    Шины данных и интеграции | ESB шина данных | Интеграция 1С ERPСкачать

    Шины данных и интеграции | ESB шина данных | Интеграция 1С ERP

    Программирование МК AVR. Урок 16. Интерфейс TWI (I2C). Часть 1Скачать

    Программирование МК AVR. Урок 16. Интерфейс TWI (I2C). Часть 1

    Программирование МК AVR. УРОК 24. Знакомство с шиной SPIСкачать

    Программирование МК AVR. УРОК 24. Знакомство с шиной SPI

    Подключение графического дисплея 128×64 (ks0108) к avr (ч1)Скачать

    Подключение графического дисплея 128×64 (ks0108) к avr (ч1)

    Как прочитать прошивку из микроконтроллера. Краткий ликбез.Скачать

    Как прочитать прошивку из микроконтроллера. Краткий ликбез.

    Введение в AVR микроконтроллерыСкачать

    Введение в AVR микроконтроллеры

    лекция 417 Чтение и запись данных на общую шинуСкачать

    лекция 417 Чтение и запись данных на общую шину

    Программирование МК AVR. Урок 16. Интерфейс TWI (I2C). Часть 3Скачать

    Программирование МК AVR. Урок 16. Интерфейс TWI (I2C). Часть 3

    Л.10. Протоколы обмена информацией на AVR микроконтроллереСкачать

    Л.10. Протоколы обмена информацией на AVR микроконтроллере

    AVR 48# Аппаратный I2CСкачать

    AVR 48# Аппаратный I2C

    AVR 39# Управление сдвиговым регистром 595 посредством SPIСкачать

    AVR 39# Управление сдвиговым регистром 595 посредством SPI

    лекция 359 Atmega8 USARTСкачать

    лекция 359 Atmega8 USART
Поделиться или сохранить к себе:
Технарь знаток