Функції в бібліотеці MicroC, використовувані в роботі з АЦП: ADC_Init (), ADC_Get_Sample (unsigned short channel), ADC_Read (unsigned short channel)

Таким чином, одна з функцій инициализирует АЦП і не має параметрів, тоді як дві інших використовують номер каналу Ймовірно, друга функція запускає процес перетворення, а третя читає і повертає отриманий результат перетворення

Без претензії на спільність (різні моделі, всі параметри і всі канали тощо) просто повторимо те, що в керівництві до ROBOPICA використовується для роботи з АЦП А використовується одна функція – читання даних, яка виведена в окремий файл, а наведена в основній програмі Ось ця програма:

int Adc char txt[6]

void Read_Adc()

{

ADCON0 = 0b11001001 / / Вибір Analog2 RC_Mode і ADON ADCON0GO = 1 / / Запуск перетворення

while (ADCON0GO) / / Чекаємо, доки перетворення завершиться Adc = (ADRESH * 4) + (ADRESL/64) / / 10 біт Даних ==> Adc

}

void main()

{

Delay_ms(1000)

Lcd_Init (& PORTD) / / Ініціалізація РКІ Lcd_Cmd (LCD_CURSOR_OFF) / / Курсор РКІ вимкнений Lcd_Out (1,1, Raw Data =) / / Виведення тексту першого рядка while (1)

{

}

else

Read_Adc()

WordToStr (Adc, txt) / / Відображення результату на РКІ Lcd_Out (1,10, txt)

if (Adc <90) / / Якщо < 90 - то вони за межами області допустимого

{

Lcd_Out(2,1,”Out of Range”)

{

Adc = (2914 / (Adc +5)) -1 / / Перетворення Даних в сантиметри WordToStr (Adc, txt) / / Перетворення Даних в рядок Lcd_Out (2,1, In CM =) / / Відображення результату на РКІ Lcd_Out (2,6, txt)

}

Delay_ms(1000)

}

}

У тексті цієї програми є одна функція, яка використовується з бібліотеки MicroC, і яку ми повинні написати самостійно, якщо хочемо використовувати висновок на РКІ На РКІ ми відправляємо тільки символи, тоді як результат перетворення модулем АЦП – це число

Давайте подумаємо, як можна перетворити число, скажімо, беззнакове ціле, в текстовий рядок

Насамперед зазначимо, що рядок – це масив байтів, тобто:

char txt[4]

Чому масив містить тільки чотири байти Тому, що результат не більше, ніж 10и-бітове число Для визначеності візьмемо десяткове число 1023, якому відповідає шістнадцяткове число 0x3FF, і переведемо його в символьну рядок «1023» Це конкретне завдання

По-перше, як ми десяткове число можемо розбити на складові цифри

Вибране нами число трохи більше тисячі Розділимо його на 1000 Якщо при целочисленном діленні ми отримаємо одиницю, то перетворимо її на символ «1» Для такого перетворення досить додати до шістнадцятиричним числу 0x01 (десяткове 1) шістнадцяткове число 0x30 (десяткове 48, воно ж код символу нуля) Отримане шістнадцяткове число 0x31 (десяткове 49) – це код символу «1» в таблиці ASCII Аналогічно ми поступимо для перетворення будь-який з цифр в символ

Отже, ми розділили наше число на 1000 і отримали першу значущу цифру (1 або 0): 1023/1000 = 1

Тепер, якщо результат дорівнює одиниці (інакше запишемо символ «0» і пропустимо віднімання), то віднімемо з нашого числа 1000:

1023 – 1000 = 023

Тепер розділимо наше число на 100: 023/100 = 0

Запишемо символ нуля в нашому випадку, інакше переведемо отриманий результат в символ і віднімемо з числа 100 * число (отримане нами)

Розділимо отримане число на 10, і, якщо це не нуль, то переведемо в символ, потім віднімемо отримане число, помножене на 10 з попереднього, а залишок, останню значущу цифру, переведемо в символ

Ось такий план роботи Спробуємо його реалізувати в програмі, використовуючи середовище розробки MPLABX і компілятор SDCC

Джерело: Гололобов ВН, – Самовчитель гри на паяльнику (Про електроніці для школярів і не тільки), – Москва 2012