Подключение DS18b20 к STM32
23.05.2012, 12:40
|
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
|
Re: Подключение DS18b20 к STM32
Возьмем простейшую задачу - надо прочитать серийный номер датчика, подключенного к пину 2 порта C.
Для этого вводим массив:
|
Код:
|
unsigned char DS18B20_sn[8]; |
Далее не забываем разрешить тактирование порта:
|
Код:
|
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC , ENABLE); |
Эта процедура использует функции библиотеки от ST. На самом деле будет просто произведена установка первого бита регистре RCC-›APB2ENR.
Далее мы обращаемся к процедуре из тела main:
|
Код:
|
unsigned char error;
error = DS1822_Search_Rom_One_Device (GPIOC, GPIO_Pin_2, &DS18B20_sn); |
В результате переменная error будет содержать код ошибки или ноль в случае успеха, а массив будет заполнен серийным номером вашего датчика включая контрольную сумму.
|
|
|
|
Эти 4 пользователя(ей) сказали Спасибо Easyrider83 за это сообщение:
|
|
|
23.05.2012, 12:48
|
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
|
Re: Подключение DS18b20 к STM32
Далее нам надо запустить процедуру конвертирования температуры, которая при настройках датчика по-умолчанию займет 750мс.
Для этого обратимся к функции DS1822_Start_Conversion_by_ROM:
|
Код:
|
error = DS1822_Start_Conversion_by_ROM (GPIOC, GPIO_Pin_2, &DS18B20_sn); |
Если ошибка по-прежнему не вылезла, значит все работает и можно ждать конвертирования.
Через 750мс можно получить результат:
|
Код:
|
unsigned int temperatura;
error = DS1822_Get_Conversion_Result_by_ROM_CRC (GPIOC, GPIO_Pin_2, &DS18B20_sn, &temperatura); |
Эта фунция проверяет так же контрольную сумму. Поэтому, если возникла ошибка передачи данных, она вернет код ошибки, отличный от нуля.
В итоге мы имеем переменную temperatura, которая содержит 12 бит значения температуры. Для округления просто сдвигаем результат вправо на 4 бита:
|
Код:
|
unsigned char real_temp=temperaru››4; |
|
|
|
|
Эти 4 пользователя(ей) сказали Спасибо Easyrider83 за это сообщение:
|
|
|
24.05.2012, 13:00
|
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
|
Re: Подключение DS18b20 к STM32
Выкладываю рабочий пример с любым количеством сенсоров. Все данные вываливаются в UART. На мой взгляд удачная получилась библиотека.
Прошу перекачать файлы библитек. Добавил функцию SearchRom2.
Последний раз редактировалось Easyrider83; 24.05.2012 в 13:04.
|
|
|
|
Эти 9 пользователя(ей) сказали Спасибо Easyrider83 за это сообщение:
|
|
|
18.02.2013, 20:54
|
|
|
Временная регистрация
Регистрация: 25.09.2008
Сообщений: 95
Сказал спасибо: 39
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
Re: Подключение DS18b20 к STM32
Сообщение от Easyrider83
|
|
Добавил функцию SearchRom2.
|
Скажите пожалуйста, а в чем отличия этих ф-ций?
- DS1822_Search_Rom
- DS1822_Search_Rom_One_Device
- DS1822_Search_Rom2
|
|
|
|
Сказали "Спасибо" wellcom
|
|
|
18.02.2013, 21:07
|
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
|
Re: Подключение DS18b20 к STM32
Сообщение от wellcom
|
Скажите пожалуйста, а в чем отличия этих ф-ций?
- DS1822_Search_Rom
- DS1822_Search_Rom_One_Device
- DS1822_Search_Rom2
|
- DS1822_Search_Rom пишет серийники в локальную переменную
|
Код:
|
unsigned char Search_Rom_SN[One_Wire_Device_Number_MAX][DS1822_SERIAL_NUM_SIZE]; |
DS1822_Search_Rom2 пишет серийники в переменную, полученную через указатель.
DS1822_Search_Rom_One_Device возвращает серийник одного устройства, если оно подключено к линии в гордом одиночестве.
|
|
|
|
Эти 4 пользователя(ей) сказали Спасибо Easyrider83 за это сообщение:
|
|
|
18.02.2013, 23:50
|
|
|
Временная регистрация
Регистрация: 25.09.2008
Сообщений: 95
Сказал спасибо: 39
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
Re: Подключение DS18b20 к STM32
Никак не могу раскурить вместе с даташитом вот это
|
Код:
|
PIN_OUT_PP(GPIOx, PINx); // установить 2-х тактный выход /выход двумя состояниями (англ. Push-Pull — туда-сюда)/
PIN_OFF(GPIOx, PINx); //сбросить пин
if (Bit==0)// данные передаются временными слотами
{
delay_us(Time_Pulse_Delay_High); //60 us
PIN_ON(GPIOx, PINx); //установить пин порта в 1 (отпустить линию)
delay_us(Time_Pulse_Delay_Low); //10 us
}
else //
{
delay_us(Time_Pulse_Delay_Low); //10 us
PIN_ON(GPIOx, PINx); //установить пин порта в 1 (отпустить линию)
delay_us(Time_Pulse_Delay_High);//60 us
}
PIN_IN(GPIOx, PINx); // сделать вход без подтяжки |
не могу понять почему после установки слота времени, например лог.0 (60мкс) после отпускания шины 1варе, в таком состоянии находимся еще 10 мкс, и при формировании лог 1 на шине - наоборот 60 мкс?
|
|
|
|
19.02.2013, 00:00
|
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
|
Re: Подключение DS18b20 к STM32
Тут все просто. Суммарная длительность слота 70мкс. 10мс - нолик, 60мкс - единичка.
|
|
|
|
02.03.2013, 22:37
|
|
|
Временная регистрация
Регистрация: 25.09.2008
Сообщений: 95
Сказал спасибо: 39
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
Re: Подключение DS18b20 к STM32
Подскажите пожалуйста, используя динамическую индикацию на семисегментниках, каким образом лучше состряпать исходник, что бы время измерения нескольких датчиков не влияло на показания (свечения) индикаторов?..приходит только мысль - мерять Т не на всех подряд датчиках, а как то таймеру по очереди...
|
|
|
|
03.03.2013, 00:05
|
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
|
Re: Подключение DS18b20 к STM32
wellcom, выход только один - гасить экран на время измерений. Благо, это не долго.
Все прерывания должны быть выключены.
|
|
|
|
03.03.2013, 00:10
|
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
|
Re: Подключение DS18b20 к STM32
Easyrider83, 1wire на UARTE не пробовал ?
__________________
Осторожно , злой кот
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:30.
|
|