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:
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.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); }
Grüße,
hacker
Lesezeichen