Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программное управление технологическим оборудованием

.pdf
Скачиваний:
1
Добавлен:
29.11.2025
Размер:
11.79 Mб
Скачать

5.2Прерывание таймера T1 по совпадению

void __attribute__((interrupt,no_auto_psv)) _T1Interrupt()

{

Ind_Send(OFF);

// Отключение индикатора

 

 

// Переключение на

LATB &= ~(0x0F << 6);

следующий

LATB |= (_i << 6);

// индикатор

if (_i < 8)

 

{

 

 

 

Ind_Send(_ind[_i]);

// Отправка кода цифры

}

 

 

_i++;

 

 

if (_i == 8)

 

{

 

 

 

_i = 0;

 

}

 

 

 

 

// Сброс флага прерывания

IFS0bits.T1IF = 0;

таймера

TMR

 

 

1

= 0;

// Перезапуск таймера

}

#define Delay_us(d) (__delay32 (((d)) * ((FCY) / 1000000uL)))

 

TRISAbits.TRIS

 

#define SDA

A8

 

 

TRISAbits.TRIS

 

#define SCL

A9

 

#define READ_SDA

PORTAbits.RA8

 

// Инициализация портов I2C

 

void I2C_Init()

 

 

{

 

 

ODCAbits.ODC

 

 

A8

= 1;

// Открытый коллектор SDA

ODCAbits.ODC

 

 

A9

= 1;

// Открытый коллектор SCL

LATAbits.LAT

= 0;

 

571

A8

 

LATAbits.LATA9

= 0;

SDA = 1;

 

SCL = 1;

 

}

// Формирование условия СТАРТ void I2C_Start()

{

SDA = 0; Delay_us(25);

}

// Формирование условия СТОП void I2C_Stop()

{

SCL = 1; Delay_us(25); SDA = 1; Delay_us(25);

}

// Передача байта по интерфейсу I2C char I2C_Send(unsigned char c)

{

char b;

for (b = 7; b >= 0; b--)

{

SCL = 0; Delay_us(25);

if ((c & (1 << b)) != 0)

{

SDA = 1;

}

else

{

SDA = 0;

572

}

Delay_us(25);

SCL = 1; Delay_us(50);

}

1.A

CK SCL = 0;

2.Отпустить линию

SDA = 1; Delay_us(25);

SCL = 1; Delay_us(25);

char result;

if (READ_SDA == 0)

{

result = 0;

}

else

{

result = 1;

 

}

 

 

 

Delay_us(2

 

SCL = 0;

5);

 

 

Delay_us(2

 

SDA = 0;

5);

 

return

 

 

result;

 

 

}

 

 

void ADC_Init()

 

 

{

 

 

AD1CON1bits.AD12B

 

= 0;

 

// 10-битный режим

AD1CON2bits.V

 

CFG

= 0; // Опорное напряжение – Avdd

AD1CON1bits.SS

// Запуск преобразования после

RC

= 0;

очистки

 

 

// бита выборки

AD1PCFG

 

 

L

= 0xFFFF;

573

AD1PCFGLbits.P

 

 

CFG0

= 0;

// AN0 - аналоговый вход

AD1PCFGLbits.P

 

 

CFG1

= 0;

// AN1 - аналоговый вход

AD1CON1bits.A

 

// Автоматический запуск выборки

SAM

= 1;

после

 

 

// предыдущего преобразования

AD1CON3bits.A

 

// Источник тактирования

DRC

= 0;

преобразования -

 

 

// источник тактирования МК

AD1CON1bits.F

 

// Формат данных - целый

ORM

= 0;

беззнаковый

AD1CON2bits.C

 

 

HPS

= 1;

// Преобразование каналов CH0, CH1

AD1CON1bits.SIMSA

 

M= 1;

 

// Одновременная выборка CH0, CH1

AD1CHS123bits.CH123SA = 0;// Подключение входа AN0 на положительный // вход усилителя CH0

AD1CHS0bits.CH0SA = 1; // Подключение входа AN1 на положительный // вход усилителя CH1

AD1CON1bits.ADON = 1; // Включение модуля АЦП

}

void main()

