Hallo erstmal
auch wenn der Thread nicht mehr aktuell ist hoff ich dass ich schnelle Antwort bekomme.
Ich bin noch ziemlich neu beim Programmieren.
Bis jetzt hab ich es geschafft eine Mono-Melodie zu erstellen, wobei ich jeden Ton aber einzeln geschrieben hab.
Ich hab auch die Programme hier runtergeladen.
Ich versteh aber nicht, wie das mit dem StereoSound funktioniert. Ich könnts zwar einfach abschreiben und bei den Notenwerten was änder für ein andere Melodie, aber ich mache zurzeit bei der SIA mit und muss dort ein Projekt vorstellen. Und ich würd gerne das mit dem Musik abspielen machen.
Bitte kann mir mir jemand erklären was da genau programmiert wird?
Es handelt sich um diese Stelle:
#define FS 31250 // controlled by timer2 8Mhz/256

void StereoSound(uint16_t *noten1, uint16_t *noten2)
{
uint16_t index1=0,index2=0;
uint16_t timer1,timer2;
uint16_t phase1,phase2,angle1,angle2;
uint8_t dir1=FWD,dir2=FWD;
uint8_t speed1,speed2;

angle1=(uint32_t)noten1[index1++]*65536/FS;
timer1=noten1[index1++]*(FS/1000);
if(angle1==0)speed1=0;
else speed1=255;

angle2=(uint32_t)noten2[index2++]*65536/FS;
timer2=noten2[index2++]*(FS/1000);
if(angle2==0)speed2=0;
else speed2=255;
MotorSpeed(speed1,speed2);

cli(); // stop all interrupts
while(timer1!=0)
{
timer1--;
timer2--;

if(timer1==0)
{
angle1=(uint32_t)noten1[index1++]*65536/FS;
timer1=noten1[index1++]*(FS/1000);
if(angle1==0)speed1=0;
else speed1=255;

MotorSpeed(speed1,speed2);
}

if(timer2==0)
{
angle2=(uint32_t)noten2[index2++]*65536/FS;
timer2=noten2[index2++]*(FS/1000);
if(angle2==0)speed2=0;
else speed2=255;

MotorSpeed(speed1,speed2);
}
phase1+=angle1;

if(phase1&0x8000) dir1=FWD;
else dir1=RWD;

phase2+=angle2;

if(phase2&0x8000) dir2=FWD;
else dir2=RWD;
MotorDir(dir1,dir2);

// sync with Timer2 ( 31250Hz )
while(!(TIFR&(1<<TOV2)));
TIFR|=TIFR&(1<<TOV2);
}
MotorSpeed(0,0);
sei(); // enable all interrupts
Ich hoffe man kann mir weiterhelfen
Gruß Hiroaki