Hier die eigentliche Frage:
Ich will einen kleinen Funktionsgenerator mit nem AVR aufbauen, fürs Erste mal einfach Sinus und einstellbare Frequenz..
Ich mach das mit DDS, also ich hab ein Array in dem die entsprechenden Werte für ne Sinuskurve eingspeichert sind, dann lese ich das Array Zelle für Zelle aus und jag das Signal in nen 4-Bit DA-Wandler (ein R2R-Netzwerk)
Wenn ich den Code (diesmal in C gehalten) aufs Minimum reduzier funktioniert das ja noch, dann bekomm ich ne Sinuskurve mit der höchsten Frequenz die der Atmega32 liefern kann..
Ich hab gedacht um ne niedrigere Frequenz zu bekommen müsste ich nur Wartezeiten einfügen, so dass ein Spannungswert ne Zeit lang gehalten wird bevor der nächste drankommt.. Aber das funktioniert nicht!
Hier der wichtigste Teil des Codes:
Code: Alles auswählen
while(1)
{
y++;
if(y>10000)
{
PORTC=sinus[x];
x++;
if(x==60)
{
x=0;
}
y=0;
}
}
Wenn bei y>10000 oder y>10 macht keinen Unterschied, Frequenz bleibt gleich, immer Maximalfrequenz, als würde keine Verzögerung existieren .. Bei y>1000000 aber zb bekomm ich überhaupt kein Signal mehr! Die Ausgänge bleiben einfach alle auf 0V..
Liegt das irgendwie an den Optimierungsoptionen des Compilers? (Programmers Notepad, AVR-GCC, AVR-Dude)
Oder bleiben die Bits in den Ausgangsregistern nicht gesetzt wenn man Wartezeiten einfügt?
Was ist da los?
Bitte um Hilfe! Danke!
mfg
PS: genau dafür hab ich den Kerl in meiner Signatur entworfen

EDIT: egal, ich werde es jetzt einfach über Interrupts versuchen