Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Моделирование устройств интерфейсов в среде Proteus. Практикум
.pdf
3. Содержание отчета
1. Название и цель занятия.
2. Скриншоты схем, осциллограмм и исходных кодов, исследованных в работе.
3. Основные выводы по выполненному заданию.
4. Контрольные вопросы
1. К какому типу интерфейсов относится SPI?
2. Что собой представляет базовая архитектура SPI?
3. Какие линии связи используются в 4х-проводной структуре SPI?
4. Где преимущественно применяется интерфейс SPI?
5. Могут ли обмениваться информацией между собой ведомые устройства SPI?
6. Какие регистры имеются в модуле SPI микроконтроллера?
7. Как включается и выключается модуль SPI?
8. Какие линии связи используются в 3х-проводной структуре SPI?
9. Что собой представляет расширенный интерфейс SPI?
10. Перечислите основные характеристики интерфейса SPI.
Практическое занятие №6
МОДЕЛИРОВАНИЕ РАБОТЫ ПОСЛЕДОВАТЕЛЬНОГО
ИНТЕРФЕЙСА 1-WIRE
Цель занятия: Изучение интерфейса микроконтроллеров 1-Wire и приобретение
навыков его моделирования в среде Proteus.
1. Основы последовательного интерфейса 1-WIRE
Интерфейс представляет собой низкоскоростную шину (15,4 Кбит/с, максимум 125
Кбит/с в режиме overdrive) двунаправленной передачи данных, разработанную
корпорацией Dallas Semiconductor (с 2001г. Maxim Integrated). Особенностью шины
является то, что и для питания подключенных устройств, и для обмена данными
используется одна и та же пара проводов кабеля «витая пара». Для обеспечения питания
схем во время передачи данных, устройства содержат внутренний конденсатор 800пФ,
который заряжается, пока на шине нет активности. Все устройства 1-Wire реализуют
схему с открытым стоком, замыкая линию на «землю». Длительность низкого уровня и
определяет передаваемые данные.
31

При организации сети 1-Wire с топологией «общая шина», называемой MicroLan,
максимальная длина может достигать 300м при общем числе устройств до 300.
Интерфейс позволяет «горячее» подключение и отключение устройств. Любой обмен
данными всегда инициируется единственным ведущим устройством – «мастером», роль
которого в большинстве случаев выполняет микроконтроллер (МК). Вначале МК подает в
шину 1-Wire импульс сброса RESET. Устройство, подключенное к 1-Wire, отвечает МК
импульсом присутствия PRESENCE.
Спецификация 1-Wire допускает достаточно широкий разброс временных
параметров протокола связи, что облегчает его реализацию.
Обмен информации ведется тайм-слотами. Один тайм-слот служит для обмена
одним битом информации. Тайм-слот – это по существу определенная, жестко
лимитированная по времени последовательность смены уровней сигнала в линии 1-Wire.
Различают 4 типа тайм-слотов: передача "1" от МК, передача "0" от МК, прием "1" от
устройства и прием "0" от устройства.
32

МК начинает тайм-слот с выдачи в шину 1-Wire "0" в течение 1 мкс. Последующий
уровень зависит от типа тайм слота: для приема и передачи "1" уровень должен стать
высоким, а для передачи "0" - оставаться низким вплоть до конца тайм-слота, т.е. не менее
60 и не более 120 мкс. Если МК принимает данные, то опрос уровня в шине он должен
сделать на промежутке от 13-й до 15-й мкс тайм-слота. МК должен обеспечить интервал
между отдельными тайм-слотами не менее 1 мкс. Заштрихованная на рисунке область это область "нарастания" уровня в шине 1-Wire, которая зависит от емкости линии и
сопротивления резистора «подтяжки».
Данные в шине 1-Wire передаются побайтно, бит за битом, начиная с младшего
бита. Достоверность переданных/принятых данных гарантируется путем подсчета
циклической контрольной суммы.
Принципы адресации устройств и управления ими в сети 1-Wire основываются на
том, что каждое устройство 1-Wire обладает уникальным идентификационным 8-байтным
номером, программируемым на этапе производства микросхемы. Первый байт
представляет собой «код семейства» определяющий тип устройства (коды с 0 по 127
зарезервированы для устройств Maxim Integrated/Dallas Semiconductor, коды 128 и выше
вкупе с частью серийного номера – для сторонних производителей). Следующие 6 байт
предназначены для серийного номера. Последний байт является контрольной суммой,
рассчитанной на основе кода семейства и серийного номера. Номера некоторых устройств
нанесены прямо на корпусе микросхем (например, ключей-таблеток iButton для
домофонов), а номера других можно определить при помощи специальных программ или
устройств.
Одним из наиболее частых применений протокола 1-wire является взаимодействие
с однопроводными температурными датчиками DS18B20, DS18S20, DS18S22. В
последнее время интерфейс 1-Wire все чаще начинает применяться в системах
автоматизации технологического контроля и управления.
33

