I2C™ – INTER-INTEGRATED CIRCUIT и PIC24

Views: 1010


Для работы с периферийными устройствам I2C™ просто незаменим. Дисплеи, память, драйверы и много другое…

В нашем примере мы будем подключать дисплей RDX077 (на драйвере UC1601S) к нашей макетной плате. Почему RDX077 – пока на настоящий момент, это самый доступный индикатор (для меня) с приемлемой ценой. Схема подключения:

pic24-10

RDX0077 – графический индикатора с драйвером UC1601s. В этой главе научимся выводить информацию на индикатор. Описывать сам драйвер UC1601s здесь не будем, будем создавать библиотеку для работы с индикатором.

Первое что необходимо выбрать это модуль I2C, у нас подключен индикатор ко второму модулю. Индикатор может работать на скорости до 400 кГц, поэтому необходимо разобраться как настроить необходимую скорость в модуле. За скорость отвечает регистр I2C2BRG из описания мы можем видеть формулы для расчета скорости и таблица с приведенными расчетами.

pic24-11

 Для стандартных тактовых частот приведены расчетные данные:

Заданная частота шины Fscl

Fcy=Fosc/2 Значение в I2CxBRG Реальная частота Fscl
(Десятичное) (Hex)

100 kHz

16 MHz

157

9D

100 kHz

100 kHz

8 MHz

78

4E

100 kHz

100 kHz

4 MHz

39

27

99 kHz

400 kHz

16 MHz

37

25

404 kHz

400 kHz

8 MHz

18

12

404 kHz

400 kHz

4 MHz

9

9

385 kHz

400 kHz

2 MHz

4

4

385 kHz

1 MHz

16 MHz

13

D

1.026 MHz

1 MHz

8 MHz

6

6

1.026 MHz

1 MHz

4 MHz

3

3

0.909 MHz

Будем использовать максимальную возможную скорость шины 400 кГц.

Во всех новых моделях микроконтроллеров в основном по два модуля I2C. В нашем варианте подключение производиться к модулю 2. Для работы с  индикатором нам понадобиться написать 7 функций по работе с интерфейсом. Некоторое отличие от стандартных функций будет состоять в том, что они будут ориентированы на модуль 2, а также формирование состояния старт будет объедено с указанием для драйвера индикатора записью адреса и  инициализацию типа передачи и команды запись или чтение.

Для работы с многими устройствами I2C я обхожусь своими самодельными функциями, почему самодельными, потому что я знаю как они работают и что от них можно ожидать:

Команда начальной инициализации модуля

void I2C_Open (unsigned int FCLOCK);// инициализация, значение частоты шины в килогерцах (например, 100,150,200….400)
настраивает работу модуля.

Команда стоп

void i2c_stop (void); // формирование стоп

Две команды старт

unsigned char i2c_start (unsigned char adres, unsigned char C_D, unsigned char R_W); // адрес устройства и управление младшими битами
unsigned char i2c_restart (unsigned char adres, unsigned char C_D, unsigned char R_W);

Команда записи байта данных

unsigned char i2c_write (unsigned char data); //запись байта

И две команды чтения

unsigned char i2c_read_ack (void); //чтение с подтверждением
unsigned char i2c_read_noack (void); //чтение без подтверждения

Мое мнение такое чем их меньше тем проще. Для работы с индикатором необходимо сделать библиотеку которая бы упрощала вывод на дисплей символьной информации и графики. О создании библиотеки говорить не буду это не интересно скачать её можно из раздела библиотеки. В этой главе мы ограничимся примером для демонстрации вывода на индикатор текста и графических примитивов.

Первое, что всегда в таких вариантах появляется желание что бы на индикаторе, что нибудь отобразилось. В библиотеке есть функция вывода строк на дисплей String_LCD её формат, на примере:

String_LCD (" Привет Мир!",0,1,2,-1,25);
                   |       | | |  |  +- высота строки по координате Y
                   |       | | |  +---- координата X, -1 команда выровнять строку по центру.
                   |       | | +------- высота символов 2 (двойная)
                   |       | +--------- ширина символов 1 (одинарная)
                   |       +----------- нормальное изображение (черным по белому писать)
                   +------------------- сам текст длина не более 254 символа максимум.

Теперь все уже понятно и первая программа для работы с графическим LCD на драйвере на драйвере UC1601S будет выглядеть так:

//-----------------------------------------------------------
	_LATA3 = 1;// включение подсветки дисплея.
