Собственно вопрос в желании включения и выключения независимо друг от друга двух каналов Таймера 0 (АТтини2313)
написал вот такой код
(Logic1 и Logic2 - это включение каждого канала ШИМ)
(Logic3 и Logic4 - это выключение каждого канала ШИМ)
Проблема: каналы работаю нормально, если оба включаеются в одно и тоже время и выключаются в одно и тоже время, если же отдельно включить и выключить один из каналов - скажем запустить Logic1 и Logic3, то после этого два канала ШИМ будут иметь какюто пульсацию (светодиод имеет малое свечение)
Хотелось бы поставить правильное значение OCR0A и OCR0В, дабы все работало правильно, вот только не совсем понял, какие значения поставить)
//---------------------------------------------------------------------------
void Logic1 (void)
{
if (zz==2) {}
if (OCR0A>=255 && zz==1)
{
OCR0A=0xFF;
zz=2;
time3=0;
}
if (zz==1 && OCR0A<=254)
{
MK=MB;
if (time3<=MK) {time3++;}
else {time3=0;
//плавно увеличиваем ШИМ
OCR0A=OCR0A+1;}
}
if ( zz==0)
{
//включааем ШИМ
TCCR0A=0xA3;
OCR0A=0x00;
zz=1;
}
}
void Logic2 (void)
{
if (z==2) {}
if (OCR0B>=255 && z==1)
{
OCR0B=0xFF;
z=2;
time=0;
}
if (z==1 && OCR0B<=254)
{
MK=MB;
if (time<=MK) {
time++;}
else {time=0;
//плавно увеличиваем ШИМ
OCR0B=OCR0B+1;}
}
if ( z==0)
{
//включааем ШИМ
TCCR0B=0x02;
OCR0B=0x00;
z=1;
}
}
void Logic3 (void)
{
if (zz==2)
{
//включааем ШИМ
TCCR0A=0xA3;
OCR0A=0xFF;
zz=1;
}
if (zz==1 && OCR0A>=1)
{
MK=MB;
if (time2<=MK) {
time2++;}
else {time2=0;
//плавно уменьшаем ШИМ
OCR0A=OCR0A-1;}
}
if (OCR0A==0 && zz==1)
{
TCCR0A=0x21;
OCR0A=0x00;
zz=0;
time2=0;
}
}
void Logic4 (void)
{
if (z==2)
{
//включааем ШИМ
TCCR0B=0x02;
OCR0B=0xFF;
z=1;
}
if (z==1 && OCR0B>=1)
{
MK=MB;
if (time1<=MK) {
time1++;}
else {time1=0;
//плавно уменьшаем ШИМ
OCR0B=OCR0B-1;}
}
if (OCR0B==0 && z==1)
{
TCCR0B=0x03;
OCR0B=0x00;
z=0;
time1=0;
}
//---------------------------------------------------------------------------
Флуд и прочее приветствуется
Раздел: Песочница или Вопрос-Ответ
написал вот такой код
(Logic1 и Logic2 - это включение каждого канала ШИМ)
(Logic3 и Logic4 - это выключение каждого канала ШИМ)
Проблема: каналы работаю нормально, если оба включаеются в одно и тоже время и выключаются в одно и тоже время, если же отдельно включить и выключить один из каналов - скажем запустить Logic1 и Logic3, то после этого два канала ШИМ будут иметь какюто пульсацию (светодиод имеет малое свечение)
Хотелось бы поставить правильное значение OCR0A и OCR0В, дабы все работало правильно, вот только не совсем понял, какие значения поставить)
//---------------------------------------------------------------------------
void Logic1 (void)
{
if (zz==2) {}
if (OCR0A>=255 && zz==1)
{
OCR0A=0xFF;
zz=2;
time3=0;
}
if (zz==1 && OCR0A<=254)
{
MK=MB;
if (time3<=MK) {time3++;}
else {time3=0;
//плавно увеличиваем ШИМ
OCR0A=OCR0A+1;}
}
if ( zz==0)
{
//включааем ШИМ
TCCR0A=0xA3;
OCR0A=0x00;
zz=1;
}
}
void Logic2 (void)
{
if (z==2) {}
if (OCR0B>=255 && z==1)
{
OCR0B=0xFF;
z=2;
time=0;
}
if (z==1 && OCR0B<=254)
{
MK=MB;
if (time<=MK) {
time++;}
else {time=0;
//плавно увеличиваем ШИМ
OCR0B=OCR0B+1;}
}
if ( z==0)
{
//включааем ШИМ
TCCR0B=0x02;
OCR0B=0x00;
z=1;
}
}
void Logic3 (void)
{
if (zz==2)
{
//включааем ШИМ
TCCR0A=0xA3;
OCR0A=0xFF;
zz=1;
}
if (zz==1 && OCR0A>=1)
{
MK=MB;
if (time2<=MK) {
time2++;}
else {time2=0;
//плавно уменьшаем ШИМ
OCR0A=OCR0A-1;}
}
if (OCR0A==0 && zz==1)
{
TCCR0A=0x21;
OCR0A=0x00;
zz=0;
time2=0;
}
}
void Logic4 (void)
{
if (z==2)
{
//включааем ШИМ
TCCR0B=0x02;
OCR0B=0xFF;
z=1;
}
if (z==1 && OCR0B>=1)
{
MK=MB;
if (time1<=MK) {
time1++;}
else {time1=0;
//плавно уменьшаем ШИМ
OCR0B=OCR0B-1;}
}
if (OCR0B==0 && z==1)
{
TCCR0B=0x03;
OCR0B=0x00;
z=0;
time1=0;
}
//---------------------------------------------------------------------------
Флуд и прочее приветствуется
Раздел: Песочница или Вопрос-Ответ