![]() |
|
|
Курсовая работа: Программно управляемый генератор линейно-нарастающего напряжения сверхнизкой частоты на микроконтроллереКак видно подпрограмма, соответствующая такому алгоритму генерации линейно-нарастающего напряжения, является оптимальной с точки зрения кода и выполняется за минимальное количество тактов. Весьма важным блоком программы является работа с ЖКИ. При установке режима по умолчанию на ЖКИ выводится следующее: «F = 2 Hz ». Далее при нажатии на кнопки изменяются лишь 4й и 5й символы, отображающие значение частоты, что происходит при помощи подпрограмм zamena и zamena1 соответственно. Для отображения на ЖКИ одного символа необходимо в переменную lcd записать значение символа, который необходимо отобразить, а далее проверить ЖКИ на готовность к общению и произвести запись в регистр DR. На рис. 4.4 приведен алгоритм вывода надписи на ЖКИ. Рассмотрим алгоритм, который реализован в подпрограммах готовности и записи в регистры IR и DR. Для этого на рис. 4.5 приведена а блок-схема алгоритма подпрограммы готовности, на рис.4.6а подпрограмма записи в регистр DR, на рис. 4.6б подпрограмма записи в регистр IR. Для осуществления работы с ЖКИ в каждой конкретной подпрограмме формируются необходимые в данном случае временные диаграммы :для случая записи в регистр IR и DR. Рис. 4.5 – Блок-схема алгоритма проверки ЖКИ на готовность Листинг подпрограммы готовности:
Рис. 4.6 – Блок-схема алгоритма подпрограмм записи в регистр IR(a) и записи в регистр DR(б) Листинг подпрограммы записи в регистр IR
Листинг подпрограммы записи в регистр DR
В подпрограммах замены указывается символ, который изменяется. Значение символа указывается непосредственно в блоке обработке нажатия кнопки. В случае если изменяется один выводимый на ЖКИ знак, вызывается подпрограмма zamenа (единицы), в случае изменения десятков дополнительно вызывается подпрограмма zamena1. Листинг подпрограммы замены единиц (zamenа) и десятков(zamena1):
Как видно из листинга, необходимое время задержки реализуется подпрограммой задержки, использование которой является более оптимальной с точки зрения программного кода.
Текст программы управления генератором линейно-нарастающего напряжения сверхнизкой частоты в полном объеме приведен в приложении А. 5. Результаты эмуляции в программы в пакете VMLAB Ниже приведены результаты эмуляции в пакете VMLAB, которые представляют собой полученные значения генерируемых частот, сведенные в таблицу 5.1. В качестве примера приводятся окно осциллографа программы, и отображаемая при этом на ЖКИ частота для второго и шестого режимов. Таблица 1 – Результаты эмуляции в пакете VMLAB
Отображаемое на ЖКИ значение частоты соответствует генерируемой в данный момент частоте для всех 16ти режимов. Соответствие кнопок частоте и полученная при анализе частота генерации показаны в таблице 5.1. 6. Анализ временных соотношений и оценка погрешностей Расчет константы N, которая записывается в регистр сравнения первого таймер-счетчика выполняется по следующим соотношениям:
Где 0.25 мкс – время тактирования генератора при тактовой частоте f=4МГц; Согласно техническому заданию расчет константы необходимо провести для шестнадцати режимов. Полученную константу N переведем в шестнадцатеричную систему. Соответственно ниже приведена таблица расчетов для 16ти частот: Табл. 2 – Расчет коэффициента N в зависимости от частоты
Тот факт, что деление приводит к наличию более чем 4х знаков за запятой, и значения необходимо округлять до целых, говорит о том, что при генерации возможно возникновение погрешностей. Однако согласно эмуляции в пакете VMLAB погрешности генерации частоты не превышают 1%. Выводы В ходе выполнения данного курсового проекта был разработан алгоритм, спроектирована принципиальная схема и написана программа управления генератора линейно-нарастающего напряжения с дискретно-изменяющейся частотой с помощью матрицы кнопок и плавно-изменяющейся амплитудой. Отображение генерируемой частоты осуществлялось с помощью ЖКИ. После выполнения поставленной задачи были сделаны такие существенные выводы: - проектирование и техническое выполнение генераторов линейно-нарастающего напряжения на базе микроконтроллеров является более оптимальным со схемотехнической точки зрения, с точки зрения управления и компактности устройства, а также точности получаемых значений; - погрешности получаемые при генерации весьма малы, что свидетельствует о точности расчета; - спроектированное устройство целиком и полностью соответствует техническому заданию. Данное устройство может получить применение в сфере телевидения для горизонтальной развёртки электронного луча в электронно-лучевой трубке, а также широко применяться в импульсной технике. Приложение А ; ****************************************************** ; BASIC .ASM template file for AVR ; ****************************************************** .include "D:\0B54~1\9E9E~1\VMLAB\include\m8515def.inc" ; Define here the variables ; программа генератор пилообразный напряжение .def temp = r16 .def adr = r17 .def reg = r18 .def const0 = r19 .def const01 = r20 .def time = r21 .def lev =r22 .def Comand =r23 .def lcd =r24 .def x =r25 .equ E = 2 .equ RW = 1 .equ RS = 0 ; Define here Reset and interrupt vectors, if any reset: rjmp start reti ; Addr $01 reti ; Addr $02 reti ; Addr $03 rjmp generation ; Addr $04 reti ; Addr $05 reti ; Addr $06 Use 'rjmp myVector' reti ; Addr $07 to define a interrupt vector reti ; Addr $08 reti ; Addr $09 reti ; Addr $0A reti ; Addr $0B This is just an example reti ; Addr $0C Not all MCUs have the same reti ; Addr $0D number of interrupt vectors reti ; Addr $0E reti ; Addr $0F reti ; Addr $10 ; Program starts here after Reset start: ldi temp,$02 out SPH,temp ldi temp,$5F out SPL,temp ;================= настройка портов =================== ldi temp,$F0 out DDRD,temp ldi temp,$FF out PORTD,temp out DDRC,temp out PORTC,temp ;================ настройка Т1 и прерываний ========== ldi temp, $40 out TIMSK, temp ldi temp, $09 out TCCR1B, temp sei ;================ загрузка констант =================== ldi const0,0 ldi const01,$01 ldi lev,$00 ldi x, $00 ;================ режим по умолчанию ================== ldi temp, high($1E78) out OCR1AH, temp ldi temp, low($1E78) out OCR1AL, temp ;================ инициализация ЖКИ =================== ldi Comand,$0C ;1100 определение режима отображения rcall gotov rcall LCD_Delay rcall zap_IR ldi Comand,$06 ;110 выбор направления сдвига rcall LCD_Delay rcall gotov rcall LCD_Delay rcall zap_IR ldi Comand,$38 ;развертка в одну строку rcall LCD_Delay rcall gotov rcall LCD_Delay rcall zap_IR ;================Вывод надписи============================ ldi lcd,$46 ;F rcall mm3 ldi lcd,$20 rcall mm3 ldi lcd,$3D ;= rcall mm3 ldi lcd,$20 rcall mm3 ldi lcd,$20 rcall mm3 ldi lcd,$32 ;2 rcall mm3 ldi lcd,$20 rcall mm3 ldi lcd,$48 ;H rcall mm3 ldi lcd,$7A ;z rcall mm3 ;================последовательный опрос клавиатуры ============= forever: ldi reg,$7F out PORTD,reg nop nop sbis PIND,0 rjmp r3 sbis PIND,1 rjmp r7 sbis PIND,2 rjmp r11 sbis PIND,3 rjmp r15 ldi reg,$BF out PORTD,reg nop nop sbis PIND,0 rjmp r2 sbis PIND,1 rjmp r6 sbis PIND,2 rjmp r10 sbis PIND,3 rjmp r14 ldi reg,$DF out PORTD,reg nop nop sbis PIND,0 rjmp r1 sbis PIND,1 rjmp r5 sbis PIND,2 rjmp r9 sbis PIND,3 rjmp r13 ldi reg,$EF out PORTD,reg nop nop sbis PIND,0 rjmp r0 sbis PIND,1 rjmp r4 sbis PIND,2 rjmp r8 sbis PIND,3 rjmp r12 rjmp forever ;=================== подпрограмма генерации ====================== generation: out PORTC, lev inc lev reti ;================== метки перехода на кнопки ===================== r0: ldi temp, high($1E78) ;2Гц out OCR1AH, temp ldi temp, low($1E78) out OCR1AL, temp ldi lcd, $32 rcall zamena1 rjmp forever r1: ldi temp, high($F40) ;4Гц out OCR1AH, temp ldi temp, low($F40) out OCR1AL, temp ldi lcd, $34 rcall zamena1 rjmp forever r2: ldi temp, high($A60) ;6 Гц out OCR1AH, temp ldi temp, low($A60) out OCR1AL, temp ldi lcd, $36 rcall zamena1 rjmp forever r3: ldi temp, high($7A0) ;8Гц out OCR1AH, temp ldi temp, low($7A0) out OCR1AL, temp ldi lcd, $38 rcall zamena1 rjmp forever r4: ldi temp, high($618) ;10Гц out OCR1AH, temp ldi temp, low($618) out OCR1AL, temp ldi lcd,$31 rcall zamena ldi lcd,$30 rcall zamena1 rjmp forever r5: ldi temp, high($510) ;12Гц out OCR1AH, temp ldi temp, low($510) out OCR1AL, temp ldi lcd,$31 rcall zamena ldi lcd,$32 rcall zamena1 rjmp forever r6: ldi temp, high($45C) ;14Гц out OCR1AH, temp ldi temp, low($45C) out OCR1AL, temp ldi lcd,$31 rcall zamena ldi lcd,$34 rcall zamena1 rjmp forever r7: ldi temp, high($3D0) ;16Гц out OCR1AH, temp ldi temp, low($3D0) out OCR1AL, temp ldi lcd,$31 rcall zamena ldi lcd,$36 rcall zamena1 rjmp forever r8: ldi temp, high($358) ;18Гц out OCR1AH, temp ldi temp, low($358) out OCR1AL, temp ldi lcd,$31 rcall zamena ldi lcd,$38 rcall zamena1 rjmp forever r9: ldi temp, high($30C) ;20Гц out OCR1AH, temp ldi temp, low($30C) out OCR1AL, temp ldi lcd,$32 rcall zamena ldi lcd,$30 rcall zamena1 rjmp forever r10: ldi temp, high($2C6) ;22Гц out OCR1AH, temp ldi temp, low($2C6) out OCR1AL, temp ldi lcd,$32 rcall zamena ldi lcd,$32 rcall zamena1 rjmp forever r11: ldi temp, high($28B) ;24Гц out OCR1AH, temp ldi temp, low($28B) out OCR1AL, temp ldi lcd,$32 rcall zamena ldi lcd,$34 rcall zamena1 rjmp forever r12: ldi temp, high($259) ;26Гц out OCR1AH, temp ldi temp, low($259) out OCR1AL, temp ldi lcd,$32 rcall zamena ldi lcd,$36 rcall zamena1 rjmp forever r13: ldi temp, high($22E) ;28Гц out OCR1AH, temp ldi temp, low($22E) out OCR1AL, temp ldi lcd,$32 rcall zamena ldi lcd,$38 rcall zamena1 rjmp forever r14: ldi temp, high($208) ;30Гц out OCR1AH, temp ldi temp, low($208) out OCR1AL, temp ldi lcd,$33 rcall zamena ldi lcd,$30 rcall zamena1 rjmp forever r15: ldi temp, high($1E8) ;32Гц out OCR1AH, temp ldi temp, low($1E8) out OCR1AL, temp ldi lcd,$33 rcall zamena ldi lcd,$32 rcall zamena1 rjmp forever ;================== работа с ЖКИ ============== LCD_Delay: ldi x,$04 L_loop: dec x brne L_loop ret gotov: ldi temp, $00 out DDRB,temp ldi temp, $FF out PORTB,temp out DDRA, temp mm1: ldi temp,0b00000010 out PORTA, temp rcall LCD_Delay sbi PORTA, E rcall LCD_Delay in temp, PIND rcall LCD_Delay cbi PORTA,E rcall LCD_Delay cbi PORTA,RW sbrs temp,7 ret rjmp mm1 zap_IR: ldi temp, $FF out DDRD,temp ldi temp, $00 out PORTA, temp out PORTD, Comand sbi PORTA,E rcall LCD_Delay cbi PORTA,E rcall LCD_Delay ret zap_DR: ldi temp, $FF out DDRD, temp ldi temp,0b00000001 out PORTA, temp rcall LCD_Delay out PORTD, lcd sbi PORTA,E rcall LCD_Delay cbi PORTA,E rcall LCD_Delay ret zamena: ldi Comand, $84 mm2: rcall LCD_Delay rcall gotov rcall LCD_Delay rcall zap_IR rcall LCD_Delay rcall gotov rcall LCD_Delay rcall zap_DR ret zamena1: ldi Comand,$85 rjmp mm2 mm3: rcall LCD_Delay rcall gotov rcall LCD_Delay rcall zap_DR ret |
Страницы: 1, 2
![]() |
||
НОВОСТИ | ![]() |
![]() |
||
ВХОД | ![]() |
|
Рефераты бесплатно, реферат бесплатно, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, сочинения, курсовые, дипломы, научные работы и многое другое. |
||
При использовании материалов - ссылка на сайт обязательна. |