Разработка цифрового термометра с диапазоном измеряемых температур 0-70 °C, страница 5

// Описание: Запись числа с точкой, form2-количество знаков после запятой.

// Максимум символов: 5

//-------------------------------------------------------------------void PrintJKI(float fl, unsigned char form2)

{

// очищение пространства под вывод

LCD_string("     ");

LCD_inst(0x10);

LCD_inst(0x10);

LCD_inst(0x10);

LCD_inst(0x10);

LCD_inst(0x10);

// описание данных

unsigned char bcd[20],form1;

unsigned short i,del;

unsigned long data;

// ищем количество знаков

form1=1;

if(fl>=10)    form1=2;

if(fl>=100)   form1=3;

if(fl>=1000)  form1=4;

if(fl>=10000) form1=5;

if(((form1+form2)>5)||(fl>=100000)){

LCD_string1(errValue);

return;

}

// конвертируем в целое значение

for(i=1;i<=form2;i++) fl=fl*10;

//data=(unsigned long)fl;

data=(unsigned long)fl;

// ищем максимальный делитель

del=1;

for(i=1;i<(form1+form2);i++) del=del*10;

// находим массив знаков

bcd[0]=data/del;

data=data%del;

if(del>=10) del=del/10;

for(i=1;i<(form1+form2);i++){

bcd[i]=data/del;

data=data%del;

del=del/10;

}

// вывод на экран

for(i=0;i<(form1+form2);i++){

LCD_data(bcd[i]);

if((i==form1-1)&&(form2!=0)) LCD_char(0x2e);

}

}

//-------------------------------------------------------------------Детальное описание кода, из-за его размера  - устно.

Также из-за размера кода пришлось использовать flash память микроконтроллера, и увеличить размер стека с 0х20 на 0х30 а также return address stack с 10 на 20.

Программа использует для хранения точек характеристики eeprom память, которая сохраняет значения после отключения питания.

Проверка прибора:

Результаты эксперимента при настройках передаточной характеристики:

ADCH1=255

T=0

ADCH2=0

T=98

Эталон

показание

25,2

25

26

26,4

28

28,3

30

30,2

30,7

30,7

31

31

32,2

32,2

33

33,3

33,7

33,7

34,3

34,4

35,1

35,2

40

39,5

42

41,4

43

42,58

44

43

45

44,1

50

48,73

55

53,34

Среднеквадратическое отклонение: 0,15 С.

После корректировки передаточной характеристики:

ADCH1=255

T=0

ADCH2=0

T=103

Эталон

показание

 

66,6

66,7

 

33,3

33,2

 

32,8

32,8

 

29,1

29

 

28,4

28,75

 

27,5

27,5

 

Среднеквадратическое отклонение: 0,06 С.

Погрешность обусловлена разрядностью АЦП, из-за того, что на одно дискретное значение АЦП приходится 0,40 градуса. Если сравнивать показания термопары и прибора в момент переключения показаний прибора, то погрешность (в рамках эксперимента) отсутствует.

Погрешности устройства:

1)  Погрешность в основном обусловлена разрядностью АЦП (256 разрядов). На заданный интервал температур этого слишком мало.

2)  На погрешность влияет отсутствие L-C фильтра по питанию, и хорошего источника опорного напряжения.

3)  Погрешность сенсора -самая незначительная.

Список литературы:

1)  http://easyelectronics.ru/ – статья о стандартном подключении микроконтроллера