2. Порядок выполнения задания
// Подключение библиотек
#include <avr/io.h>
#include <util/delay.h>
#define uchar unsigned char
#define uint unsigned int
#define BUS PORTC
// Определение порта/вывода
//низкого уровня
#define sbit(x,PORT) (PORT) |=
(1<<x)
{ // Выход единиц
out = (temp/10) & 0x0f;
s_digit1;
c_digit2;
_delay_ms(5);
// Выход десятков
out = (temp%10) & 0x0f;
c_digit1;
s_digit2;
_delay_ms(5);
}
}
// Запись команды датчику
void writecommand(uchar data)
{ uchar i;
for(i=0; i<8; i++)
{ C_DQ;
_delay_us(15);
if(data & 0x01)
S_DQ;
else
C_DQ;
_delay_us(45);
data >>= 1;
1. Ознакомиться с изложенным выше кратким описанием последовательного
интерфейса микроконтроллеров 1-Wire.
2. Моделировать работу устройства цифровой индикации температуры на основе
подключенного к микроконтроллеру по интерфейсу 1-Wire датчика DS18B20, для чего
создать средствами программы ISIS Proteus следующую принципиальную электрическую
схему:
3. В окне настроек микроконтроллера Edit Component установить следующие
параметры:
CKOPT — 1 (не запрограммирован);
BOOTRST — 1 (не запрограммирован);
CKSEL Fuses — 0100 (внешний RC-генератор частотой 8Мгц);
Boot Loader Size — 00 (1024 слова, стартовый адрес 0x1C00);
SUT Fuses — 00;
Advanced Properties — Clock Frequency (Default).
4. Ввести в окне заготовки программы Source Code исходный код на языке С для
микроконтроллера U1:
34

#define cbit(x,PORT) (PORT) &=
~(1<<x)
#define pin(x,PIN) (PIN) & (1<<x)
// Определение выводов
#define s_digit1 sbit(5,PORTC)
#define c_digit1 cbit(5,PORTC)
#define s_digit2 sbit(4,PORTC)
#define c_digit2 cbit(4,PORTC)
#define out PORTC
#define DQ_IN DDRA&=~(1<<7)
#define DQ_OUT DDRA|=(1<<7)
#define S_DQ sbit(7,PORTA)
#define C_DQ cbit(7,PORTA)
#define DQ pin(7,PINA)
// Прототипы функции
void init_ds18b20(void);
uchar readbyte(void);
void writecommand(uchar);
uchar readtemp(void);
uchar a, b, tt;
// Основная программа
int main(void)
{ uchar i=0, temp;
// Инициал-ция указателя стека
SPL=0x54;
SPH=0x04;
// Конфигур-ние выводов порта
DDRC = 0xff;
DDRA = 0xff;
while(1)
{ temp = readtemp();
for(i=0; i<10; i++)
// 10 измерений
}
// Начало транзакций с 1-
Wire //линии
void init_ds18b20(void)
{ DQ_OUT;
C_DQ ;
_delay_us(600);
S_DQ;
_delay_us(50);
DQ_IN;
while(DQ);
_delay_us(240);
DQ_OUT;
S_DQ;
_delay_us(300);
}
// Чтение байта датчика
uchar readbyte(void)
{ uchar i = 0,data = 0;
DQ_OUT;
for (i=0; i<8; i++)
{ C_DQ ;
data >>= 1;
_delay_us(3);
S_DQ;
DQ_IN;
_delay_us(12);
if(DQ)
data |= 0x80;
DQ_OUT;
S_DQ;
_delay_us(45);
_delay_us(5);
}
return(data);
}
S_DQ;
_delay_us(2);
}
}
// Чтение значения
температуры //датчика
uchar readtemp(void)
{ uint t;
init_ds18b20();
// Преобразование
writecommand(0xCC);
writecommand(0x44);
init_ds18b20();
// Чтение метки области
памяти
writecommand(0xCC);
writecommand(0xBE);
a = readbyte();
b = readbyte();
t = b;
t <<= 8;
t = t|a;
tt = t*0.0625;
return(tt);
}
5. Запустить процесс моделирования. Изменяя кнопками со стрелками
«температуру» датчика U3 DS18B20, наблюдать изменения показаний семисегментного
индикатора и осциллографа. Проверить работу цепей сброса микроконтроллера. В случае
неработоспособности схемы проанализировать ошибки в окне VSM Studio Output и
принять меры к их устранению.
6. Моделировать сеть 1-Wire, для чего создать средствами программы ISIS Proteus
нижеприведенную принципиальную электрическую схему.
7. В окне настроек микроконтроллера Edit Component установить следующие
параметры: Advanced Properties: Watchdog Clock 1MHZ; Clock Frequency: 3.6864MHz;
Program File: ds1990.cof
8. Запустить процесс моделирования. Подключая кнопками со стрелками
различные устройства (DS1990 – номер-ключ, «таблетка», DS18S20, DS1822 – датчики
температуры, DS2405 – одинарный электронный ключ, DS2430, DS2431, DS2433 –
энергонезависимая память разных объемов) к шине 1-Wire, регистрировать появление их
35

серийных номеров на экране виртуального терминала. Устройства подключать по одному,
каждый раз выключая симуляцию.
9. Оформить протокол и ознакомиться с контрольными вопросами.
3. Содержание отчета
1. Название и цель занятия.
2. Скриншоты схем, осциллограмм и исходных кодов, исследованных в работе.
3. Основные выводы по выполненному заданию.
4. Контрольные вопросы
1 . Перечислите основные характеристики интерфейса 1-Wire.
2 . Каким образом осуществляется питание устройств 1-Wire во время передачи данных?
3. Какую топологию имеет сеть MicroLan?
4 . Сколько ведущих и ведомых устройств может быть в сети MicroLan?
5 . Каким образом происходит обмен информации в сети MicroLan?
6 . Что собой представляет понятие «тайм-слот»?
7 . Какие типы тайм-слотов свойственны интерфейсу 1-Wire?
8 . Как передаются данные в шине 1-Wire?
9. На чем основываются принципы адресации устройств в сети 1-Wire?
10. Сколько байт отводится для серийного номера устройства 1-Wire?
36

Практическое занятие №7
МОДЕЛИРОВАНИЕ РАБОТЫ ПОСЛЕДОВАТЕЛЬНОГО
ИНТЕРФЕЙСА I2C (TWI)
Цель занятия: Изучение интерфейса микроконтроллеров I2C (TWI) и
приобретение навыков его моделирования в среде Proteus.
1. Основы последовательного интерфейса I2C (TWI)
Разработанный фирмой Philips интерфейс I2C (Inter-Integrated Circuit) представляет
собой две двунаправленные линии связи – SDA и SCL. По SDA передаются данные, по
SCL – тактовый сигнал. Обе линии соединены через резисторы Rp с шиной питания Vcc
(+5 В или +3,3 В), т.к. выходы подключаемых устройств выполнены с открытым стоком
или коллектором. Фирма Philips за использование названия этого интерфейса требует
лицензионных отчислений, поэтому в микроконтроллерах Atmel используется
собственное название TWI – Two-Wire Interface.
Основной режим работы — 100 кбит/с; 10 кбит/с в режиме работы с пониженной
скоростью. В скоростном режиме быстродействие шины увеличивается до 400 кбит/с.
Допускается приостановка тактирования для работы с медленными устройствами.
Устройство может содержать, как логику ведущего устройства, так и логику
подчиненного устройства. Кроме того, оно может эмулировать работу нескольких
подчиненных устройств, путем реагирования на несколько адресов.
Каждое подключенное к шине подчиненное устройство должно иметь собственный
уникальный адрес, передачей которого ведущее устройство инициирует транзакцию. К
одной шине допускается подключение нескольких ведущих устройств при общем числе
до 127 устройств обоих типов. Для определения, какое из одновременно осуществляющих
доступ к шине ведущих устройств имеет приоритет, используется механизм арбитража.
Интерфейс I2C является синхронным, поэтому каждый передаваемый бит данных
на линии SDA сопровождается импульсом на линии синхронизации SCL. Состояние
выданного на линию SDA бита данных может изменяться только тогда, когда на линии
синхронизации SCL имеется низкий логический уровень. Во время высокого логического
уровня SCL выданный бит данных считается действительным. Данные передаются
байтами, начиная со старшего бита.
Ведущее устройство всегда инициирует и заканчивает передачу данных. При этом
ведущее устройство сигнализирует о начале транзакции генерацией на шине условия
START (S). Затем, передается пакет адреса с адресом подчиненного устройства
(ADDRESS) и указание желаемого направления передачи данных, т.е. чтение или запись
(R/W). По завершении передачи всех пакетов данных (DATA), ведущее устройство
37

генерирует на шине условие STOP (P) и транзакция завершается. После приема каждого
байта получатель данных генерирует бит подтверждения (A или ACK) или
неподтверждения (/A или NACK). Между условиями START и STOP шина считается
занятой и в этом случае никакое другое ведущее устройство не может осуществлять
управляющие воздействия на шине.
Структура базовой транзакции шины I2C (TWI) выглядит следующим образом:
Все передаваемые адресные пакеты по шине I2C состоят из 9 бит, в т.ч. 7 бит
адреса, одного бита управления для задания типа операции чтения или записи (R/W) и
одного бита подтверждения (ACK). Если бит R/W = 1, то выполняется операция чтения, в
противном случае – запись. Если подчиненное устройство распознает адресное обращение
к себе, оно формирует низкий уровень на линии SDA на 9-ом цикле SCL (формирование
бита подтверждения). Если адресуемое подчиненное устройство занято или по каким-либо
другим причинам не может обслужить ведущее устройство, то на линии SDA сохраняется
высокий логический уровень во время цикла подтверждения. Ведущее устройство после
этого может передать условие STOP или повторный START для инициации новой
передачи.
Пакеты данных состоят из байта данных и бита квитирования, то есть тоже имеют
длину 9 бит. После приема каждого байта получатель данных отвечает битом
квитирования, устанавливая на линии SDА низкий уровень. Если принят последний байт
или подчиненное устройство больше не может продолжать прием данных, оно должно
сохранить на линии SDA высокий логический уровень.
В случае использования интерфейса I2C для подключения EEPROM-памяти 3 бита
адресного пакета являются дополнительными битами адресов ячеек памяти – А10, А9 и
А8. А старшие 4 бита адреса устройства несут информацию о его типе.
2. Порядок выполнения задания
1. Ознакомиться с изложенным выше кратким описанием последовательного
интерфейса микроконтроллеров I2C (TWI).
2. Моделировать совместную работу по шине I2C микроконтроллера и EEPROMпамяти, для чего создать средствами программы ISIS Proteus следующую
принципиальную электрическую схему:
38

3. Ввести в окне заготовки программы Source Code исходный код на языке С для
#define F_CPU 16000000UL
#include <avr/io.h>
#include "util/delay.h"
#include "i2c_eeprom.h"
int main(void)
{
// Задержка на время включения
виртуального осциллографа
_delay_ms(4000);
uint8_t byte = 10;
uint16_t address = 25;
//Настройка TWI
eeInit();
//Запись байта данных 10 = 0xA0 по адресу 25 =
0x19
//Если запись успешная, то true
if(eeWriteByte(address, byte))
{
//Очистка переменной
byte = 0;
//Ожидание 15 мс, чтобы различать
осциллограммы
_delay_ms(15);
//Считывание байта информации,
расположенной по адресу 25 = 0x19
byte = eeReadByte(address);
//Для проверки этот байт выводится в порт
А
PORTA = byte;
}
}
микроконтроллера U1:
4. Ввести в окне Projects файлы i2c_eeprom.c и i2c_eeprom.h из источника,
указанного преподавателем.
5. Запустить процесс моделирования. С помощью отладчика шины I2C и
виртуального осциллографа идентифицировать заданные в исходном коде процедуры и
проверить значение байта данных, выведенное в PORT A микроконтроллера. Все
осциллограммы наблюдать в пошаговом режиме симуляции с самого его начала при
развертках 200 ms, 1 ms и 20 us. В случае неработоспособности схемы проанализировать
ошибки в окне VSM Studio Output и принять меры к их устранению.
39

6. Моделировать совместную работу по шине I2C двух микроконтроллеров, один
из которых выполняет функцию ведущего, а другой – ведомого. Для этого создать
средствами программы ISIS Proteus следующую принципиальную электрическую схему:
7. В настройках ведущего U2 и ведомого U1 микроконтроллеров ввести
программные файлы соответственно A8 Два по I2C master2.hex и А8 Два по I2C slave2.hex из
источника, указанного преподавателем.
8. Запустить процесс моделирования. Изменяя кнопками со стрелками положение
движка резистора RV1, контролировать вольтметром «напряжение» на входе АЦП
ведущего микроконтроллера, соответствующие ему бинарный код на многоразрядном
индикаторе LCD1 и осциллограммы для трех значений: 0 В, 2,4 В и 5 В. Сравнить
передаваемые коды с кодами, регистрируемыми отладчиком шины I2C.
9. Оформить протокол и ознакомиться с контрольными вопросами.
3. Содержание отчета
1. Название и цель занятия.
2. Скриншоты схем, осциллограмм, отладки и исходного кода, исследованных в работе.
3. Основные выводы по выполненному заданию.
4. Контрольные вопросы
1 . Почему интерфейс I2C имеет второе название TWI?
2 . Почему интерфейс I2C называется синхронным?
3. При каком логическом уровне на линии SCL игнорируется состояние линии SDA?
4 . Как передаются данные по шине I2C?
5 . Чем отличается условие START от условия STOP?
6 . Кто и когда генерирует бит подтверждения?
7 . Перечислите основные характеристики интерфейса I2C.
8 . Что собой представляет адресный пакет шины I2C?
9. Что собой представляет пакет данных шины I2C?
10. Как используется адресный пакет шины I2C при подключении EEPROM-памяти?
40
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
