STM32F103 - генератор синуса

Тед
Offline
Зарегистрирован: 06.11.2017
#define SAMPLES 2000

#define DEBOUNCE_DELAY 100

#define DEBOUNCE_IDLE 0
#define DEBOUNCE_ACTIVE 1

#include <libmaple/dma.h>
#include <EEPROM.h>

struct debounce_info
{
    int start, state;
    int16 shift;
}left, right, up, down;

dma_tube_config dma_cfg, dma_cfg2;

int flag1 = 0;
int flag2 = 0;

int out1 = PB7;           
int out2 = PA8;

int val1[SAMPLES];
int val2[SAMPLES];

int phasep = PB6;
int phasen = PB5;
int ampp = PB8;
int ampn = PB9;

int16 shift = 0;

int amp = 35;
int cnt = 0;
int time_track = 0;
float stp = 6.2831/SAMPLES;    
int ret = 17;

timer_dev *dev1 = PIN_MAP[out1].timer_device;
timer_dev *dev2 = PIN_MAP[out2].timer_device;
uint8 cc_channel1 = PIN_MAP[out1].timer_channel;
uint8 cc_channel2 = PIN_MAP[out2].timer_channel;

void fun()
{
    flag1++;
}

void fun2()
{
    flag2++;
}

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);
  
  timer_dma_set_base_addr(dev2, TIMER_DMA_BASE_CCR1);
  timer_dma_set_burst_len(dev2, 1);
  timer_dma_enable_req(dev2, cc_channel2);
  timer_set_reload(dev2, 102);
  timer_set_prescaler(dev2, 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);
    
    /* T1C1 DMA C2 */
    dma_cfg.tube_dst = &(dev2->regs.gen->DMAR);
    dma_cfg.tube_dst_size = DMA_SIZE_32BITS;
    dma_cfg.tube_src = val2;
    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_TIM1_CH1;
    dma_cfg.target_data = 0;
    
    ret = dma_tube_cfg(DMA1, DMA_CH2, &dma_cfg);
}

void dma_start()
{
  dma_attach_interrupt(DMA1, DMA_CH4, fun);
    
  dma_enable(DMA1, DMA_CH4);
  timer_resume(dev1);
  
  dma_attach_interrupt(DMA1, DMA_CH2, fun2);
    
  dma_enable(DMA1, DMA_CH2);
  timer_resume(dev2);
}

void init_wave()
{
  int i;
  for(i=0;i<SAMPLES;i++)
  {
      val1[i] = 50 + amp * sin(stp * i);
      val2[i] = val1[i];
  }
}

void get_wave(int16 shift)
{
  int i;
  for(i=0;i<SAMPLES;i++)
  {
      val2[i] = 50 + amp * sin( stp * i + shift * 0.1 * 6.2831 / 360);
  }
}

void setup() {
  int i;
  pinMode(out1, PWM);
  pinMode(out2, PWM);
  pinMode(phasep, INPUT);
  pinMode(phasen, INPUT);
  pinMode(ampp, INPUT);
  pinMode(ampn, INPUT);
  
  memset(&left, 0, sizeof(debounce_info));
  memset(&right, 0, sizeof(debounce_info));
  memset(&up, 0, sizeof(debounce_info));
  memset(&down, 0, sizeof(debounce_info));
  
  left.shift = -1;
  right.shift = 1;
  up.shift = 1;
  down.shift = -1;
  
  Serial.begin(9600);

  timer_conf();
  dma_conf();
  dma_start();
  
  init_wave();
  EEPROM.read(0, (uint16*)&shift);
  get_wave(shift);
  
}

void loop() {
  /*process_key(digitalRead(phasep), &right);
  process_key(digitalRead(phasen), &left);
  //process_key_amp(digitalRead(ampp), &up);
  process_key_amp(digitalRead(ampn), &down);*/
  delay(80);
  Serial.println(shift);
}

