Двухканальный ШИМ без таймеров.
- FireProoF
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Чт май 14, 2015 15:11:39
- Откуда: Саратов
Re: Двухканальный ШИМ без таймеров.
Хах) Спасибо конечно, но я уже сварганил свой алгоритм) Правда запутанный, но работает)
Рассчитываем ближайшее изменение значения на одном из двух каналов, переключаем нужный канал, повторяем)
Твой я пока не могу понять. i1 и i2 это что?
P.S. еще рас спасибо за отклик
Рассчитываем ближайшее изменение значения на одном из двух каналов, переключаем нужный канал, повторяем)
Твой я пока не могу понять. i1 и i2 это что?
P.S. еще рас спасибо за отклик
- Реклама
Re: Двухканальный ШИМ без таймеров.
Это тоже самое, что счётный регистр таймера. Тики туда пишутся.
- FireProoF
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Чт май 14, 2015 15:11:39
- Откуда: Саратов
Re: Двухканальный ШИМ без таймеров.
Спойлер
Код: Выделить всё
// 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++;
}И хочу менять скважность. Я располагаю функции изменения значения скважности, но на выходе ерунда)
Re: Двухканальный ШИМ без таймеров.
Вот скажи для чего ты step(); засунул во все дыры? 
- FireProoF
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Чт май 14, 2015 15:11:39
- Откуда: Саратов
Re: Двухканальный ШИМ без таймеров.
Я сунул его туда для подсчета глобального времени, чб записывать в буффер значения. Мне код не для МК, а для ПК сначала нужен
- Реклама
Re: Двухканальный ШИМ без таймеров.
Ты не поверишь что разницы то почти и нет, точнее вся разница заключается в выводе данных ПК->дисплюй МК->порт.Мне код не для МК, а для ПК сначала нужен
Может быть, тебе виднее.Я сунул его туда для подсчета глобального времени
В целом может быть но он записывает одно и тоже в результате не по разу, на мой взгляд это больше с толку сбивает.чб записывать в буффер значения.
Вот тут поподробнее, лучше небольшую картинку в качестве примера. Я твой код немного подшаманил вот что вышло:Вот гляньте, 1ца в периода уплывает влево всегда.
Спойлер

- FireProoF
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Чт май 14, 2015 15:11:39
- Откуда: Саратов
Re: Двухканальный ШИМ без таймеров.
Наконец-то оформил код под ПК. Просто сказка) И скважность меняется, и ничего никуда не уплывает по показателям) Спасибо, alex_!
Я вот теперь переношу на МК и возник вопрос где ставить задержку, чтобы ШИМ стал реальным и был виден на осциллографе? Поставил пока в конце главного цикла. Проверить работу не могу.
Я вот теперь переношу на МК и возник вопрос где ставить задержку, чтобы ШИМ стал реальным и был виден на осциллографе? Поставил пока в конце главного цикла. Проверить работу не могу.
Re: Двухканальный ШИМ без таймеров.
You welcome

Re: Двухканальный ШИМ без таймеров.
Не принципиально главное чтобы было в теле while(1)FireProoF писал(а): Я вот теперь переношу на МК и возник вопрос где ставить задержку


