3.8 Система дискретного вводу-виводу
Системи дискретного вводу та виводу інформації являють собою системи прийому та видачі сигналів дискретної форми сигналу, тобто цифрові сигнали. Для підвищення точності сигналів та уникнення неоднозначності у інтерпретації даних необхідно ввести у склад обох систем гальванічні розв’язки сигналів.
У якості гальванічного елемента використано оптрон АОД130, що являє собою пару: фотодіод та світло діод, що розташовані в одному чотирьох контактному корпусі.
4. Розробка програмного забезпечення
Згідно завдання на курсову роботу необхідно розробити програму ініціалізації МК для роботи із усіма пристроями, що входять до складу системи.
Для цього, по-перше, необхідно сконфігурувати регістри портів вводу-виводу на виконання операцій, що були зазначені для них, під час розробки принципової схеми. Конфігурування відбувається шляхом встановлення та скидання необхідних бітів у регістрах PORTх (рядки 25-38) та DDRх (рядки 39-50), а також читанням стану виводів портів через регістр PINx.
По-друге, сконфігорувати регістри вводу-виводу, що відображають внутрішнє налаштування периферійних пристроїв МК, а саме АЦП, таймера-лічильника Т1, зовнішнього ОЗП, модуля USART.
Для конфігурування АЦП необхідно встановити регістри ADCSRA та ADMUX (рядки 4-7, 52-57).
Для конфігурування таймера-лічильника Т1, щоб він працював як ШІМ, необхідно сконфігурувати регістри TCCR1A, TCCR1B, TCCR1C (рядки 13-15, 73-87).
Для конфігурації роботи із зовнішнім ОЗП використовуються регістри XMCRA, XMCRB (рядки 8, 9, 58-63).
Для конфігурування модуля USART використовуються UCSR0A, UCSR0B, UCSR0C (рядки 10-12, 64-72).
Лістинг програми
№ | Мітка | Команда | Операнди | Примітка |
1 | .nolist | |||
2 | .include | "С:\Kursovoy\PMS_Kursovoy \"m1281def.inc" | ||
3 | .list | |||
;--Содержимое регистров | ||||
4 | .equ | ADCRS = 0b10000101 | ;ADEN=1 - АЦП включ., ADSC=0, ;ADATE=0 (одиночный режим), ADIF=0, ;ADEN=0, ADFPS[2..0]=101 (делитель ;частоты на 32) --> рабочая частота ;АЦП=2МГц : 32 = 62,5кГц | |
5 | .equ | ADMX0 = 0b00000000 | ;несимметричный вход ADC0, внешнее ;опорное напряжение | |
№ | Мітка | Команда | Операнди | Примітка |
6 | .equ | ADMX6 = 0b00000110 | ;несимметричный вход ADC6, внешнее ;опорное напряжение | |
7 | .equ | ADMX3_1 = 0b00010011 | ;симметричный входы ADC3-1, внешнее ;опорное напряжение | |
8 | .equ | XMCR_A = 0b10000001 | ;SRE=1 (разрешена работа с вн. ОЗУ), ;SRL[2..0]=0 (один сектор), ;SRW[11..00]=0001 (один такт ожидания) | |
9 | .equ | XMCR_B = 0b00000100 | ;XMBK=0, биты 6-3 зарезервир ;XMM[2..0]=100 (выводы РС[7..4] могут ;свободно использоваться как порты ВВ) | |
10 | .equ | UCSRA = 0b00100000 | ; регистр А управления USART | |
11 | .equ | UCSRB = 0b00000010 | ; регистр B управления USART | |
12 | .equ | UCSRC = 0b00100110 | ;UMSEL[01..00]=00 (асинхр. режим ;работы), UPM[01..00]=10 (проверка на ;четность), UCSZ[01..00 (8-ми битный ;формат посылок)] | |
13 | .equ | TCCRA = 0b00110010 | ;COM1A[1..0]=00 отключен вывод ;OCR1A, COM1B[1..0]=11 OCR1B при ;прямом счете на выходе равен 1, при ;инверстном счете - 0, COM1C[1..0]=00 ;отключен вывод OCR1C, ;WGM[11..10]=10 определяет 10 режим ;работы | |
14 | .equ | TCCRB = 0b00010010 | ;WGM[13..12]=10 определяет 10 режим ;работы, CS[12..10]=010 источник ;тактового сигнала (clk_IO/8) | |
15 | .equ | TCCRC = 0b00000000 | ; регистр управления Т1 | |
;--Рабочие регистры | ||||
16 | .def | t0 = r16 | ; регистру r16 присвоить имя t0 | |
17 | .def | t1 = r17 | ; регистру r176 присвоить имя t10 | |
;--Начало | ||||
18 | .cseg | ; начало сегмента кода | ||
19 | .org 0 | |||
20 | rjmp | Initial | ; переход к подпрограмме Initial | |
№ | Мітка | Команда | Операнди | Примітка |
;--Инициализация МК | ||||
21 | Initial: | ldi | t1, low(RAMEND) | ;инициализация |
22 | out | SPL, t1 | ;младшего и старшего байтов | |
23 | ldi | t1, high(RAMEND) | ;указателя | |
24 | out | SPH, t1 | ;стека | |
;--Конфигурация портов ввода-вывода ;--Включаем подтягивающие резисторы и задаем начальное значение выводов | ||||
25 | ldi | t0, 0x00 | ; для порта А не требуются | |
26 | out | PORTA, t0 | ; подтягивающие резисторы | |
27 | ldi | t0, 0b00111111 | ; для выводов PB5-0 включить | |
28 | out | PORTB,t0 | ; подтягивающие резисторы | |
29 | ldi | t0, 0b11110000 | ; для выводов PС7-4 включить | |
30 | out | PORTC,t0 | ; подтягивающие резисторы | |
31 | ldi | t0, 0b11000000 | ; для выводов PD7, PD6 включить | |
32 | out | PORTD,t0 | ; подтягивающие резисторы | |
33 | ldi | t0, 0b11111101 | ; для всех выводов портаЕ, кроме РF1, | |
№ | Мітка | Команда | Операнди | Примітка |
34 | out | PORTЕ,t0 | ;включить подтягивющие резисторы | |
35 | ldi | t0, 0xFF | ; для всех выводов порта F | |
36 | out | PORTF,t0 | ;включить подтягивющие резисторы | |
37 | ldi | t0, 0b11100000 | ; для выводов порта PG7-5 | |
38 | out | PORTG,t0 | ;включить подтягивющие резисторы | |
;--Конфигцрируем выводы портов (режим работы) | ||||
39 | ldi | t1, 0xFF | ;выводы РА | |
40 | out | DDRA, t1 | ;определить как выходы | |
41 | ldi | t1, (1<<DDB7)|(1<<DDB6) | ;выводы РВ7, РВ6 определить как | |
42 | out | DDRB,t1 | ;выходы, остальные - как входы | |
43 | ldi | t1, (1<<DDC3)|(1<<DDC2)| (1<<DDC1)|(1<<DDC0) | ; выводы РС3-0 определить как выходы | |
44 | out | DDRC,t1 | ; остальные – как входы | |
45 | ldi | t1, (1<<DDD5)|(1<<DDD4)| (1<<DDD3)|(1<<DDD2)| (1<<DDD1)|(1<<DDD0) | ; выводы PD6, PD7 определить как ; входы | |
46 | out | DDRD,t1 | ;остальные выводы – как выходы | |
47 | ldi | t1, (1<<DDE1) | ; вывод РЕ1 установить как выход, | |
48 | out | DDRE,t1 | ;остальные как вход | |
49 | ldi | t1, (1<<DDG4)|(1<<DDG3)| (1<<DDG2)|(1<<DDG1)| (1<<DDG0) | ;выводы PG7-5 установить как входы | |
50 | out | DDRG,t1 | ;остальные как выходы | |
51 | nop | |||
;--Инициализация АЦП | ||||
52 | ldi | t1, ADMX0 | ;записать в регистр ADMUX значение | |
53 | ldi | XL, ADMUX | ;соответствующее необходимому режиму | |
54 | st | X, t1 | ;работы мультиплексора АЦП | |
55 | ldi | t1, ADCRS | ;записать в регистр ADCSRA значение | |
56 | ldi | XL, ADCSRA | ;соответствующее необходимому режиму | |
57 | st | X,t1 | ;работы АЦП | |
№ | Мітка | Команда | Операнди | Примітка |
;--Инициализация работы с внешним ОЗУ | ||||
58 | ldi | t1, XMCR_A | ;сконфигурировать регистр А | |
59 | ldi | XL, XMCRA | ;управления | |
60 | st | X, t1 | ; внешним ОЗУ | |
61 | ldi | t1, XMCR_B | ;сконфигурировать регистр В | |
62 | ldi | XL, XMCRB | ;управления | |
63 | st | X, t1 | ; внешним ОЗУ | |
;--Порт USART | ||||
64 | ldi | t1, UCSRA | ;сконфигурировать регистр А | |
65 | ldi | XL, UCSR0A | ;управления | |
66 | st | X, t1 | ; модулем USART | |
67 | ldi | t1, UCSRB | ;сконфигурировать регистр B | |
68 | ldi | XL, UCSR0B | ;управления | |
69 | st | X, t1 | ; модулем USART | |
70 | ldi | t1, UCSRC | ;сконфигурировать регистр C | |
71 | ldi | XL, UCSR0C | ;управления | |
72 | st | X, t1 | ; модулем USART | |
№ | Мітка | Команда | Операнди | Примітка |
;--Инициализация ШИМ | ||||
73 | ldi | t1, TCCRA | ;сконфигурировать регистр А | |
74 | ldi | XL, TCCR1A | ;управления | |
75 | st | X, t1 | ;таймером-счетчиком Т1 | |
76 | ldi | t1, TCCRB | ;сконфигурировать регистр В | |
77 | ldi | XL, TCCR1B | ;управления | |
78 | st | X, t1 | ;таймером-счетчиком Т1 | |
79 | ldi | t1, TCCRC | ;сконфигурировать регистр С | |
80 | ldi | XL, TCCR1C | ;управления | |
81 | st | X, t1 | ;таймером-счетчиком Т1 | |
82 | ldi | t0, 0x07 | ; установка коеффициента | |
83 | ldi | XL, ICR1H | ; пересчета ТОР | |
84 | st | X, t0 | ; равного | |
85 | ldi | t0, 0xFF | ; ТОР=2^(N-1), где | |
86 | ldi | XL, ICR1L | ; N=11, т.е. | |
87 | st | X, t0 | ; ТОР=2047 | |
;--Инициализация ЖКИ | ||||
88 | initLCD_1: | ldi | t0,$20 | ;4-битный интерфейс, 1-строка, шрифт-5х7 точек |
89 | initLCD_2: | ldi | t0,$0C | ;включить дисплей, выключить курсор |
90 | initLCD_3: | ldi | t0,$01 | ;очистить дисплей и установить курсор в начальную позицию |
91 | nop | |||
92 | ret |
Висновок
В данній курсовій работі була розроблена система управління та керування об’єктом на базі одно кристального RISK AVR-мікроконтролера ATMega1281V-8AU , що складається з:
- Системи аналогового вводу інформації;
- Системи аналогового виводу інформації;
- Системи дискретного вводу інформації;
- Системи дискретного виводу інформації;
- Клавіатура;
- Індикація;
- Зовнішній ОЗП;
- Інтерфейс зв’язку з ПЕОМ.
Список використаних джерел
1. Евстифеев А.В. Микроконтроллеры AVR семейства Mega. Руководство пользователя. – М.: Издательский дом «Додэка-ХХІ», 2007. – 592с.: ил.
2. Голубцов М.С., Кириченкова А.В. Микроконтроллеры AVR: от простого к сложному. Изд.2-е, испр. и доп. – М.: СОЛОН-Пресс, 2004. – 304с.
3. Трамперт В. Измерение, управление и регулирование с помощью AVR микроконтроллеров.: Пер. с нем. – К.: «МК-Пресс», 2006. – 208с.
4. Микропроцессоры: В 3 кн. Кн. 2. Средства сопряжения. Контролирующие и информационно-управляющие системы: Учеб. для втузов/В.Д. Вернер, Н.В. Воробьев, А.В. Горячев и др.; Под. ред. Л.Н. Преснухина. – М.: Высш. шк., 1986. -383 с.: ил.
5. http://atmel.ru/Articles/Atmel17.htm
6. http://tehdoka.ru/BP/mst.php
7. http://www.gaw.ru/html.cgi/txt/interface/rs232/
0 комментариев