void process_key(int val, struct debounce_info *k)
{
  switch(k->state)
  {
    case DEBOUNCE_IDLE:
      if(val == HIGH)
      {
        k->state = DEBOUNCE_ACTIVE;
        k->start = millis();
      }
      break;
        
    case DEBOUNCE_ACTIVE:
      if(val == HIGH)
      {
        if(millis() - k->start > DEBOUNCE_DELAY)
        {
          shift += k->shift;
          get_wave(shift);
        }
      }
      else
        k->state = DEBOUNCE_IDLE;
        EEPROM.write(0, shift);
      break;
  }
}

void process_key_amp(int val, struct debounce_info *k)
{
  switch(k->state)
  {
    case DEBOUNCE_IDLE:
      if(val == HIGH)
      {
        k->state = DEBOUNCE_ACTIVE;
        k->start = millis();
      }
      break;
        
    case DEBOUNCE_ACTIVE:
      if(val == HIGH)
      {
        if(millis() - k->start > DEBOUNCE_DELAY)
        {
          amp += (int)k->shift;
          get_wave(shift);
        }
      }
      else
        k->state = DEBOUNCE_IDLE;
        
      break;
  }
}

 

Вот программа, пожалуйста подскажите как уменьшить шаг регулировки амплитуды в 10 раз.
b707
Offline
Зарегистрирован: 26.05.2017

что значит  "уменьшить шаг регулировки амплитуды"? - может просто "уменьшить амплитуду"? - тогда это несложно, в скетче есть параметр amp. который как раз отвечает за это

Тед
Offline
Зарегистрирован: 06.11.2017

Вот программа, пожалуйста подскажите как уменьшить шаг регулировки амплитуды в 10 раз.

#define SAMPLES 100

#define DEBOUNCE_DELAY 10

#define DEBOUNCE_IDLE 0
#define DEBOUNCE_ACTIVE 1

#include <libmaple/dma.h>
#include <EEPROM.h>

struct debounce_info
{
    int start, state;
    int16 shift;
}left, right, up, down;

dma_tube_config dma_cfg, dma_cfg2;

int flag1 = 0;
int flag2 = 0;

int out1 = PB7;           
int out2 = PA8;

int val1[SAMPLES];
int val2[SAMPLES];

int phasep = PB6;
int phasen = PB5;
int ampp = PB8;
int ampn = PB9;

int16 shift = 0;

int amp = 35;
int cnt = 0;
int time_track = 0;
float stp = 6.2831/SAMPLES;    
int ret = 17;

timer_dev *dev1 = PIN_MAP[out1].timer_device;
timer_dev *dev2 = PIN_MAP[out2].timer_device;
uint8 cc_channel1 = PIN_MAP[out1].timer_channel;
uint8 cc_channel2 = PIN_MAP[out2].timer_channel;

void fun()
{
    flag1++;
}

void fun2()
{
    flag2++;
}

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);
  
  timer_dma_set_base_addr(dev2, TIMER_DMA_BASE_CCR1);
  timer_dma_set_burst_len(dev2, 1);
  timer_dma_enable_req(dev2, cc_channel2);
  timer_set_reload(dev2, 102);
  timer_set_prescaler(dev2, 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);
    
    /* T1C1 DMA C2 */
    dma_cfg.tube_dst = &(dev2->regs.gen->DMAR);
    dma_cfg.tube_dst_size = DMA_SIZE_32BITS;
    dma_cfg.tube_src = val2;
    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_TIM1_CH1;
    dma_cfg.target_data = 0;
    
    ret = dma_tube_cfg(DMA1, DMA_CH2, &dma_cfg);
}

void dma_start()
{
  dma_attach_interrupt(DMA1, DMA_CH4, fun);
    
  dma_enable(DMA1, DMA_CH4);
  timer_resume(dev1);
  
  dma_attach_interrupt(DMA1, DMA_CH2, fun2);
    
  dma_enable(DMA1, DMA_CH2);
  timer_resume(dev2);
}

