Заменить синус на прямоугольник
- Войдите на сайт для отправки комментариев
Втр, 08/10/2019 - 19:14
Добрый день !
Вот программа генератора синуса с постом лооп .
#define SAMPLES 120 #include <libmaple/dma.h> dma_tube_config dma_cfg, dma_cfg2; int flag1 = 0; int out1 = PB7; int val1[SAMPLES]; int16 shift = 0; int amp = 40; int cnt = 0; int time_track = 0; float stp = 6.2831 / SAMPLES; int ret = 17; timer_dev *dev1 = PIN_MAP[out1].timer_device; uint8 cc_channel1 = PIN_MAP[out1].timer_channel; void fun() { flag1++; } void timer_conf() { timer_dma_set_base_addr(dev1, TIMER_DMA_BASE_CCR2); timer_dma_set_burst_len(dev1, 1); timer_dma_enable_req(dev1, cc_channel1); timer_set_reload(dev1, 102); timer_set_prescaler(dev1, 0); } void dma_conf() { dma_init(DMA1); /* T4C2 DMA C4 */ dma_cfg.tube_dst = &(dev1->regs.gen->DMAR); dma_cfg.tube_dst_size = DMA_SIZE_32BITS; dma_cfg.tube_src = val1; dma_cfg.tube_src_size = DMA_SIZE_32BITS; dma_cfg.tube_nr_xfers = SAMPLES; dma_cfg.tube_flags = DMA_CFG_SRC_INC | DMA_CFG_CIRC | DMA_CFG_CMPLT_IE; dma_cfg.tube_req_src = DMA_REQ_SRC_TIM4_CH2; dma_cfg.target_data = 0; ret = dma_tube_cfg(DMA1, DMA_CH4, &dma_cfg); } void dma_start() { dma_attach_interrupt(DMA1, DMA_CH4, fun); dma_enable(DMA1, DMA_CH4); timer_resume(dev1); dma_enable(DMA1, DMA_CH2); } void init_wave() { int i; for (i = 0; i < SAMPLES; i++) { val1[i] = 40 + amp * sin(stp * i); } } void setup() { int i; pinMode(out1, PWM); timer_conf(); dma_conf(); dma_start(); init_wave(); } void loop() { }
gena321 - признайтесь, вы же ни строчки не понимаете в этом коде?
давайте я вам слегка поясню - в первом коде значения массива val1[] загружаются в регистры таймера с помощью ДМА, позволяя генерить ШИМ с амплитудной модуляцией сложной формы.
А ко второму коду возникает два вопроса - 1) если нужны обычные прямоугольные импульсы, нафига использовать массив и подгрузку данных через ДМА, когда можно взять обычный ШИМ, который запускается раз в 10 проще?
И второй вопрос - что это за бредятина в луп, к чему там digitalWrite() - это вы так прямоугольные импульсы генерите? :))))
А до вопроса "как сделать луп пустым" я даже не добрался - он вообще не имеет смысла.
Зачем вы вообще взялись редактировать непонятный вам код? - насколько я понимаю, все что вам нужно - это генерить прямоугольник заданной частоты на PB6? - так это ж в три строки делается, а не в 90
А ведь дед дело говорит!
Нужно заменить эту строку чтобы вместо синуса получить прямоугольник.
Нужно заменить эту строку чтобы вместо синуса получить прямоугольник.
Нет, ну можно, наверное, гланды через задний проход удалять, но зачем? В ответе #3 вам же все разъяснили.
Нужно заменить эту строку чтобы вместо синуса получить прямоугольник.
если прямоугольник и правда прямоугольный :) - то не нужно, все делается в разы проще, без массивов и ДМА. Но если у вас прямоугольник какой-то особой сложной формы :) - то тогда предварительно генерите для него шейп по аналогии с генерацией синуса, сохраняйте в массив - а потом грузите массив в таймер. Так тоже будет работать, хотя согласен с предыдущим оратором насчет гланд и заднего прохода.
Оно конечно проще, если с нуля и не нульовый. Но если есть рабочий код и исправить пол строки, да к тому же нет квалификации вообще..
val1[i] = 40 + i>(SAMPLES>/2)?amp:-amp;
Оно конечно проще, если с нуля и не нульовый. Но если есть рабочий код и исправить пол строки, да к тому же нет квалификации вообще..
val1[i] = 40 + i>(SAMPLES>/2)?amp:-amp;
ну да, можно и так. Правда частота будет в 2 раза выше, чем у синуса, насколько я вижу.
сделал так
-
вы эту строчку как понимаете?
там два состояния, 0 или 1 (мне так кааца).
вы эту строчку как понимаете?
там два состояния, 0 или 1 (мне так кааца).
а как это можно понять? - это же бред полный.
Гена321 - чеж вы даже списать грамотно одну строку, которую вам Логик дал - и ту не сумели
gena321 - мож вы перестанете муйней страдать и напишете четко. что вы пытаетесь сделать? Генератор прямоугольных импульсов - это ШИМ, почему вы его не сипользуете?
А ведь дед дело говорит!
А когда было по-другому?
вы эту строчку как понимаете?
А Вы как?
Я вот никак не понимаю :(