Cytat:#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
int s; //zmienna do zmiany korekcji PWM
int i;
void PWM_Init()
{
TCCR0|=(1<<WGM00); //tryb PWM
TCCR0&=~(1<<WGM01);
TCCR0&=~(1<<COM00); // tryb porównania
TCCR0|=(1<<COM01);
TCCR0|=(1<<CS00); // prescaler
TCCR0|=(1<<CS01);
TCCR0|=(1<<CS02);
}
void zwieksz()
{
s=s+10;
if(s>255)
s=255;
else
{
for(i=0;i<50;i++)
_delay_ms(10);
}
}
void zmniejsz()
{
s=s-10;
if(s<0)
s=0;
else
{
for(i=0;i<50;i++)
_delay_ms(10);
}
}
int main(void)
{ DDRB=0b00001000;
DDRA=0x00;
PORTB=0b00001000;
PWM_Init();
sei();
s=0;
while(1)
{
OCR0=s;
if(bit_is_clear(PINA,1))
{
zwieksz();
}
else if(bit_is_clear(PINA,2))
{
zmniejsz();
}
else if(bit_is_clear(PINA,4))
{
s=0;
}
}
}
Witam,
mam kolejny problem z cyklu programowania..
Układ ma za zadanie zgłaśnianie i z ciszanie i wyłączanie buzzera przyciskami.
Niestety nie mogę sobie poradzić z programem, ten wyżej powoduje dzwięki w losowym czasie i z losową długością, na przyciski nie reaguję, a są one podłączone tak:
PIN----GND
|
10k
|
VCC
Może ustawienia samego PWM są złe, nie ukrywam, że sprawia mi on spory problem, bo nie wiedziałem od czego się zabrać, I też nie wiem gdzie w avr studio ustawić częstotliwość, i czy dodać swó kwarc 16MHz do układu?