void init_wave()
{
  int i;
  for(i=0;i<SAMPLES;i++)
  {
      val1[i] = 50 + amp * sin(stp * i);
      val2[i] = val1[i];
  }
}

void get_wave(int16 shift)
{
  int i;
  for(i=0;i<SAMPLES;i++)
  {
      val2[i] = 50 + amp * sin( stp * i + shift * 0.1 * 6.2831 / 360);
  }
}

void setup() {
  int i;
  pinMode(out1, PWM);
  pinMode(out2, PWM);
  pinMode(phasep, INPUT);
  pinMode(phasen, INPUT);
  pinMode(ampp, INPUT);
  pinMode(ampn, INPUT);
  
  memset(&left, 0, sizeof(debounce_info));
  memset(&right, 0, sizeof(debounce_info));
  memset(&up, 0, sizeof(debounce_info));
  memset(&down, 0, sizeof(debounce_info));
  
  left.shift = -1;
  right.shift = 1;
  up.shift = 1;
  down.shift = -1;
  
  Serial.begin(9600);

  timer_conf();
  dma_conf();
  dma_start();
  
  init_wave();
  EEPROM.read(0, (uint16*)&shift);
  get_wave(shift);
  
}

void loop() {
  process_key(digitalRead(phasep), &right);
  process_key(digitalRead(phasen), &left);
  process_key_amp(digitalRead(ampp), &up);
  process_key_amp(digitalRead(ampn), &down);
  delay(100);
  /*Serial.println(shift);
  EEPROM.write(0, shift);*/
}

void process_key(int val, struct debounce_info *k)
{
  switch(k->state)
  {
    case DEBOUNCE_IDLE:
      if(val == HIGH)
      {
        k->state = DEBOUNCE_ACTIVE;
        k->start = millis();
      }
      break;
        
    case DEBOUNCE_ACTIVE:
      if(val == HIGH)
      {
        if(millis() - k->start > DEBOUNCE_DELAY)
        {
          shift += k->shift;
          Serial.println("increasing");
          Serial.println(shift);
          Serial.println(k->shift);
          get_wave(shift);
          
        }
      }
      else
        k->state = DEBOUNCE_IDLE;
        EEPROM.write(0, shift);
        Serial.println(shift);
      break;
  }
}

void process_key_amp(int val, struct debounce_info *k)
{
  switch(k->state)
  {
    case DEBOUNCE_IDLE:
      if(val == HIGH)
      {
        k->state = DEBOUNCE_ACTIVE;
        k->start = millis();
      }
      break;
        
    case DEBOUNCE_ACTIVE:
      if(val == HIGH)
      {
        if(millis() - k->start > DEBOUNCE_DELAY)
        {
          amp += (int)k->shift;
          get_wave(shift);
        }
      }
      else
        k->state = DEBOUNCE_IDLE;
        
      break;
  }
}

 

Тед
Offline
Зарегистрирован: 06.11.2017

1

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ты бухой штоли?

Тед
Offline
Зарегистрирован: 06.11.2017

1

Тед
Offline
Зарегистрирован: 06.11.2017

[quote=Тед]

#define SAMPLES 2000

#define DEBOUNCE_DELAY 100

#define DEBOUNCE_IDLE 0
#define DEBOUNCE_ACTIVE 1


 

b707
Offline
Зарегистрирован: 26.05.2017

забаньте спаммера

Тед
Offline
Зарегистрирован: 06.11.2017

регулировка амплитуды производится с помощью кнопок, 30 мВ на шаг, я хочу уменьшить ее в 10 раз

b707
Offline
Зарегистрирован: 26.05.2017

Тед пишет:

регулировка амплитуды производится с помощью кнопок, 30 мВ на шаг, я хочу уменьшить ее в 10 раз

ну и уменьшай, нафига форум-то засирать?

Админы, прибейте ветку!

