Ein kleines Rechenbeispiel:Zitat von rathma
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.
jo, sicher tut es das, allerdings sollte man dann auch die 2 Takte von der Schleife abziehen.Zitat von teslanikola
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.
Lesezeichen