Квант ARM
С новой еще на улицу не выходил.
https://www.youtube.com/watch?v=dVnzbFinunI

(20-04-2023, 17:25)-vlad- : Но и на гвозди
гвозди надо вырезать, заходим в баланс грунта,
G.R .Centre # добавляем 15 и смотрин , гвозди слышно или нет, добавляем эти 15 пока гвозди не слышно.

G.R . Window # делаем +-15
Gal, гвозди с ними ясно. А вот если чистый грунт( без гвоздей) , но идет отклик от самой земли. Вот тут я запутался в меню.
Попробуйте тот же метод для грунта, посмотрите сколько надо сдвинуть середину для грунта и для гвоздей, а потом посмотрим что делать.

(28-04-2023, 17:59)-vlad- : Вот тут я запутался в меню.
Я тоже, поэтому предлагаю другой подход


Видео - 5 коп на пляже, глубина 25 см
Залил последнюю прошку, но погода...опять туча подходит. Попозже отпишусь.
Как погода?
KEN
Пытаюсь добавить Ваш квадратурный генератор до моего генератора синуса, но не получается, помогите пожалуйста ?
Код:
HardwareTimer Timer_3(3);// Управление квадратурным детектором - PB0 T3C3, PB1 T3C4
#define SAMPLES 133
#include <libmaple/dma.h>
//dma_tube_config dma_cfg, dma_cfg2;
int flag = 0;
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 *dev = PIN_MAP[out].timer_device;
//uint8 cc_channel = PIN_MAP[out].timer_channel;
dma_tube_config dma_cfg, dma_cfg2;
timer_dev *dev1 = PIN_MAP[out1].timer_device;
uint8 cc_channel1 = PIN_MAP[out1].timer_channel;

void fun()
{
  flag++;
}
void fun1()
{
  flag1++;
}

void timer_conf()
{
  Timer_3.pause();
  Timer_3.setCount(0);

  Timer_3.setOverflow(35);
  timer_oc_set_mode(TIMER3, 3, TIMER_OC_MODE_TOGGLE, TIMER_OC_PE);
  timer_oc_set_mode(TIMER3, 4, TIMER_OC_MODE_TOGGLE, TIMER_OC_PE);
  Timer_3.setCompare(TIMER_CH3, 4);
  Timer_3.setCompare(TIMER_CH4, 20);
  Timer_3.setSlaveFlags( TIMER_SMCR_TS_ITR3 | TIMER_SMCR_SMS_EXTERNAL  );

  Timer_3.refresh();
  Timer_3.resume();
  // Timer_3.pause();
  // Timer_3.setCount(0);
  /////////////
  //  timer_dma_set_base_addr(dev, TIMER_DMA_BASE_CCR2);
  //  timer_dma_set_burst_len(dev1, 1);
  //  timer_dma_enable_req(dev, cc_channel1);
  //  timer_set_reload(dev, 102);
  //  timer_set_prescaler(dev, 0);
  ///////////////
  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 = &(dev->regs.gen->DMAR);
  dma_cfg.tube_dst = &(dev1->regs.gen->DMAR);
  dma_cfg.tube_dst_size = DMA_SIZE_32BITS;
  //  dma_cfg.tube_src = val;
  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_CH1;
  dma_cfg.tube_req_src = DMA_REQ_SRC_TIM4_CH2;
  dma_cfg.target_data = 0;

  ret = dma_tube_cfg(DMA1, DMA_CH4, &dma_cfg);
  /////////
  Timer_3.pause();
  Timer_3.setCount(0);
    // PB0,PB1
  Timer_3.setPrescaleFactor(1);
  //  Timer_3.setOverflow((SAMPLES_TX / 2) - 1);
  Timer_3.setOverflow(35 - 1); //
  timer_oc_set_mode(TIMER3, 3, TIMER_OC_MODE_TOGGLE, TIMER_OC_PE);
  timer_oc_set_mode(TIMER3, 4, TIMER_OC_MODE_TOGGLE, TIMER_OC_PE);
  Timer_3.setCompare(TIMER_CH3, 4);
  Timer_3.setCompare(TIMER_CH4, 20);
  Timer_3.setSlaveFlags( TIMER_SMCR_TS_ITR3 | TIMER_SMCR_SMS_EXTERNAL  );

  Timer_3.refresh();
  Timer_3.resume();

  //////////
}

void dma_start()
{
  dma_attach_interrupt(DMA1, DMA_CH4, fun);
  dma_enable(DMA1, DMA_CH4);
  timer_resume(dev1);
  dma_enable(DMA1, DMA_CH1);
  dma_enable(DMA1, DMA_CH2);

}

void init_wave()
{
  int i;
  for (i = 0; i < SAMPLES; i++)
  {
    //    val[i] = 40 + amp * sin(stp * i);
    val1[i] = 40 + amp * sin(stp * i);
    //////////////

  }
}

void setup()
{
  pinMode(LED_BUILTIN, OUTPUT);

  int i;
  pinMode(out1, PWM); //
  pinMode(PB0, PWM); //Yy
  pinMode(PB1, PWM); //Xy
 
  timer_conf();
  dma_conf();
  dma_start();
  init_wave();
}

void loop()

{


}
(08-05-2023, 19:30)gal : Пытаюсь добавить Ваш квадратурный генератор до моего генератора синуса
Всё вместе не получиться на одном таймере, другой таймер задействовать надо.
У меня генератор синуса на тимер 4, a Ваш на тимер 3 .
Надо использовать два разных таймера, один для ШИМ синусоиды , другой для квадратурного детектора. В вашем примере попытка впихнуть всё в один таймер, так не получиться.
Кроме этого надо точно рассчитать значения регистров, вы же просто скопировали мои тайминги, при этом у вас 133 семпла, а у меня 64. Там очень много тонкостей, я тоже долго разбирался, перезаливал код десятки раз, пока всё не встало на свои места.