Тед
Offline
Зарегистрирован: 06.11.2017

как удалить ошибки ?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Тед пишет:

регулировка амплитуды производится с помощью кнопок, 30 мВ на шаг, я хочу уменьшить ее в 10 раз

видимо, придёца каму-то лекцию читать, как 30 мВ на 10 поделить. 

Тед
Offline
Зарегистрирован: 06.11.2017
 
Сразу спам, - я нажал не это что нужно , ошибка.  Если вы не знаете ответа, лучше молчать.
b707
Offline
Зарегистрирован: 26.05.2017

Тед пишет:

 
 я нажал не это что нужно

5 раз подряд?

Тед
Offline
Зарегистрирован: 06.11.2017

5 раз я хотел удалить, не получилось.

b707
Offline
Зарегистрирован: 26.05.2017

Тед пишет:

5 раз я хотел удалить, не получилось.

ОК, оставим это.

Ответ на ваш вопрос про амплитуду - в сообщении #1

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Тед пишет:

amp = 35;
............................
      val1[i] = 50 + amp * sin(stp * i);
........................
      val2[i] = 50 + amp * sin( stp * i + shift * 0.1 * 6.2831 / 360);

это цитаты из кода

Тед пишет:

регулировка амплитуды производится с помощью кнопок, 30 мВ на шаг, я хочу уменьшить ее в 10 раз

это- пожелание.

=============================

Ну как сам-то думаешь?

.............

ИМХО  - все-таки он бухой! ...ну или совсем тупой! ;)

Попкорн, господа?

Тед
Offline
Зарегистрирован: 06.11.2017
Сам дурак, вместо того чтобы помочь обижаешь.
Форум - это место где люди должны помогать друг другу, пока таких не вижу.
DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

не, ну ты хоть маленька мозг-то наморщи.  В первом же сообщении (#1) и ответ. 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Тед пишет:

Форум - это место где люди должны
С хренов ли тебе тут кто-то должен? (В недоумении)
 
=====
Еще раз:
У тебя амплитуда имеет начальное значение 35 и изменения на +-1 от кнопок.
Ты хочешь в 10 раз мельче шаг.
-----
В обоих формулах пишешь  (amp/10)  вместо  amp . Начальное 350. Все!
Если это не понятно было изначально, то мой диагноз верен - совсем тупой.
Тед
Offline
Зарегистрирован: 06.11.2017

amp - это общее усиление, строки # 142,143 для регулировки амплитуды с помощью кнопок. Где  величина степеней настройки?

Тед
Offline
Зарегистрирован: 06.11.2017
 
здесь error
 
 int amp/10 = 350;
 
        ^
 
C:\Users\OWNER\Desktop\smiecie\generator\amplitude_1\amplitude_1.ino: In function 'void init_wave()':
 
amplitude_1:122: error: 'amp' was not declared in this scope
 
       val1[i] = 50 + amp * sin(stp * i);
 
                      ^
 
C:\Users\OWNER\Desktop\smiecie\generator\amplitude_1\amplitude_1.ino: In function 'void get_wave(int16)':
 
amplitude_1:132: error: 'amp' was not declared in this scope
 
       val2[i] = 50 + amp * sin( stp * i + shift * 0.1 * 6.2831 / 360);
 
                      ^
 
C:\Users\OWNER\Desktop\smiecie\generator\amplitude_1\amplitude_1.ino: In function 'void process_key_amp(int, debounce_info*)':
 
amplitude_1:227: error: 'amp' was not declared in this scope
 
           amp += (int)k->shift;
 
           ^
 
Using library EEPROM in folder: C:\Users\OWNER\AppData\Local\Arduino15\packages\stm32duino\hardware\STM32F1\2017.7.30\libraries\EEPROM (legacy)
exit status 1
expected initializer before '/' token
 
brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Застрелиться .... 

 int amp/10 = 350;

Вот в этой строке как раз делить на 10 не нужно.

Тед
Offline
Зарегистрирован: 06.11.2017

а что нужно ?

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

wdrakula пишет:

int amp = 35;
............................
      val1[i] = 50 + amp * sin(stp * i);
........................
      val2[i] = 50 + amp * sin( stp * i + shift * 0.1 * 6.2831 / 360);

вместо этих строк, вот эти:

int amp = 350;
............................
      val1[i] = 50 + amp/10.0 * sin(stp * i);
........................
      val2[i] = 50 + amp/10.0 * sin( stp * i + shift * 0.1 * 6.2831 / 360);

======================

 

offtop

даже забавно. Совершенно незамутненное интеллектом сознание...

Вы часом не коммунист? ;)

