Свежие обсуждения
Микроконтроллеры

Помогите с примером кода на С для шим

Доброго времени суток, недавно встал вопрос сформировать на С код для PIC 16F886 , в частности шим генератор (прямоугольные\пилообразные импульсы) с изменяющейся длительностью в пределах от 1 до 500 мс, если кто может- помогите с кодом

 

Lerts: PIC16F886
У него есть аппаратный ШИМ. Но можно и программно сделать.
Прямоугольник он легко сделает, а вот пилу можно только очень приближонно имитировать или использовать внешние цепочки для преобразовании прямоугольника в пилу.

 

программно я уже сделал, подскажешь как сделать аппаратный шим? мне сказали там 2 строчки кода )

 

1. Google PIC16F886
2. Microchip PIC16F886 pdf
3. Открываем страницу 125 "CAPTURE/COMPARE/PWM MODULES" и читаем подраздел "PWM Mode". PWM = ШИМ.

 

мне бы лучше с примером кода на компилятор "mikro C for PIC"

 

int BUT(int);

void main()
{

int n=100;
TRISA = 0x00; // set direction to be output
TRISB = 0xFF; // set direction to be input
PORTA=PORTB=0;

while(1)
{
int t=0;
while (t=150)
{
if(t=n)PORTA.RA0 =1;
else PORTA.RA0=0;
t++;
}

n=BUT(n);
}

return;
}
int BUT(int n)
{

char Pressedkey = '0';
char key='0';

if (PORTB.RB0==1)
key = '+';
else if (PORTB.RB1==1)
key = '-';

else
{
key = '0';
Pressedkey=key;
}
if (Pressedkey != key) Delay_ms(100);
Pressedkey=key;

switch (Pressedkey)
{
case '+':n+=20;break;
case '-':n-=20;break;
default: break;
}
return n;

}

 

вопрос почему не меняетзначение длительности импульса (переменная n ) ?

 

Ошибка тут, походу:
Lerts: while (t=150)
Lerts: if(t=n)PORTA.RA0 =1;

Вам точно надо в условиях присваивать а не сравнивать?

 

из микро С неправильно скопировало там (t меньше =...)