// Описание: Запись числа с точкой, 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/ – статья о стандартном подключении микроконтроллера
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.