Witam.
Mam program który generuję dźwięk na zestawie ZL3AVR.
Chciałbym generować dźwięk o określonej częstotliwości, a nie
tak jak jest teraz, czyli w postaci mikrosekund.
Wiem, że 1hz to 1/1s ale już gdy liczę na mikrosekundach, coś jest źle.
Pomoże ktoś ?
Mam program który generuję dźwięk na zestawie ZL3AVR.
Chciałbym generować dźwięk o określonej częstotliwości, a nie
tak jak jest teraz, czyli w postaci mikrosekund.
Wiem, że 1hz to 1/1s ale już gdy liczę na mikrosekundach, coś jest źle.
Pomoże ktoś ?
#include <avr/io.h>
#include <util/delay.h>
void voice(unsigned int frequency)
{
unsigned char x=0;
while(x<200)
{
PORTD |= _BV(7);
_delay_us(frequency);
PORTD &= ~_BV(7);
_delay_us(frequency);
x++;
}
}
int main(void)
{
DDRD |= _BV(7);
DDRD &=~_BV(0);
DDRD &=~_BV(1);
DDRD &=~_BV(2);
DDRD &=~_BV(3);
PORTD |= _BV(0)|_BV(1)|_BV(2)|_BV(3);
PORTD |= _BV(7);
while(1)
{
if(!(PIND & 0b00000001))
voice(1);
else
PORTD |= 0b00000001;
if(!(PIND & 0b00000010))
voice(100);
else
PORTD |= 0b00000010;
if(!(PIND & 0b00000100))
voice(500);
else
PORTD |= 0b00000100;
if(!(PIND & 0b00001000))
voice(1000);
else
PORTD |= 0b00001000;
}
}