Двухканальный ШИМ без таймеров.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
FireProoF
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Re: Двухканальный ШИМ без таймеров.

Сообщение FireProoF »

Хах) Спасибо конечно, но я уже сварганил свой алгоритм) Правда запутанный, но работает)
Рассчитываем ближайшее изменение значения на одном из двух каналов, переключаем нужный канал, повторяем)
Твой я пока не могу понять. i1 и i2 это что?
P.S. еще рас спасибо за отклик
Реклама
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: Двухканальный ШИМ без таймеров.

Сообщение hybroid »

Это тоже самое, что счётный регистр таймера. Тики туда пишутся.
Реклама
Аватара пользователя
FireProoF
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Re: Двухканальный ШИМ без таймеров.

Сообщение FireProoF »

Спойлер

Код: Выделить всё

// delete.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <iostream>

using namespace std;

int i1,i2;        
int s1 = 5; // s-скважность от 0 до k
int s2 = 4;
const int k1=10, k2=5;  // периоды каналов
int time = 0;

bool buffer1[10000];
bool buffer2[10000];

bool pwm1_state, pwm2_state;

void step();
void changePWM1();
void changePWM2();

void main()
{
  i1=0;
  i2=0;
  buffer1[0] = 0;
  buffer2[0] = 0;
  
  for(int loops = 0; loops < 10000; loops++)
  {
    if(i1<k1)	
	{
		i1++;
		step();
	}
    else		
	{
		i1=0;
		//changePWM1();
		step();
	}
   
    if(i1<s1)	
	{
		pwm1_state = 0;
		step();
	}
    else
	{
		pwm1_state = 1;
		step();
	}
   
    // тоже самое для второго
    if(i2<k2)	
	{
		i2++;
		step();
	}
    else		
	{
		i2=0;
		//changePWM2();
		step();
	}
   
    if(i2<s2)	
	{
		pwm2_state = 0;
		step();
	}
    else
	{
		pwm2_state = 1;
		step();
	}
  }

  for(int i= 0;i<1000;i++)	
  {
	  if(i%44/*24*/==0)	cout<<endl;
	  cout<<buffer1[i];
  }
  int a;
  cin>>a;
}

void step()
{
	buffer1[time] = pwm1_state;
	buffer2[time] = pwm2_state;

	time++;
}

void changePWM1()
{
	(s1 >= k1)?	s1=0 : s1++;;
}

void changePWM2()
{
	(s2 >= k2)?	s2=0 : s2++;
}
Переделал код для ПК, ШИМ пишется в буфер. Вот гляньте, 1ца в периода уплывает влево всегда. С чем это связано?
И хочу менять скважность. Я располагаю функции изменения значения скважности, но на выходе ерунда)
Аватара пользователя
alex_
Опытный кот
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Re: Двухканальный ШИМ без таймеров.

Сообщение alex_ »

Вот скажи для чего ты step(); засунул во все дыры? :dont_know:
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
FireProoF
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Re: Двухканальный ШИМ без таймеров.

Сообщение FireProoF »

Я сунул его туда для подсчета глобального времени, чб записывать в буффер значения. Мне код не для МК, а для ПК сначала нужен
Реклама
Аватара пользователя
alex_
Опытный кот
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Re: Двухканальный ШИМ без таймеров.

Сообщение alex_ »

Мне код не для МК, а для ПК сначала нужен
Ты не поверишь что разницы то почти и нет, точнее вся разница заключается в выводе данных ПК->дисплюй МК->порт.
Я сунул его туда для подсчета глобального времени
Может быть, тебе виднее.
чб записывать в буффер значения.
В целом может быть но он записывает одно и тоже в результате не по разу, на мой взгляд это больше с толку сбивает.
Вот гляньте, 1ца в периода уплывает влево всегда.
Вот тут поподробнее, лучше небольшую картинку в качестве примера. Я твой код немного подшаманил вот что вышло:
СпойлерИзображение
Ай красота :)
Реклама
Аватара пользователя
FireProoF
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Re: Двухканальный ШИМ без таймеров.

Сообщение FireProoF »

Наконец-то оформил код под ПК. Просто сказка) И скважность меняется, и ничего никуда не уплывает по показателям) Спасибо, alex_!
Я вот теперь переношу на МК и возник вопрос где ставить задержку, чтобы ШИМ стал реальным и был виден на осциллографе? Поставил пока в конце главного цикла. Проверить работу не могу.
Аватара пользователя
alex_
Опытный кот
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Re: Двухканальный ШИМ без таймеров.

Сообщение alex_ »

You welcome :) 8)
Аватара пользователя
alex_
Опытный кот
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Re: Двухканальный ШИМ без таймеров.

Сообщение alex_ »

FireProoF писал(а): Я вот теперь переношу на МК и возник вопрос где ставить задержку
Не принципиально главное чтобы было в теле while(1) :)
Ответить

Вернуться в «Разные вопросы по МК»