Hallo
Ohne Interrupts, dafür aber blockierend könnte es so funktionieren (noch nicht getestet):
Code:
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
}
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=16000
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
Lesezeichen