In dat andere plaatje wat je gepost heb in die vorige thread is inderdaad precies wat ik bedoelde.
Je hebt helemaal geen 2 interrupts nodig.
Echter je tekent wel mooi een puls van 2 ms breed maar in werkelijkheid is het maar een pulsje van enkele instructies: Op die opgaande flank kom je binnen in je ISR, dan lees je de input van je IR sensor, schrijf je bitje weg in het array waar je het wil hebben, hoog een tellertje op en verlaat de routine.
De kunst is nu om de eerste puls ongeveer in het midden van je zender puls te krijgen.
Een van de oplossingen is om je timer in de main loop op een interval van 2 ms te zetten en je zet een flag die aangeeft dat het het eerste bitje is.
Dan in de ISR check je die vlag, is dat bitje '1' dan programmeer je je timer om op 4 ms t.b.v. je andere 23 bits en clear de flag.
Je leest dan je IR sensor op de normale manier en schrijft het bitje weg.
Vanaf dat punt is je interval van je timer netjes 4 ms en lees je de rest in.
Ipv een flag te gebruiken kun je natuurlijk ook je row/scan counter gebruiken, is die 0 moet je de timer in de ISR omprogrammeren, is die 23 geworden moet je de timer stoppen.
In je main loop wacht je gewoon tot je row counter 24 geworden is en ben je klaar.
Zoiets in pseudo code
main() {
rowcounter = 0;
settimer_interval(2);
if (rowcounter ==24) {
done
}
}
ISR() {
if (row==0) {
settimer_interval(4);
}
if (row==23) {
stop_timer();
}
bit = readISR();
// Store bit in array
// Hier hebben we het in het vorige topic over gehad.
row++;
}