Очередной термометр и на этот раз на датчике температуры LM35, Микросхема LM35 (у неё есть несколько аналогов) специально создана для измерения температуры. Всё, что нужно - это подключить 1 и 3 ногу к плюсу и минусу питания соответственно, и измерить напряжение на среднем выводе. Оно составляет 10 милливольт на каждый градус Цельсия температуры корпуса микросхемы (она сама выглядит как транзистор, кстати). Значит, если там напряжение 230мВ, то температура 23°С. При работе потребляет датчик 130мкА, выход у неё низкоомный, а точность 0.5 градуса... В общем, круче некуда. Единственное - страдает она от слишком высоких температур - 150°С максимум.
Схема термометра:
В схеме LM35 подключен к АЦП на порт микроконтроллера ATMega8. На порт D подключен ЖК-дисплей 20x4, моэно ставить 16x2. По поводу кварцевого резонатора думаю должно быть понятно, программируем и выставляем фьюзы на 10 мГц, можете прошить на внутренний кварц 8 мГц, микроконтроллер можете применить с любым индексом в конце. Печатная плата не разрабатывалась, все собиралось на макетной плате.
Термометр в работе:
Дисплей я использовал на 20 символов и 4 строки, другого не было, как было сказано исходник имеется так что редактируйте прошивку под ваш дисплей. Программное обеспечение для этого проекта написана в BASCOM AVR. Температура отображается в виде барграфа и цифрового значения, проще некуда!
Код программы:
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'config ADC
Start Adc
Dim W As Word , Perc As Word , Volt As Word , Volt_d As Byte , Channel As Byte , I As Byte , Cols As Byte , Cols_d As Byte
Cls
Cursor Off
Locate 3 , 1
Lcd "0"
Locate 3 , 5
Lcd "10"
Locate 3 , 10
Lcd "20"
Locate 3 , 15
Lcd "30"
Locate 3 , 19
Lcd Chr(223) ; "C"
Do
W = Getadc(0)
Volt = W * 5
Volt_d = Volt Mod 10
Volt = Volt / 10
Locate 1 , 1
Lcd Volt ; "," ; Volt_d
Cols = Volt / 2
Locate 2 , 1
For I = 1 To Cols
Select Case I
Case 1 : Lcd Chr(3)
Case 5 : Lcd Chr(4)
Case 10 : Lcd Chr(4)
Case 15 : Lcd Chr(4)
Case 20 : Lcd Chr(4)
Case Else : Lcd Chr(0)
End Select
Next I
Cols_d = Cols Mod 2
If Cols_d > 0 Then
Lcd Chr(5)
Cols = Cols + 2
Else
Cols = Cols + 1
End If
For I = Cols To 20
Select Case I
Case 1 : Lcd Chr(2)
Case 5 : Lcd Chr(1)
Case 10 : Lcd Chr(1)
Case 15 : Lcd Chr(1)
Case 20 : Lcd Chr(1)
Case Else : Lcd Chr(32)
End Select
Next I
Waitms 1000
Loop
End
На этом все! Собираем, эксперементируем и модифицируем! А так, хочу поделиться еще одним вариантом работы с этим датчиком, на примере Atmega16... данные исходники будут отличным примером для начинающих радиолюбителей осваивающих микроконтроллеры AVR в среде BASCOM - хотя, думаю последних (изучающих BASCOM) не так много...
Код программы:
$regfile = “m16def.dat”
$crystal = 1000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.0 , Rs = Portd.1
Config Adc = Single , Prescaler = Auto
Deflcdchar 0 , 12 , 18 , 18 , 12 , 32 , 32 , 32 , 32
Deflcdchar 1 , 32 , 4 , 12 , 28 , 28 , 32 , 32 , 32
Deflcdchar 2 , 32 , 4 , 14 , 31 , 31 , 32 , 32 , 32
Deflcdchar 3 , 32 , 4 , 14 , 31 , 31 , 7 , 6 , 4
Deflcdchar 4 , 32 , 4 , 14 , 31 , 31 , 31 , 14 , 4
Deflcdchar 5 , 32 , 32 , 32 , 32 , 32 , 32 , 32 , 32
Dim A As Word
Dim B As Byte
B = 1
Start Adc
Cursor Off
Cls
Locate 2 , 1
Lcd “thermometer”
Do
A = Getadc(0)
A = A / 2
Locate 1 , 2
Lcd “Temp =” ; A ; Chr(0) ; “c “
Locate 1 , 16
Lcd Chr(b)
Waitms 500
Incr B
If B > 6 Then B = 1
Loop
End
г.Ульяновск, Artur21.
Скачать файлы проекта (~3кб.)
|