{

AD1PCFGL = 0xFFFF;

// Отключение входов АЦП

I2C_Init();

// Инициализация шины I2C

ADC_Init();

// Инициализация АЦП

Ind_Init();

// Инициализация индикации

Init_Timer1();

// Инициализация таймера

while (1)

 

 

 

{

 

 

 

AD1CON1bits.SAMP = 0;

// Запуск выборки

while (!AD1CON1bits.DONE);

// Ожидание завершения

 

 

// преобразования

unsigned int val = ADC1BUF1; Ind_Show(val); // Отображение результата

574

val = val / 4; // Приведение результата к диапазону

0..255

// Отправление данных в ЦАП

I2C_Start(); I2C_Send(0x5 A); I2C_Send(0x0 0); I2C_Send(val) ; I2C_Stop();

__delay32(FCY / 5);

}

}

4 Варианты индивидуальных заданий к лабораторной работе

Разработать программу для учебного стенда, позволяющую выполнить следующие действия:

1.Отобразить на LLI количество включённых тумблеров VD1..VD10.

2.При любом изменении состояния тумблеров VD3..VD10 увеличивать количество включённых светодиодов на LLI.

3.При включении тумблера SA1 вывести на LLI периодичный сигнал вида:

4 При включении тумблера SA2 вывести на LLI периодичный сигнал вида:

5.При включении тумблера SA1 линейно увеличивать сигнал на LLI до максимального. При отключении тумблера SA1 – линейно уменьшать до ноля.

575

5 Контрольные вопросы

1.Какую функцию выполняют цифро-аналоговые преобразователи?

2.Какие применяются методы построения ЦАП?

3.Какого рода преобразование выполняет микросхема AD5241?

4.Из каких структурных элементов состоит микросхема AD5241?

5.Каким образом происходит управление микросхемой AD5241?

576

Лабораторная работа 15

Исследование технологии переназначаемых контактов и средств ввода квадратурного сигнала в микроконтроллер

Цель работы:

Изучить технологию переназначаемых контактов. Изучить алгоритм, способ настройки и принцип работы модуля квадратурного энкодера. Разработать и отладить программу для обработки квадратурного сигнала.

Порядок выполнения работы:

1.Изучить теоретические вопросы, связанные с технологией переназначаемых контактов и работой модуля квадратурного энкодера.

2.Изучить принципиальную электрическую схему к лабораторной работе.

3.Разработать программу в соответствии с индивидуальным заданием.

4.Отладить программу в среде MPLAB IDE.

5.Загрузить программу в учебный стенд.

6.Исследовать работу системы ввода квадратурного сигнала.

7.Оформить отчёт по лабораторной работе.

8.Ответить на контрольные вопросы.

1 Краткие теоретические сведения

1.1 Переназначаемые контакты

Технология переназначаемых контактов позволяет периферийным модулям использовать не фиксированные, заранее определённые выводы микроконтроллера, а любые из линий ввода-вывода микроконтроллера, помеченных как RPx5 (Remappable Pin). Таким образом, при программировании микроконтроллера существует возможность независимо сопоставлять входные и выходные линии периферийных модулей требуемым линиям портов. Функцией переназначаемых контактов могут воспользоваться следующие периферийные модули микроконтроллера:

1.16-битный таймер;

2.модуль захвата/сравнения;

3.модуль квадратурного энкодера;

4.модуль приёмо-передатчика UART;

5.модуль внешних прерываний;

6.модуль SPI.

Соответствия переназначаемых контактов линиям ввода-вывода

микроконтроллера настраиваются двумя группами регистров – для настройки входов и для настройки выходов периферийным модулей.

Для настройки функций входа используется группа регистров RPINRx6.

577

Каждый регистр содержит набор 5-битных полей, ассоциированных с входами периферийных модулей. Значение поля определяет номер переназначаемого контакта, который будет использоваться данной функцией периферийного модуля. Использование переназначаемого контакта как входной линии периферийного модуля требует предварительную настройку используемой линии порта на вход с помощью установки соответствующего бита регистра

TRISx7.

Условная структура входов периферийных модулей, использующих технологию переназначаемых контактов, показана на рис. 1.1. Биты регистров RPINRx представлены в таблице 1.1.

Рис. 1.1. Условная структура входов периферийных модулей

 

 

 

Таблица 1.1

 

Биты регистров RPINRx

 

5-битное

 

 

Регистр

 

Обозначение

Описание

 

поле

 

 

