Zitat Zitat von rathma
aber es sollten nicht auch 1 usec 6 usec oder mehr werden
Ein kleines Rechenbeispiel:

20 MHz = 50 ns / Takt
=> 20 Takte = 1µs

Bei einem ATmega 32 benötige ich um in die ISR zu springen, 6 Takte.
Der Rücksprung nimmt mal eben 4 Takte ein.

Damit sind schon alleine dadurch, das ein Interupt aufgetreten ist, mal eben 10 Takte weg.

Bedenkt man noch, das in ISR zumindest das Statusregister SREG gesichert und wiederhergestellt werden sollte, sind im einfachsten Fall weitere 2 Takte verbraten (bei Basecom typischerweise 6, da dieses danach noch aufn Stack gepusht wird).

Damit sind wir nun schonmal bei 12 - 16 Takten ... nur, weil mal eben nen Interupt auftrat.

In einer ISR wird ja nun noch das eine oder andere gemacht ...
z.B. weitere Register auf den Stack geschoben und wieder runtergeholt, irgendwelche Rechenoperationen etc.

Fakt ist daher, so wie der Code dort steht ist er (leider) nicht wirklich genauer wie waitms von Basecom.



Zitat Zitat von teslanikola
aber ich denke das das CLI und SEI lösen das problem
jo, sicher tut es das, allerdings sollte man dann auch die 2 Takte von der Schleife abziehen.

Im übrigen, sollte man vor allem längere Wartezeiten nicht mit Schleifen sondern mit einem Timer realisieren.

So, ich hoffe nun einmal ein paar Denkansätze gegeben zu haben.

Grüße,

da Hanni.