TomSawer
19.03.2011, 15:04
Hallo!
Ich habe einen 4bit up/dwn timer an einen Port des Atmega angeschlossen.
Der Timer wird mit 1Khz ausgelesen. Als return möchte ich die differenz als int8_t
von -8 bis +8.
Zudem soll der Code, aufgrund der hohen Frequenz, effizient sein!
So funktionierts schonmal... aber da kann man sicher mächtig optimieren!
Jemand nen Tipp??? Viele Dank!
ISR, 1Khz {
static int old; // alter Zählerstand
int new, dir, diff;
new = PINC & 0x0F; // neuer Zählerstand, 4 bit ausmaskiert
if (new > old) {
diff = new - old;
dir = 1;
}
else {
diff = old - new;
dir = -1;
}
if (diff > 8) {
diff = (16 - diff);
dir *= -1;
}
diff *= dir;
old = new;
return diff;
}
Ich habe einen 4bit up/dwn timer an einen Port des Atmega angeschlossen.
Der Timer wird mit 1Khz ausgelesen. Als return möchte ich die differenz als int8_t
von -8 bis +8.
Zudem soll der Code, aufgrund der hohen Frequenz, effizient sein!
So funktionierts schonmal... aber da kann man sicher mächtig optimieren!
Jemand nen Tipp??? Viele Dank!
ISR, 1Khz {
static int old; // alter Zählerstand
int new, dir, diff;
new = PINC & 0x0F; // neuer Zählerstand, 4 bit ausmaskiert
if (new > old) {
diff = new - old;
dir = 1;
}
else {
diff = old - new;
dir = -1;
}
if (diff > 8) {
diff = (16 - diff);
dir *= -1;
}
diff *= dir;
old = new;
return diff;
}