Главная » Статьи » Proton PICBasic |
Работа с датчиком LM35DZ LM35DZ - точный температурный датчик, который обеспечит 10 мВ на 1 градус Цельсия в пределах 0.01 %. Его нетрудно соединить с PIC, и следующий пример показывает, как можно измерить температуру в диапазоне от - 55 до 150 градусов Цельсия. В документации на датчик предлагается много способов использования датчика. Здесь предлагается один из них. Для этой схемы требуется 3 дополнительных компонента: 2 диода 1N914( или 1N4148) и 1 резистор на 18 кОм. Вот схема:
Device 16F877A Declare XTAL 4 DECLARE ADIN_RES 10 ' Вычисляем 10-битный результат DECLARE ADIN_TAD 8_FOSC ' Источник тактирования АЦП DECLARE ADIN_STIME 50 ' Время измерения Declare LCD_TYPE 0 ' Type of Тип используемого ЖКИ - буквенно цифровой Declare LCD_DTPIN PORTB.4 ' Шина данныхB4,B5,B6,B7 Declare LCD_RSPIN PORTB.2 ' RS на portb.2 Declare LCD_ENPIN PORTB.3 ' E pin на portb.3 Declare LCD_INTERFACE 4 ' 4-битный интерфейсt Dim ADC_Result As Float Dim ADC_Total As Float Dim Temp_Float as Float Dim ADC_Channel as Byte Dim ADC_Loops as Word Dim Temp as Word Dim Last_Result1 As Float Dim Last_Result2 As Float ADCON1 = %10000000 ' Установим porta как аналоговые входы TRISA = $FF ' Porta - установим как входы Delayms 150 Cls Print $FE,$40,$07,$05,$07,$00,$00,$00,$00,$00 ' Запишем значения в память ЖКИ для знака градуса ADC_Loops = 200 Main: ADC_Channel = 1 ' Используем первый канал измерения Gosub ADC_Average ' Для увеличения точности выполняем усреднение Temp_Float = ADC_Result ' Запомним результат ADC_Channel = 0 ' Используем нулевой канал измерения Gosub ADC_Average ' Для увеличения точности выполняем усреднение ' Преобразуем значения в вольты (масштабируем к 1000) ADC_Result = ADC_Result * 5000 / 1023 Temp_Float = Temp_Float * 5000 / 1023 ' чтобы уменьшить ошибку ADC_Result = ADC_Result - Temp_Float ' И вычислим разницу ADC_Result = ADC_Result / 10 ' Вернем масштаб, учитывая, что 1 град. = 10 мВ If ADC_Result <> Last_Result1 Then ' Было ли изменение температуры? ' и обновим показания, если было Print At 1,1, Dec1 ADC_Result, 0, "C " Last_Result1 = ADC_Result ' Запомним новое значение Endif Goto Main ' Начнем сначала ADC_Average: ' Выполним усреднение для увеличения точности ADC_Total = 0 ' Очистим суммирующий регистр ' Зациклим на выполнении усреднения определенное количество раз For Temp = 1 To ADC_Loops ADC_Result = ADIN ADC_Channel ' Получим новое значение ADC_Total = ADC_Total + ADC_Result ' Складываем в суммирующий регистр Delayus 1 ' Время на разряд внутреннего конденсатора Next Temp ' Определим среднее значение полученной величины ADC_Result = ADC_Total / ADC_Loops Return
| |
Просмотров: 14200 | | |
Всего комментариев: 0 | |