Gast
#597671
Hallo! Ich habe ein Problem, mit einer Testsoftware für einen AT90CAN128. Der AT90CAN128 ist über die SPI Schnittstelle mit einem 16-Bit Digital-Analog-Converter verbunden und ist so in der Lage, einen Analog-Spannungswert auszugeben. Die Ausgabe von Werten funktioniert bereits. Am DAC hängt noch ein Filter, welches getestet werden soll. Dazu soll ein "weißes Rauschen" ausgegeben werden. Hierfür habe ich einen Vektor von 2000 Werten mit Matlab erzeugt, die nun über SPI an den DAC gegeben werden sollen und dieser dann das Signal ausgeben soll. Ich habe die 2000 Werte einfach in einem U16-Array abgelegt. Nun wird in der Main-Loop des Programms je Durchlauf ein Wert ausgegeben und ein Index inkrementiert, mit dem dann im nächsten Durchlauf das nächste Element indiziert wird. Wird das 2000ste Element erreicht, wird der Zähler zurückgesetzt und es wird wieder das erste Element verwendet. Die 2000 Werte werden also zyklisch ausgegeben. Irgendwo scheint aber ein Fehler im Programm zu sein. Nach 43 Werten wird nämlich wieder der erste ausgegeben. Ich kann das aber nicht verstehen. Sind 2000 U16 Werte zu viel? Oder hab ich einen Fehler im Code? Der SPI-Teil ist getestet und funktioniert, ich werde ihn also hier nicht posten. Ich zeige euch einfach mal die Main-Loop: U16 data[2000] = { 20597, ... 41083 }; U16 i; U8 j; while(1) // Main-Loop { spi_dac_tx(data[i++]); // Ausgabe des Wertes data[i] über SPI if (i>=1999) i = 0; for(j=0;j<=1;j++); // kurze Verzögerung } Das Eigenartige ist, dass selbst bei der Simulation mit AVR Studio, wenn ich mir im Watch-Fenster die Variable data anzeigen lasse, nach dem 43.Wert wieder der erste angezeigt wird. Wo ist der Fehler??