Начинаем создавать свои функции для работы с АЦП

May 18, 2014 by admin Комментировать »

Функции в библиотеке 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(&ampPORTD) // Инициализация ЖКИ 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

Оставить комментарий

Устройство витков выходе генератора импульсов микросхемы мощности нагрузки напряжение напряжения питания приемника пример провода работы радоэлектроника сигнал сигнала сигналов сопротивление схема теория транзистора транзисторов управления усиления усилитель усилителя устройства частоты