Меню сайта
Календарь
|
STM32L-DISСOVERY.DS18B20 и встроенный LCDCледуюшим шагом моих эксперементов стал датчик ds18b20, а именно вывод его показаний на экран встроенного LCD. Как я уже писал в предыдущей статье ,на плате STM32L-DISСOVERY, свободных от "board function" пинов (Free I/O) - 5 шт (PA5,PA11,PA12,PC13,PD2) ,причем PA11,PA12 аппаратный USB.Я решил подключать датчик на PD2,этот пин согласно мануала толерантен к 5В.Впрочем забегу наперед ,схема работает как от 5В,так и от 3,3В. В сети есть библиотеки для работы с этими датчиками,но они в основном "заточены" под использование USART.Я же поставил перед собой задачу использовать для вывода информации с датчика - LCD, который идет в комплекте с STM32L-DISСOVERY.А при его использовании, на плате просто не остается свободного USART,все доступные пины заняты на работу с LCD. На одном из китайских сайтов была найдена подходящая библиотека,и я решил адаптировать ее под свою задачу и под stm32l .Библиотекa имеет два файла : DS18B20.c и DS18B20.h ( скачать).В файле DS18B20.c прописываем пин и порт на который подключен ds18b20: #define DS_PORT GPIOD //DS18B20 разъем #define DS_RCC_PORT RCC_AHBPeriph_GPIOD Вообще из всего порта D в нашем микроконтролере физически присутствует только пин PD2 .Поэтому я сконфигурировал все пины порта одинаково (выход с открытым стоком): void DS18B20_Configuration(void) RCC_AHBPeriphClockCmd(DS_RCC_PORT, ENABLE); При использовании других пинов .естественно нужно вносить изменения в void DS18B20_Configuration(void). В стандартном наборе библиотек для STM32L152 идут библиотечные файлы Основной проблемой ,для меня ,оказалось вывести значение датчика float на экран LCD при помощи библиотеки stm32l_discovery_lcd.Решение было найдено в разбивке значения float на целую и дробную части (десятая доля): int t_int = t; //здесь будет целая часть Полный текст программы:
uint16_t strDisp[6]; //Массив символов для вывода на дисплей void ds18b20_init(void); int main(void) while(1) t = ds18b20_read(); int t_int = t; //здесь будет целая часть /*Конвертируем результат преобразования в массив символов. /*Следующая функция выводит на экран массив strDisp. Еще она позволяет выводить на } //************************************************************************************************ void assert_failed(uint8_t* file, uint32_t line) units = (((number%10000)%1000)%100)%10; *(p_tab+4) = units + 0x30; В итоге получаем такую картинку Проект для Em::Blocks 2.20. - http://radiomanoff.at.ua/load/ds18b20_lcd/1-1-0-23 |
Архив записей
Друзья сайта
Статистика
Онлайн всього: 1 Гостей: 1 Користувачів: 0 |