Тед
Offline
Зарегистрирован: 06.11.2017
 Сработало, Спасибо!!!
С ардуино у меня 2,5-месячный опыт так почему оскорбляют ?
wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Тед пишет:

 Сработало, Спасибо!!!
С ардуино у меня 2,5-месячный опыт так почему оскорбляют ?

извини, но тут все просто.

1. я старый (на днях 48 стукнуло) и очень опытный програмист.

2. у меня очень скверный характер.

3. я не работаю и не нуждаюсь в работе. в том смысле что обеспечен.

4. я заранее предупреждаю новичков, что плату за помощь беру глумежом и унижениями - должен же я как-то развлекать себя?

5. если ты оказался не предупрежден - жаль. ... но не очень.

6. я почти всегда, за исключением специфического оборудования, могу помочь новичку на этих условиях.

7. на мой взгляд - унижения это самый действенный педагогический прием. Новичек получает стимул во всем разобраться сам.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Тед пишет:

 Сработало, Спасибо!!!
С ардуино у меня 2,5-месячный опыт так почему оскорбляют ?

Потомушта, у тебя не с Ардуино опыт, а с передиранием чужих скетчей, не задумываясь как они работают.  Опыт, это когда сам, своими ручками и головой, со ступеньки на ступеньку... 

b707
Offline
Зарегистрирован: 26.05.2017

Тед пишет:
С ардуино у меня 2,5-месячный опыт так почему оскорбляют ?

если это вы после 2.5 месяцев пишете-  int amp/10 - то оскорбления заслужены...

Тед
Offline
Зарегистрирован: 06.11.2017

Я не такого писал 

Тед
Offline
Зарегистрирован: 06.11.2017

Wdrakula хороший человек обругал но помог.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Тед пишет:

 
здесь error
 
 int amp/10 = 350;
 
        ^
 
C:\Users\OWNER\Desktop\smiecie\generator\amplitude_1\amplitude_1.ino: In function 'void init_wave()':
 
 
А кто это написал !? Я что ли ?
Тед
Offline
Зарегистрирован: 06.11.2017

Это скопированный - compiling error 

b707
Offline
Зарегистрирован: 26.05.2017

Тед пишет:

Это скопированный - compiling error 

вы продолжаете городить одну тупость на другую :) Да, это ошибка компилятора. Но компилятор это сам придумал. что ли? - это ваш код!

Вот мне даже интересно, зачем человеку с таким уровнем интеллекта может понадобится генератор синуса? :))))

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

b707 пишет:

Вот мне даже интересно, зачем человеку с таким уровнем интеллекта может понадобится генератор синуса? :))))

Да накой он ваааще человеку нужен !? 

Небось препод попросил исправить, дабы проверить - сам он это накропал или спер где то :0)

wdrakula я готов из программиста стать таким же програмистом как ты не нуждающимся :) Расскажи кого нужно убить ?

b707
Offline
Зарегистрирован: 26.05.2017

brokly пишет:

Небось препод попросил исправить, дабы проверить - сам он это накропал или спер где то :0)

Семен-Семеныч!!! я все время забываю о пту-шниках.... сразу все встало на свои места... ну не интересуются такие кадры синусами в реальной жизни... только ради зачета...

