Hey,

ich kämpf nun seit fast zwei Tagen mit der Lib von elm-chan

an sich funktioniert sie super!
Ich lass mir dir Werte der zeit über den comport an ein java program übertragen, dass die werte dann in balken anzeigt..

Program und weitere Infos hab ich hier gefunden :
http://www.mikrocontroller.net/topic/27001

Jetzt zu meinem eigentlichen Problem, wenn ich die assembler dateien von dem link auf mikrocontroller nehmen, dann hab ich ein wunderbares spektrum.
Nehm ich nun aber die Lib und leg kein Signal an, dann ist der erste Wert schon gut über 0 und der zweite Wert immer maximal. Leg ich nun ein Signal an, so bleiben die Werte Hoch, nur wenn sie überschrieben werden, sieht man, dass sie einen anderen Wert bekommen sollen.

Am ADC kann es nicht liegen, da die reine assembler datei mir alles richtig anzeigt.. jetzt hab ich schonmal versucht die routine und die Lib zu vergleichen, komm aber auf kein Ergebnis, wo der "Fehler" liegen kann.

Verzweifel langsam...
Würde ja gerne die reine Assembler datei verwenden, jedoch müsste des Ergebnis mit twi ausgelesen werden und ich hab keine Ahnung wie ich einen twislave transmitter in asm schreib, wohingegen ich im Wiki eine funktionierende C routine gefunden hab, die genau für meine Anwendung passt (Ein mega8 berechnet die FFT , das Ergebnis ist per twi von einem anderen AVR auslesbar ....)

Wenn jemand eine Idee hat, wäre ich dankbar!

@katz... ich lass den ADLAR Register wert weg, mit zeit mir die Routine ein seltsames Spektrum, ohne kann ich den Frequenzgang wunderbar nachvollziehen


€dit:

http://img337.imageshack.us/my.php?i...umrightjl1.png

so sollte es aussehen

es sieht aber so aus

http://img134.imageshack.us/my.php?i...pektrumwy7.png
(nicht wundern dass es 2 balken sind, hab mal zum testen von 128 auf 64 samples reduziert.. des program stellt das einfach dann 2mal dar)


so greif ich derzeit auf den ADC zu, da ich das problem mit den Balken genauer auswerten wollte, hab ich von freerunning auf abfrage basierend umgestellt

Das ich den channel wechsel hat folgendes ziel, dass 2 FFTS ausgeführt werden sollen, mit unterschiedlichen sample raten um bei 2 unterschiedlichen frequenzbereichen jeweils unterschiedliche auflösungen zu bekommen
Code:
void capture_wave (int16_t *buffer, uint16_t count, uint8_t channel)
{
	ADMUX = channel;	
//	ADMUX = _BV(ADLAR);
//	ADMUX |= _BV(REFS0);
	do {
		if (channel==1) {
		ADCSRA = _BV(ADEN)|_BV(ADSC)|_BV(ADFR)|_BV(ADIF)|_BV(ADPS2)|_BV(ADPS1)|_BV(ADPS0) ;
		} else 
		{
		ADCSRA = _BV(ADEN)|_BV(ADSC)|_BV(ADFR)|_BV(ADIF)|_BV(ADPS2)|_BV(ADPS0) ;
		}
		while(bit_is_clear(ADCSRA, ADIF));
		*buffer++ = ADC - 32768;
	} while(--count);

	ADCSRA = 0;
}






void do_ffft (void) {
uint16_t  n, s;
	capture_wave(capture, FFT_N,0);
	fft_input(capture, bfly_buff);
	fft_execute(bfly_buff);
	fft_output(bfly_buff, spektrum);
	for (n = 0; n < FFT_N / 2; n++) {
		s = spektrum[n];
//		if (n>0 && n<=4) {
//		uartSendByteAsClear16(s);
//		}
		UART_transmit(s);
	}
	capture_wave(capture, FFT_N,0);
	fft_input(capture, bfly_buff);
	fft_execute(bfly_buff);
	fft_output(bfly_buff, spektrum2);
	for (n = 0; n < FFT_N / 2; n++) {
		s = spektrum2[n];
//		if (n>0 && n<=4) {
//		uartSendByteAsClear16(s);
//		}
		UART_transmit(s);
	}
UART_transmit(254);

}

Ich hab auchmal für mich die Werte per Termminal program in dem besagten Bereich angeschaut und der erste wert hat immer etwas im Bereich 14XXX ... was normal nicht sein sollte?!