Hallo,

folgendes Problem. Ich starte über eine Funktion eine ADC Messung mit einem externen ADC (parallele Anbindung). Dieser teilt mir das Ende seiner Wandlung über einen Interrupt mit. In dessen ISR kann ich nun die Daten mir einlesen.
Nun gut. Jetzt will ich aber, dass die gleiche Funktion, welche die Messung gestartet hat, den gemessen Wert zurückgibt. Jetzt stellt sich die Frage, wie weiß die Funktion, wann die ISR fertig ist (und der Wert somit eingelesen wurde)?

Code sieht ungefähr so aus:
Code:
unsigned short adc_read(void)
{
	// externe ADC Messung starten
	PORTD &= ~(1 << PD4);
	PORTD |= (1 << PD4);
}

ISR(INT1_vect)
{
	// CS auf low
	PORTD &= ~(1 << PD5);
	// RD auf low
	PORTD &= ~(1 << PD6);
	// Daten einlesen
	value = (PINB & 0x0F);
	value >>= 8; 
	value += PINC;	
	// RD wieder auf high
	PORTD |= (1 << PD6);
	// CS wieder auf high
	PORTD |= (1 << PD5);
}
Wie mach ich das elegant? Oder ist das ein ganz falsches Herangehen. Mir fallen noch viele "dumme" Lösungen ein, die aber alles andere als elegant sind.

Grüße,
hacker