Amicus18

Amicus18 и шина I2C

Одной из простых и распространенных шин обмена данных является I2C. Под нее создано множество различных устройств, таких как часы реального времени, датчики температуры, АЦП и др. Плата и компилятор Amicus18 содержат несколько способов организации обмена по шине I2C. По желанию, разработчик может использовать высокоуровневые команды или организовывать протокол обмена самостоятельно. При этом доступен аппаратный интерфейс I2C, а также предусмотрена возможность использования произвольных линий портов ввода-вывода.

Способы обмена по I2C поддерживаемые Amicus18

Первый способ подразумевает использование встроенного модуля I2C микроконтроллера. При этом линии SDA и SCL присоединяются к PORTC.4 и PORTC.3 соответственно.  Команды обмена этого режима позволяют работать с шиной как на высоком, так и на низком уровне, то есть разработчик сам выставляет условие СТАРТ, СТОП, запускает чтение и запись по шине.

Второй способ позволяет реализовать шину I2C на любых произвольных выводах платы. При этом используются команды обмена низкого уровня, т.е. пользователь сам формирует структуру передаваемого пакета.

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

Команды обмена по шине I2C на высоком уровне

Компилятор ProtonBASIC предоставляет разработчику две команды, позволяющие отправить или получить данные по шине:

I2Cin Dpin, Cpin, Control, { Address }, [ Variable {, Variable…}] – запись во внешнее устройство.

I2Cout Dpin, Cpin, Control, { Address }, [ OutputData ] – чтение из внешнего устройства.

Здесь:

Dpin, Cpin – используемые линии для SDA и SCL соответственно

Control – адрес устройства на шине

Adress – адрес ячейки памяти во внешнем устройстве I2C, при необходимости.

Variable – информационные переменные. В качестве последних можно использовать массив.

Для работы данных команд обмена, первоначально требуется определение некоторых параметров:

Declare I2C_Slow_Bus On/Off  - устанавливает скорость обмена по шине On используется для тактовой частоты микроконтроллера большей чем 4 МГц.

Declare I2C_Bus_SCL On/Off – включение подтягивающих резисторов на линии SCL. On – внутренний резистор, Off – внешний резистор.

Пример работы с шиной

В качестве примера ниже приведена программа считывающая значение с датчика температуры, модели DS1621 и выводящая ее на LCD-дисплей.

Схема включения датчика температуры и дисплея

В качестве дисплея использован LCD-индикатор WH1602B. Работа с данным ЖК-дисплеем описана на странице Amicus18 и символьный ЖК-дисплей. Датчик температуры DS1621 присоединен к линиям 0 и 1 PORTC микроконтроллера. Адрес микросхемы на шине имеет значение 10010000b (Все вспомогательный адресные линии присоединены к GND).
Подключение DS1621 к Amicus18

Текст программы на языке ProtonBASIC

' Термометр на DS1621

Dim te1 As byte
Dim te2 As byte

'Установки LCD
LCD_DTPin = PORTB.4 ' Линии D4-D7 подклюючены к линиям 4-7 PORTB
LCD_ENPin = PORTB.2 ' Вход EN подключен к PORTB.2
LCD_RSPin = PORTB.0 ' Вход RS подключен к PORTB.0
LCD_Interface = 4 ' 4-х проводная схема
LCD_Lines = 2 ' Используется двухстрочный индикатор
LCD_Type = Alphanumeric ' Тип индикатора - символьный

'Установки I2C
I2C_Slow_Bus On ' Медленный режим для кварца > 4МГц
I2C_Bus_SCL Off

Symbol Control = %10010000 ' Адрес микросхемы
Symbol SDA = PortC.0 ' Линия SDA подключена к PORTC.0
Symbol SCL = PortC.1 ' Линия SCL подключена к PORTC.0

Start: ' Начало программы
DelayMS 100 ' Задержка для включения индикатора
Cls ' Очистка индикатора
Print "Temperatura " ' Вывод строки

I2Cout SDA, SCL, Control, $AC, [0] ' Установка регистра состояния Ds1621
DelayMs 5
I2Cout SDA, SCL, Control, $EE, [0] ' Команда старта измерения температуры в Ds1621

While 1=1
Print $FE, $C0 ' установка курсора
DelayMS 300 ' Задержка на время измерения температуры в Ds1621
I2CIn SDA, SCL, Control, $AA, [te1,te2] ' Чтение значения температуры 21
print Dec te1 ' Отображение температуры
Wend

You have no rights to post comments