Hallo
Ohne Interrupts, dafür aber blockierend könnte es so funktionieren (noch nicht getestet):
Kleiner Überschlag: Bei 8MHz und 2ms Impulslänge und Erhöhung des Zählers bei jedem Takt: 0,002s/(1/8000000)=0,002/0,000000125=16000Code:uint16_t get_RC(uint8_t kanal) { uint16_t count=0; if(kanal==1) // Erster RC-Kanal { while(PINC & 1); // warten bis Ende des aktuellen Impuls while(!(PINC & 1)); // warten auf Ende Pause while(PINC & 1) count++; // Impulslänge messen } if(kanal==2) // Zweiter RC-Kanal { while(PINC & 2); while(!(PINC & 2)); while(PINC & 2) count++; } return(count); // Zählwert übergeben }
Weil "while(PINC & 1) count++;" aber sicher mehr als einen Takt benötigt wird dieser Wert nie erreicht und eine 16-Bit-Variable reicht als Zähler.
Gruß
mic







Zitieren

Lesezeichen