hast deine while-Bedingungen falsch gesetzt. Zuerst wartest du ja solange der Pin low ist. Also
Code:
while(!(PINB & (1<<PB2));
Dann wartest du solange der Pin high ist:
Code:
while(PINB & (1<<PB2));
Außerdem würde ich das messen der Signallänge mit einem Timer machen. Einfach zwischen den beiden Schleifen den Timer auf 0 setzen und nach der zweiten Schleife den Timerstand auslesen. (musst natürlich den Prescaler so anpassen, dass das zur Signallänge passt und wahrscheinlich einen 16bit Timer benutzen)
den Pullup an deinem Eingang kannst du weglassen (keine Ahnung obs einen Unterschied macht wenn du ihn anmachst, ich habs jedenfalls ohne gemacht und das funktioniert ohne Probleme.)
Lesezeichen