RPINR0

INT1R<4:0>

INT1

Вход внешнего прерывания

RPINR1

INT2R<4:0>

INT2

Вход внешнего прерывания

 

 

 

Вход внешнего тактирования

RPINR3

T2CKR<4:0>

T2CK

таймера T2

 

 

 

Вход внешнего тактирования

RPINR3

T3CKR<4:0>

T3CK

таймера T3

 

 

 

Вход сигнала А квадратурного

RPINR14

QEA1R<4:0>

QEA

энкодера

 

 

 

578

 

 

 

Окончание таблицы 1.1

 

 

 

 

 

 

 

Вход сигнала Б квадратурного

RPINR14

QEB1R<4:0>

QEB

энкодера

 

INDX1R<4:0

 

 

RPINR15

>

INDX

Вход сигнала индексной метки

 

 

 

квадратурного энкодера

RPINR18

U1RXR<4:0>

U1RX

Вход линии RX модуля UART

RPINR18

U1CTS<4:0>

U1CTS

Вход линии TX модуля UART

RPINR20

SDI1R<4:0>

SDI1

Вход сигнала данных модуля SPI

 

 

 

Вход сигнала тактирования модуля

RPINR20

SCK1R<4:0>

SCK1

SPI

 

 

 

Вход сигнала выбора ведомого

RPINR20

SS1R<4:0>

SS1

модуля SPI

Например, задание контакту RP2 (линии 2 порта RB) функции входа сигнала RX модуля UART осуществляется следующим образом:

TRISBbits.TRIS

 

 

B2

= 1;

// Настройка линии порта на вход

RPINR18bits.U1

 

// Задание в качестве входа RX модуля

RXR

= 2;

UART

 

 

// контакта RP2

Для настройки функций выхода используется группа регистров RPORx8. Аналогично, каждый регистр содержит набор 5-битных полей, но каждое поле связано с одним переназначаемым контактом. Значение поля определяет функцию периферийного модуля, которая будет использовать данный вывод. Значение поля может быть так же нулевым для того, чтобы оставить контакт неподключенным ни к одному из выводов периферийных модулей.

Условная структура входов периферийных модулей, использующих технологию переназначаемых контактов, показана на рис. 1.2. Соответствие переназначаемых контактов и управляющих регистров приведено в таблице 1.2. Расшифровка функций периферийных модулей, использующих переназначаемые контакты в качестве выходов, представлена в таблице 1.3.

579

Рис. 1.2. Условная структура выводов периферийных модулей

Таблица 1.2 Соответствие переназначаемых контактов управляющим регистрам

Регист

 

RPOR

 

 

 

 

 

 

 

р

 

0

 

RPOR1

RPOR2

RPOR3

RPOR4

RPOR5

Выводы

 

RP1, RP0

 

RP3, RP2

RP5, RP4

RP7, RP6

RP9, RP8

RP11, RP10

 

 

 

 

 

 

 

 

 

Регист

 

RPOR

 

 

 

 

 

 

 

р

 

6

 

RPOR7

RPOR8

RPOR9

RPOR10

RPOR11

 

 

RP13,

 

RP15,

 

 

RP20,

 

Выводы

 

RP12

 

RP14

RP16, RP17

RP18, RP19

RP21

RP22, RP23

 

 

 

 

 

 

 

 

 

 

Регист

 

 

 

 

 

 

 

 

 

 

р

 

RPOR12

 

 

 

 

 

 

 

 

 

RP24,

 

 

 

 

 

 

 

Выводы

 

RP25

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица 1.3

Функций периферийных модулей

 

 

 

Обозначени

 

 

 

 

Описан

 

 

е

 

Значение

 

 

ие

 

 

NUL

 

 

 

 

Вывод PRn назначен линии порта ввода-

 

L

 

00000

 

вывода

 

 

 

 

 

 

 

 

 

Вывод PRn назначен выходу TX модуля

 

U1TX

 

00011

 

UART

 

 

 

 

 

 

 

 

 

Вывод PRn назначен выходу RTS модуля

 

U1RTS

 

00100

 

UART

 

 

 

 

 

 

 

 

 

Вывод PRn назначен выходу данных

 

SDO1

 

00111

 

модуля SPI

 

 

 

 

 

 

 

 

 

 

 

 

 

580

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]