sadman41
Offline
Зарегистрирован: 19.10.2016

b707 пишет:

Семен-Семеныч!!! я все время забываю о пту-шниках.... сразу все встало на свои места... ну не интересуются такие кадры синусами в реальной жизни... только ради зачета...

Иканомисты, кадровики и историки тоже синусами не интересуются. А так же сторожа, банщики, водители метро, швеи, булошники, мент... полиц... работники органов, химики и хирурги. И моему коту нассать на синусы эти ваши в реальной жизни.

Так что будем честны друг с другом - синусы нужны только ограниченному количеству людей - норкоманам, математикам и примкнувшим к ним программистам с физиками.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

brokly пишет:

wdrakula я готов из программиста стать таким же програмистом как ты не нуждающимся :) Расскажи кого нужно убить ?

Это деловое предложение? ;) Обсудим! ;) ;) ;)

arduino328
Offline
Зарегистрирован: 01.09.2016

Тед пишет:

Если вы не знаете ответа, лучше молчать.

Чтобы получить ответ, нужно правильно задать вопрос.

Чтобы правильно задать вопрос, нужно знать большую часть ответа.
http://arduino.ru/forum/otvlechennye-temy/robert-shekli-vernyi-vopros

Тед
Offline
Зарегистрирован: 06.11.2017
Спасибо ребята.
Благодаря вашей жестокой битве я научился регулировать амплитуду. И еще раз спасибо Вам wdrakula, вы с первого раза  дали правильный ответ, только  я  что-то попутал.
Тед
Offline
Зарегистрирован: 06.11.2017
только  wdrakula сразу понял, остальные сплетничали - не разбирались в теме.
Тед
Offline
Зарегистрирован: 06.11.2017
Подскажите пожалуйста, как добавить еще один выход с квадратными  импульсами. 
На выходе A8 - синусоидальный PWM преобразовать его в прямоугольные импульсы и потдать их на A11
Тед
Offline
Зарегистрирован: 06.11.2017
   val2[i] = 50 + amp/10.0 * sin( stp * i + shift * 0.1 * 6.2831 / 360);
 
Как сделать чтобы этоa строка включила светодиод на A11, когда синус положительный и выключила его когда  синус отрицательный ?
wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

1.ты уж разберись, тебе на А8 синус нужен или нет?

2. эта строка в порт ничего не пишет, просто массив заполняет.

zilk
Offline
Зарегистрирован: 09.08.2017

Тед пишет:

Wdrakula хороший человек обругал но помог.

Не стоит его за это благодарить, вот если бы он обругал, но не помог - результаты были-бы намного лучше!

Вот, например, меня этот "хороший человек" с аналогичной гоп-компанией пару раз макнули в дерьмо за глупые вопросы (стаж - 1,5 месяца) и в результате мне самостоятельно пришлось накропать скетч из 15 строк для attiny85, которая выдает 3-фазный ШИМ синус с регулировками амплитуды 0...5 В и частоты до 2 кГц.

А выговорите помог... нафиг нужна такая помощь? :))

Тед
Offline
Зарегистрирован: 06.11.2017

Синусу необходимо и дополнительно прямоугольник

Тед
Offline
Зарегистрирован: 06.11.2017

zilk

Но и зачем этот ответ не по теме вопроса ?

zilk
Offline
Зарегистрирован: 09.08.2017

Ответ как раз по теме - оставь надежду, всяк сюда входящий... :))

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

у тебя сложный для новичка скетч. С ДМА и таймером. На твоем уровне понимания - ты не добавишь туда ничего.

Про себя - прости, обещать не буду... может и помогу, а может и нет. От настроения. Без обид.

Тед
Offline
Зарегистрирован: 06.11.2017

Пока я использую LM386 (максимальное усиление ), я хотел  заменить его программой

Тед
Offline
Зарегистрирован: 06.11.2017

zilk

Вопрос был о прямоугольных импульсах