//-----------------------------------------------------------
//настройка i2c
	I2C_Open(400);	// Скорость I2C на 400 кГц			
	int_LCD();	// инициализация LCD;
	clear_LCD(0);	// заливка (очистка индикатора)
//-----------------------------------------------------------
	clear_LCD(2);	// заливка
	// белый прямоугольник	
	rectangle(0,0,2,0, 5, 5, 115, 53);
	String_LCD (" Привет Мир!",0,1,2,-1,25);
	rectangle(0,0,2,0, 10, 10, 105, 43);        
	rectangle(1,0,2,0, 15, 15, 95, 33);

Думаю для начала этого более чем достаточно.


Результат работы программы:

pic24-12

Теперь необходимо скачать проект и поэкспериментировавший с выводом сообщений и графики.


Описание библиотеки в разделе Библиотеки.  Демонстрационное видео функций библиотеки.

 


Файлы для загрузки

Демопроект с полным текстом + библиотека (графические примитивы и символы).[wpdm_file id=66 template=”link-template-calltoaction3.php”]



Это может быть интересно


  • PIC18 – System ArbitrationPIC18 – System Arbitration
    Views: 749 Системный арбитр. Разрешает доступ к памяти между выборами уровнями системы (т.е. Main, Interrupt Service Routine) и выбором периферийных устройств (т.е. DMA и Scanner) на основе назначенных пользователем приоритетов. Каждый …
  • Самый простой диммер для светодиодного освещенияСамый простой диммер для светодиодного освещения
    Views: 3210 Светодиоды все больше входят в нашу жизнь как источники освещения и как само собой разумеющееся, это вопрос регулировки яркости. Существует множество схемных решений, но в нашем варианте мы …
  • Индикатор кода – RC-5 Protocol PhilipsИндикатор кода – RC-5 Protocol Philips
    Views: 1174 Индикатор кода – RC-5 Protocol Philips При конструировании дистанционного управления на инфракрасных лучах для контроля удобно иметь индикатор кодов передаваемых пультом. Плата ch-c3000 позволяет изготавливать устройства с возможностью …
  • Audio-bluetooth modules BK8000L (noname)Audio-bluetooth modules BK8000L (noname)
    Views: 887 Еще один вариант, так сказать недоразумения Audio-bluetooth modules BK8000L (noname). Его отличительной маркировкой служат два отверстия в плате и надпись R2. Отличают его от модулей на чипе BK8000L, …
  • Altium Designer – подготовка документации для производства и сборки печатных платAltium Designer – подготовка документации для производства и сборки печатных плат
    Views: 4041 В процессе освоения Altium Designer много возникает вопросов по подготовке документации для производства плат, а также для её сборки. Altium Designer позволяет сделать все требуемые документы, хотя скажем …
  • DIXELL XWEB500D-EVO + RUT900 или как пробить NAT-серверDIXELL XWEB500D-EVO + RUT900 или как пробить NAT-сервер
    Views: 1202 Когда необходимо под какой нибудь контроллер имеющий вэб сервер в инет, то нужен статический IP, что оказалось проблемой при работе с операторами сотовых сетей, конкретно с оператором сети …
  • Применение typedef, struct и unionПрименение typedef, struct и union
    Views: 8918 Полезные описания переменных Часто необходимо в памяти расположить последовательно разные виды данных, что бы потом можно было их использовать. Полезные ссылки Взято и переработано с сайта http://www.butovo.com/~zss/cpp/struct.htm http://cppstudio.com/post/9172/ …
  • DS18B20 – удаленный контроль температурыDS18B20 – удаленный контроль температуры
    Views: 3248 Контроль температуры с использованием датчиков температуры DS18B20 и платы ILLISSI-4B-09-primum Проект позволяет подключать к плате ILLISSI-4B-09-primum до 16 датчиков температуры DS18B20, удаленных более 300 метров,  и выводить информацию …
  • TDA7294 part 1TDA7294 part 1
    Views: 505 TDA7294 має унікальні дані для створення підсилювачів звукової частоти HI-FI класу. Варіант застосування є конфігурація BRIDGE (мостова схема включення), де використовуються два TDA7294, як показано на схематичній діаграмі …
  • LCD индикаторы на драйвере ML1001LCD индикаторы на драйвере ML1001
    Views: 2056  ML1001 – статический LCD GOG (чип в стекле) драйвер для 40-сегментного LCD в позолоченном противоударном исполнении. На них можно каскадно строить цельные из 80 или 120 сегментов LCD индикаторы. …


Поделись этим!