Дорогие люди помогите с дипломом
! пишу про блокиратор LTE сети, используется микроконтроллер для синтеза аналоговых сигналов(Пилообразный и синус для шума) есть программа, сперта с texas instruments для MSP430, подойдет ли она на PIC16F628, т.к. видел что его чаще использовали для генераторов шума ( плюс в мсп 64 ноги - многовато
) ). Главный вопрос даже не в этом, мне необходимо получить эксперимент, а именно хотя бы спектры сигналов после микроконтроллера, какие программы использовать для запуска асс-рского кода и получения спектров? Вот программа для MSP430:
NAME PWMDAC
;************************************************************************************
; Программа реализации ЦАП на базе ШИМ
; Генерирует синусоиду частотой 250Гц с использованием ШИМ на базе таймера Timer_B.
;
; Описание: программа демонстрирует использование ШИМ-таймера совместно
; с внешними фильтрами для реализации ЦАП. Показан способ формирования
; синусоиды частотой 250Гц, пилообразного сигнала частотой 125Гц и
; сигнала с постоянным уровнем с использованием таймера Timer_B.
; Возможно аналогичное использование таймера Timer_A. В таблице sine table holds the
; хранятся отсчёты значений синусоиды. Для формирования «пилы» используется
; простой инкремент значения ШИМ. Постоянный уровень формируется зарядом
; конденсатора RC-цепи при помощи выхода ШИМ. Значение напряжения при этом
; прямо пропорционально коэффициенту заполнения сигнала ШИМ. После
; инициализации, ЦПУ переводится в режим пониженного энергопотребления LPM0.
; Он остаётся в этом режиме до прихода прерывания CCIFG0 от таймера Timer_B
; В подпрограмме обработки прерывания таймера Timer_B ISR в регистр CCR1
; загружается следующее значение для синусоиды, значение «пилы» инкрементируется
; и загружается в регистр CCR2. По возвращении из прерывания
; ЦПУ снова переходит в режим пониженного энергопотребления LPM0.
;************************************************************************************
#include "MSP430X14x.H" ; Включить в проект файл со
; стандартными определениями
Delta EQU 250 ; Delta = требуемая частота DCO/8192
; Требуемая частота генератора DCO = 2.048МГц
; Это значение используется
; в программном стабилизаторе FLL
; для калибровки частоты генератора DCO
; с использованием кварцевого
; резонатора с частотой 32768Гц
; в качестве опорного. Более подробная
; информация по стабилизации частоты
; генератора DCO и программе
; стабилизатора FLL см. пример применения
; под названием «Управление частотой
; генератора с цифровым управлением (DCO)
; микроконтроллеров MSP430x11x»
; ( "Controlling the DCO frequency of the
; MSP430x11x" Literature number SLAA074)
;--------------------------------------------------------------------------------------
RSEG CODE
;--------------------------------------------------------------------------------------
Sine_Tab DW 255 ; Таблица синуса, отсчёты
DW 254 ; десятичные значения
DW 246 ; загружаемые в регистр TBCCR1 для изменения
DW 234 ; коэффициента заполнения ШИМ.
DW 219 ; Вместо байт требуется использовать слова
DW 199 ; т.к. в регистры ТВ
DW 177 ; требуется записывать слово целиком
DW 153 ; Значение '0' использовать нельзя
DW 128 ; иначе таймер будет глючить.
DW 103
DW 79
DW 57
DW 37
DW 22
DW 10
DW 2
DW 1
DW 2
DW 10
DW 22
DW 37
DW 57
DW 79
DW 103
DW 128
DW 153
DW 177
DW 199
DW 219
DW 234
DW 246
DW 255
;------------------------------ Здесь начинается программа ----------------------------
RESET mov #02FEh,SP ; Инициализация указателя стека
StopWDT mov #WDTPW+WDTHOLD,&WDTCTL
; Остановить сторожевой таймер WDT
SetupP4 bis.b #00Eh,&P4SEL ; Выбрать TB1, TB2 и TB3 вместо портов
bis.b #00Eh,&P4DIR ; P4.x, и назначить их выходами
SetupBC mov.b #0A6h,&BCSCTL1 ; ACLK делится на 4. RSEL=6,
; MCLK и SMCLK не делятся,
; источником MCLK и SMCLK является DCO
; генератор XT2 выключен.
; ПРИМЕЧАНИЕ: для определения значения
; Rsel для требуемой частоты DCO,
; обратитесь к таблице DCO в докуметнтации
call #Delay ; Пауза для стабилизации кварца.
; Необходима из-за того, что
; кварцевый резонатор 32768Гц используется
; в качестве опорного для стабилизации частоты
; генератора DCO. Поэтому резонатор на 32768
; должен быть стабильным.
call #SW_FLL ; Вызов подпрограммы стабилизации
; частоты генератора DCO.
call #TB_SETUP ; Инициализация таймера Timer_B
; для генерации сигналов ШИМ
clr R15 ; R15 и R14 используются как указатели
clr R14 ; на таблицу синусов и для хранения
; значения «пилы» после стабилизации DCO
eint ; Разрешение прерываний
bis #LPM0,SR ; «усыпить» ЦПУ.
; Завершение программы
; остаётся обработчик прерывания CCIFG0
; где обновляются значения ШИМ
;--------------------------------------------------------------------------------------
Delay ; Программная пауза для стабилизации кварца
;--------------------------------------------------------------------------------------
mov #0004h,R15
L1 mov #0FFFFh,R14 ; ~ 1 секунда .
L2 dec R14 ;
jnz L2 ;
dec R15 ;
jnz L1 ;
ret ;
;
;--------------------------------------------------------------------------------------
SW_FLL ; Подпрограмма стабилизации частоты DCO.
; Кварцевый генератор 32768Гц используется
; в качестве опорной частоты для стабилизации
; и подстройки генератора DCO до требуемой
; частоты 2.048МГц. Это требуется в устройствах
; где нужна фиксированная частота DCO и для
; тех моделей MSP430 где нет аппаратного
; модуля FLL. См. руководства пользователя
; MSP430x3xx и MSP430x1xx Family
; User's Guides (literature number SLAU012 и
; SLAU049 соответственно) по вопросам,
; касающимся системы тактирования MSP430
;
; процедура основана на подсчёте тактов DCO
; за период ACLK (точнее, за 1/4 периода ACLK
; т.к. частота ACLK поделена на 4). Таймер
; Timer_A используется для подсчёта тактов DCO
; Полученное значение сравнивается с
; номинальным (Delta). Если число слишком
; большое, DCO декрементируется. Если число
; слишком маленькое, DCO инкрементируется.
; Далее сравнение повторяется.
; Процесс продолжается до тех пор, пока
; значения не сравняются. После этого
; DCO генерирует на требуемой частоте
; См. пример применения «Управление частотой
; генератора с цифровым управлением (DCO)
; микроконтроллеров MSP430x11x»
; ( "Controlling the DCO frequency of the
; MSP430x11x" Literature number SLAA074) по
; вопросам, связанным с управлением
; генератором DCO.
;
; Эта процедура вызывается только один раз
; в качестве примера, в реальных условиях
; её требуется выполнять периодически, чтобы
; быть уверенным, что генератор DCO
; остаётся откалиброванным.
;--------------------------------------------------------------------------------------
clr R15 ;
Setup_TA mov #TASSEL1+TACLR,&TACTL
; Источник тактирования TA - SMCLK
Setup_CC2 mov #CCIS0+CM0+CAP,&CCTL2
; Определить CCR2,CAP,ACLK
bis #MC1,&TACTL ; Запустить таймер timer_A
; в непрерывном режиме
Test_DCO bit #CCIFG,&CCTL2 ; Проверка флага захвата
jz Test_DCO ;
bic #CCIFG,&CCTL2 ; Очистка флага захвата
;
AdjDCO mov &CCR2,R14 ; В R14 число тактов SMCLK
sub R15,R14 ; в R14 разница
mov &CCR2,R15 ; В R15 число тактов SMCLK
cmp #Delta,R14 ; Delta = SMCLK/(32768/4)
jlo IncDCO ;
jeq DoneFLL ;
DecDCO dec.b &DCOCTL ;
jmp Test_DCO ;
IncDCO inc.b &DCOCTL ;
jmp Test_DCO ;
DoneFLL clr &CCTL2 ; очистить CCR2
clr &TACTL ; остановить таймер timer_A
ret ; возврат из подпрограммы
;--------------------------------------------------------------------------------------
TB_SETUP ; Подпрограмма инициализации таймера
; Timer_B для генерации ШИМ
;--------------------------------------------------------------------------------------
mov #TBSSEL1+TBCLR,&TBCTL
; SMCLK –источник тактирования TB.
mov #CCIE,&TBCCTL0 ; Перевести CCR0 в режим сравнения,
; разрешить прерывания от него
mov #0FFh,&TBCCR0 ; Записать 255d в CCR0. Это соответствует
; периоду ШИМ-выходов в 256 отсчётов (8 бит).
; т.е. получаем 8-битный ЦАП.
mov #02E0h,&TBCCTL1 ; Перевести CCRx в режим сравнения, запретить
mov #02E0h,&TBCCTL2 ; прерывания, режим выхода '7' , т.е.
mov #02E0h,&TBCCTL3 ; сброс/установка. Сигнал EQU0 устанавливает
; выход в «1», а EQU1 в «0». Установим
; условия сравнения для регистра как
; его равенство нулю
mov #Sine_Tab,&TBCCR1
; Загрузить первый отсчёт в CCR1
mov #01h,R14 ; Загрузить начальное значение «пилы» в R14.
mov #0AAh,&TBCCR3 ; И значение для постоянного уровня
; которое соответствует ~ 2/3 Vcc т.к.
; #0AAh это примерно 2/3 от #0FFh.
bis #MC0,&TBCTL ; Запустить таймер timer_B в режиме инкремента
ret
;--------------------------------------------------------------------------------------
TB_ISR ; Подпрограмма обработки прерываний таймера
; Timer_B: изменяет значения в регистрах
; CCR1 и CCR2 для изменения коэффициента
; заполнения ШИМ для синусоиды и «пилы».
; Значение в CCR3 не изменяется для
; формирования постоянного уровня
;--------------------------------------------------------------------------------------
incd R15 ; Инкремент указателя в R15 to
; для следующего значения в таблице синуса
; Инкремент двойной, т.к.
; значения в таблице двухбайтовые
and #03Fh,R15 ; Операция лог. «И» с числом 03Fh даёт
; счётчик по модулю 32 для указания на
; значения в таблице
mov Sine_Tab(R15),&TBCCR1
; Загрузить следующее значение синуса в CCR1
add #04h,R14 ; Инкрементировать значение «пилы»
; Изменение шага в R14
; приведёт к изменению частоты «пилы»
and #0FFh,R14 ; Исключим лишние биты
mov R14,&TBCCR2 ; Загрузим новое значение пилы в CCR2
reti ; возврат, прерывания разрешены
;-----------------------------------------------------------------------------------
COMMON INTVEC ; Вектора прерываний MSP430x14x
;-----------------------------------------------------------------------------------
ORG TIMERB0_VECTOR
DW TB_ISR ; Прерывание от CCIFG0
ORG RESET_VECTOR
DW RESET ; POR, внеш. Reset, Watchdog
END
Раздел: Школьникам и студентам