- •1. Операторы выбора языка c51: if и switch.
- •2. Операторы цикла языка с51: while, do…while, for.
- •3. Операторы перехода языка с51: break, continue, goto.
- •4. Программирование параллельным вводом/выводом в с51: операторы управления портами и отдельными разрядами портов. Примеры программ управления светодиодами и опроса контактов переключателей.
- •/* Программа управления светодиодом vd1 от кнопки sb1 */
- •5. Программирование таймеров микроконтроллеров mcs-51 на языке с51.
- •6. Программирование системы прерываний микроконтроллеров mcs-51 на языке с51.
- •7. Программирование последовательного ввода/вывода микроконтроллеров mcs-51 на языке с51.
- •8. Микроконтроллеры pic18: общая характеристика, особенности архитектуры и системы команд.
- •9. Язык с18 для pic-микроконтроллеров: структура программы, директивы препроцессора, ключевые слова.
- •10. Представление информации в языке с18: типы данных, переменные и константы.
- •11. Операции арифметические, поразрядные логические, логические и отношения в языке с18.
- •12. Операторы управления вычислительным процессом в языке с18.
- •13. Функции в языке с18: определение функции, прототип, библиотечные функции.
- •14. Функции формирования временных задержек в языке с18.
- •15. Программирование на языке с18 типовых функций управления и контроля: вывод информации в порт, управление отдельными разрядами портов, опрос переключателя.
- •16. Подключение жк-дисплея к pic-микроконтроллеру: структура жк-дисплея, функции управления дисплеем.
- •17. Аналого-цифровое преобразование в pic-микроконтроллерах: структура внутреннего ацп, функции управления ацп на языке с18.
- •18. Реализация широтно-импульсной модуляции в pic-микроконтроллерах: параметры шим, функции управления шим на языке с18.
- •Void ClosePwm1(void);
- •Void OpenPwm1(char period);
- •Void SetDcpwm1(unsigned int dutycycle);
- •19. Прерывания в pic18: источники прерываний, управляющие биты, программирование прерываний на языке с18.
- •20. Динамическое управление линейным дисплеем на семисегментных индикаторах в pic-микроконтроллерах.
- •21. Интерфейсы мпс: понятие и характеристики. Стандартные интерфейсы мпс.
- •22. Внешние интерфейсы мпс: основные параметры, последовательные и параллельные, синхронные и асинхронные, способы соединения устройств.
- •23. Интерфейс rs-232: назначение, основные технические характеристики, принципы передачи данных.
- •24. Интерфейс ирпс: назначение, основные технические характеристики, принципы передачи данных.
- •25. Интерфейсы rs-422 и rs-485: назначение, основные технические характеристики, принципы передачи данных.
- •26. Интерфейс spi: назначение, основные технические характеристики, принципы передачи данных.
- •27. Интерфейс i2c: назначение, основные технические характеристики, принципы передачи
- •28. Интерфейс can: общее описание и основные параметры, виды и форматы сообщений в can.
- •29. Интерфейс can: арбитраж, обнаружение и обработка ошибок, скорость передачи и длина сети.
17. Аналого-цифровое преобразование в pic-микроконтроллерах: структура внутреннего ацп, функции управления ацп на языке с18.
Все микроконтроллеры семейства PIC18 имеют встроенные многоканальные аналого-цифровые преобразователи (АЦП), используемые для преобразования аналогового входного напряжения в диапазоне от 0 до UDD (напряжение питания МК) в цифровой код. АЦП выдают 10-разрядный код, а число аналоговых каналов зависит от конкретного типа МК. Так, например, PIC18F242 имеет 6 аналоговых каналов. Для ввода аналоговых сигналов обычно используются линии порта А, которые требуется настроить на ввод.
После запуска АЦП требуется определенное время, называемое временем преобразования, необходимое для преобразования аналогового входного напряжения в цифровой код. Изменение входного напряжения во время процесса преобразования вносит нежелательную погрешность в генерируемый выходной код. Для уменьшения этой погрешности на входе АЦП включают устройство выборки-хранения (УВХ), состоящее из аналогового ключа и запоминающего конденсатора. Ключ замыкается при выборе канала АЦП, а конденсатор, после заряда, сохраняет значение входного напряжения канала на постоянном уровне, пока АЦП выполняет преобразование.
Длительность временного интервала, который требуется для заряда запоминающего конденсатора, определяется параметрами входной цепи, а также температурой окружающей среды. В большинстве случаев можно принять, что максимальное время заряда запоминающего конденсатора не превышает 20 мкс.
Модуль АЦП имеет внутренний делитель частоты, обеспечивающий деление тактовой частоты МК в 2, 4, 8, 16, 32 и 64 раза. Встроенный RC-генератор с частотой 250 кГц обычно используется для АЦ-преобразования в тех случаях, когда сам МК переводится в энергосберегающий режим SLEEP.
Минимальное время преобразования АЦП определяется суммарным временем, которое требуется для установки времени на запоминающем конденсаторе и для полного завершения самого АЦ-преобразования.
Результат АЦ-преобразования запоминается в двух регистрах МК: старший байт в ADRESH и младший байт в ADRESL. Этот результат может размещаться в двух различных форматах, которые называются:
- с правым выравниванием; - с левым выравниванием.
В формате «с правым выравниванием» в шесть старших разрядах регистра ADRESH записываются нули, а в два младших разряда - соответственно два старших бита полученного результата.
В формате «с левым выравниванием» восемь старших бит результата записываются в регистр ADRESH, а младшие биты результата запоминаются в регистре ADRESL.
Библиотека функций управления аналогово-цифровым преобразователем компилятора С18
Для облегчения разработки программ управления встроенным аналогово-цифровым преобразователем микроконтроллеров семейства PIC18 в библиотеке пакета MCC18 имеются несколько функций, которые являются специфическими для компилятора С18 и не существуют в стандартной библиотеке ANSI C. Функции приведены в таблице. Полное описание этих функций дано в заголовочном файле с именем adc.h.
Функции компилятора С18 для АЦП
Функция |
Описание |
OpenADC( ) |
Конфигурирует АЦП |
SetChanADC( ) |
Выбирает канал, который будет использоваться |
ConvertADC( ) |
Запускает АЦП |
BusyADC( ) |
Проверяет, занят ли сейчас АЦП |
ReadADC( ) |
Считывает результат преобразования АЦП |
CloseADC( ) |
Отключает АЦП |
Пример записи функций:
OpenADC(ADC_FOSC_4 & ADC_RIGHT_JUST & ADC_1ANA_ 0REF, ADC_CH0 & ADC_INT_OFF); /* Эта функция задает тактирование АЦП от генератора МК, коэффициент деления частоты FOSC равен 4; правое выравнивание результата АЦ-преобразования; один аналоговый вход AN0, опорные напряжения UREF+ = UDD, UREF- = USS ; выбирается канал 0 (вход AN0); запрещаются прерывания от АЦП. */
SetChanADC(ADC_CH0); /* Выбирается канал 0, т.е. аналоговый сигнал должен подаваться на линию AN0 (вывод RA0 порта А). */
void ConvertADC(void); /* Функция ConvertADC( ) осуществляет запуск (старт) АЦ-преобразования. */
char BusyADC(void); /* Эта функция возвращает значение 1, если АЦП выполняет преобразование (АЦП занят), и возвращает значение 0, если АЦП не выполняет преобразование (АЦП свободен). */
int ReadADC(void); /* Эта функция возвращает двухбайтное число, в котором размещается 10-разрядный код АЦП. */
void CloseADC(void); /* Эта функция отключает модуль АЦП, при этом он не потребляет ток от источника питания. */
Для осуществления АЦ-преобразования входного сигнала программа МК должна сделать следующие действия:
выполнить конфигурацию АЦП с помощью задания соответствующих аргументов в функции OpenADC( );
выбрать канал для ввода аналогового сигнала с помощью ф-и SetChanADC( );
выполнить задержку на время 20 мкс для заряда конденсатора схемы выборки-хранения;
запустить преобразование с помощью функции ConvertADC( );
производить периодический опрос готовности данных АЦП с помощью функции BusyADC( ) (если не используется прерывание от АЦП);
в случае готовности данных считать результат АЦ-преобразования с помощью функции ReadADC( ).