Лекция № 8 (1085703)
Текст из файла
ЛЕКЦИЯ № 8.
Из схемы демонстрационной отладочной платы KIT-03 видно, что микроконтроллер связан с клавиатурой и ЖКИ через промежуточную микросхему СE110, которая используется для экономии ножек. (Так как для того, чтобы управлять ЖКИ необходимо 8 линий передачи (можно сократить и управлять через 4 линии) и 3 линии для управления. Кроме этого, клавиатура тоже требует повесить на микроконтроллер 88 линий. Таким образом, у микроконтроллера просто не хватит ножек.)
Микроконтроллер и микросхема СE110 связаны между собой шиной I2C.
Для передачи данных в интерфейсе I2C используются две линии: SDA (передаются адреса и данные, а принимаются данные) и SCL (тактовые синхроимпульсы). В то время, когда передача данных на шине I2C отсутствует, сигнал синхронизации (SCL) и данных (SDA) имеют высокий уровень за счет подтягивающих резисторов. Биты START и STOP формируются ведущим для определения начала и окончания передачи данных. Бит START формируется переходом сигнала SDA из высокого уровня в низкий при высоком уровне сигнала SCL. Бит STOP формируется переходом сигнала SDA из низкого уровня в высокий при высоком уровне сигнала SCL. При передаче данных сигнал SDA может изменяться только, когда SCL имеет низкий логический уровень.
Каждое устройство на шине I2C имеет уникальный адрес. Когда ведущий инициирует передачу данных, то сначала передается адрес устройства, к которому выполняется обращение. Остальные устройства проверяют переданный ведущим адрес. В состав байта адреса устройства входит бит направления передачи данных (если R/W = 1, то выполняется чтение из ведомого, если R/W = 0, то выполняется запись).
Ведомый и ведущий шины всегда находятся в противоположном режиме работы, что можно представить в виде двух состояний:
-
Ведущий передатчик – ведомый приёмник.
-
Ведомый передатчик - ведущий приёмник.
В обоих случаях ведущий формирует тактовый сигнал.
Простой 7 – разрядный формат адреса:
где: S – START;
R/W – чтение / запись;
ACK – подтверждение.
При передаче данных, после каждого переданного байта, приёмник должен подтвердить получение байта сигналом ACK низкого уровня. Если ведомый не подтвердит получение байта адреса или данных, ведущий должен прервать передачу сформировав сигнал STOP (ведомый должен отпустить SDA для формирования STOP ведущим).
Подтверждение приёма ведомым:
Когда ведущий шины принимает данные, то на каждый принимаемый байт формируется бит подтверждения, если принятый байт не последний. Для сообщения ведомому о том, что ведущий прекращает принимать данные по приёму последнего байта – ACK не формируется. Ведомый отпускает SDA, чтобы ведущий смог передать бит STOP. Ведущий может формировать бит STOP на месте бита подтверждения. Если ведомому необходимо задержать передачу данных, то он может удерживать SCL в низком логическом уровне. Передача данных продолжится, когда ведомый отпустит SCL. Это позволяет ведомому подготовить новые данные для передачи.
I2C может быть с чисто программной поддержкой, но большинство микроконтроллеров имеют аппаратную поддержку I2C. В отличие от универсального синхронно – асинхронного приемопередатчика (USART), передача в режиме I2C ведется старшими разрядами вперед. Режим I2C – один из двух режимов работы (есть еще режим SPI) модуля ведущего синхронного последовательного порта (MSSP), который имеет аппаратную поддержку I2C во всех режимах (как ведущего так и ведомого).
Для управлением модулем MSSP в режиме I2C используется шесть регистров:
-
SSPCON, регистр управления MSSP;
-
SSPCON2, регистр управления 2 MSSP;
-
SSPSTAT, регистр состояния MSSP;
-
SSPBUF, буфер приемника/передатчика. Примечание: физически – это разные регистры, но они имеют один адрес и одно название, так как в один все время загружаем, а из другого все время выгружаем;
-
SSPSR, сдвиговый регистр (пользователю не доступен);
-
SSPADD, регистр адреса (если ведомый)/задания частоты (если ведущий).
Если используется режим прерывания, то дополнительно используются регистры:
PIR1 (регистр запросов прерываний) и симметричный ему регистр PIR2 (регистр разрешения запросов прерываний).
Есть еще модуль BSSP, который работает только в режиме передачи ведущего.
Сопрягать можно с устройствами, где есть внутренняя шина. У всех периферийных устройств должен быть модуль, поддерживающий шину I2C. Все устройства на шине I2C должны работать с частотой меньшей или равной 100 кГц, так как микроконтроллер может создать большую скорость, а периферийное устройство - нет.
Задание:
Определить номер кнопки, нажатой на клавиатуре демонстрационной отладочной платы KIT-03 микроконтроллера семейства PIC, и вывести на экран ЖКИ.
Структурная схема:
Подпрограмма инициализации I2C.
INIT_ I2C:
BANKSEL SSPADD ; отыщем банк, где наход. регистр задания частоты SSPADD.
MOVLW .99 ; пересылка в W знач. 99 (в десятичной системе счисления). MOVWF SSPADD ; пересылка значений из W в регистр SSPADD.
BANKSEL SSPCON ; отыщем банк, где нах. регистр управления MSSP (SSPCON).
MOVLW B'00101000' ; запрограммируем как ведущий режим I2C и запишем в W. MOVWF SSPCON ; пересылка значений из W в регистр SSPCON.
BANKSEL TRISC ; отыщем банк, где находится регистр направ. данных TRISC.
BSF TRISC ,3 ; уст.бит в 3 разр. рег. TRISC, т.к. I2C орган. на 3, 4 разрядах.
BSF TRISC ,4 ; уст.бит в 4 разр. рег. TRISC, т.к. I2C орган. на 3, 4 разрядах.
RETURN ; возврат из подпрограммы.
Пояснения:
Мы будем организовывать передачу по I2C в режиме ведущего с аппаратной поддержкой. Поэтому в подпрограмме INIT_I2C в регистр управления модуля MSSP (SSPCON) устанавливаем:
7 6 5 4 3 2 1 0
WCOL | SSPOV | SSPEN | CKP | SSPM3 | SSPM2 | SSPM1 | SSPM0 |
0 0 1 0 1 0 0 0
WCOL - Бит конфликта записи.
Ведущий режим:
1 = запись в SSPBUF была выполнена при не выполнении условий шины I2C.
0 = конфликта не было.
Ведомый режим:
1 = была предпринята попытка записи в SSPBUF во время передачи
предыдущего байта.
0 = конфликта не было.
SSPOV - Бит переполнения приемника.
SPI режим:
1 = принят новый байт в то время как SSPBUF содержит предыдущие данные (байт в SSPSR будет потерян). В ведомом режиме пользователь должен прочитать содержимое регистра SSPBUF даже, если только передает данные. В ведущем режиме бит в '1' не устанавливается, т.к. каждая операция инициализируется записью в SSPBUF (сбрасывается в '0' программно).
0 = нет переполнения.
I2C режим:
1 = принят новый байт в то время как SSPBUF содержит предыдущие данные. Значение бита не действительно при передаче данных (сбрасывается в '0' программно).
0 = нет переполнения
SSPEN - Бит включения модуля MSSP.
Когда модуль включен, соответствующие порты ввода/вывода настраиваются на выход или вход.
SPI режим:
1 = модуль MSSP включен, выводы SCK, SDO, SDI, -SS используются модулем MSSP.
0 = модуль MSSP выключен, выводы работают как цифровые порты ввода/вывода.
I2C режим:
1 = модуль MSSP включен, выводы SDA, SCL используются модулем MSSP.
0 = модуль MSSP выключен, выводы работают как цифровые порты ввода/вывода.
CKP - Бит выбора полярности тактового сигнала.
SPI режим:
1 = пассивный высокий уровень сигнала.
0 = пассивный низкий уровень сигнала.
Ведомый режим I2C:
Управление тактовым сигналом SCK.
1 = не управлять тактовым сигналом.
0 = удерживать тактовый сигнал в низком логическом уровне (используется для подготовки данных).
Ведущий режим I2C:
Не имеет значения.
SSPM3 - SSPM0 - Режим работы модуля MSSP.
0000 = ведущий режим SPI, тактовый сигнал = FOSC/4.
0001 = ведущий режим SPI, тактовый сигнал = FOSC/16.
0010 = ведущий режим SPI, тактовый сигнал = FOSC/64.
0011 = ведущий режим SPI, тактовый сигнал = выход TMR2/2.
0100 = ведомый режим SPI, тактовый сигнал с вывода SCK. Вывод - SS подключен к MSSP.
0101 = ведомый режим SPI, тактовый сигнал с вывода SCK. Вывод - SS не подкл. к MSSP.
0110 = ведомый режим I2C, 7-разрядная адресация.
0111 = ведомый режим I2C, 10-разрядная адресация.
1000 = ведущий режим I2C, тактовый сигнал = FOSC/(4 ∙ (SSPADD + 1)).
1011 = программная поддержка ведущего режима I2C (ведомый режим выключен).
1110 = программная поддержка ведущего режима I2C, 7 - разрядная адресация с разрешением прерываний по приему бит START и STOP.
1111 = программная поддержка ведущего режима I2C, 10 - разрядная адресация с разрешением прерываний по приему бит START и STOP.
1001, 1010, 1100, 1101 = резерв.
Подпрограмма формирования START – условия I2C.
I2CSTART:
BANKSEL SSPCON2 ; отыщем банк, где нах. регистр управ. MSSP (SSPCON2). BSF SSPCON2, SEN ; устан. в рег.SSPCON2 бит SEN =1 (аппар. сбрас. в '0').
BTFSC SSPCON2, SEN ; пров. знач. бита SEN: если '1', то $+1, если '0', то $+2.
GOTO $ -1 ; переход на предыдущую команду.
RETURN ; возврат из подпрограммы.
Подпрограмма формирования повторного START – условия I2C.
I2C_RESTART:
BANKSEL SSPCON2 ; отыщем банк, где нах. регистр управ. MSSP (SSPCON2). BSF SSPCON2, RSEN ; устан. в рег.SSPCON2 бит RSEN =1 (аппар. сбрас. в '0').
BANKSEL PIR1 ; отыщем банк, где нах. регистр флагов прерываний PIR1.
BTFSS PIR1, SSPIF ; пров. знач. бита SSPIF: если '1', то $+2, если '0', то $+1.
GOTO $ -1 ; переход на предыдущую команду.
RETURN ; возврат из подпрограммы.
Примечание:
Формат регистра управления модуля MSSP (SSPCON2):
7 6 5 4 3 2 1 0
GCEN | ACKSTAT | ACKDT | ACKEN | RCEN | PEN | RSEN | SEN |
GCEN - Бит разрешения поддержки общего вызова (только для ведомого режима I2C).
1 = разрешить прерывания при приеме в регистр SSPSR адреса общего вызова (0000h).
0 = поддержка общего вызова выключена.
ACKSTAT - Бит статуса подтверждения (только для ведущего режима I2C).
Передача ведущего I2C:
1 = подтверждения не было получено от ведомого.
0 = подтверждение от ведомого было получено.
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.