flux schrieb:
> Und außerdem wüsste ich gerne auch, woran das liegt. Weil ich kann
> eigentlich nichts im IRSND-Code entdecken, das das verursachen könnte.
Es gibt zwei Möglichkeiten: der Timer gibt's nicht her oder der Code ist
schlicht zu langsam. Ich tippe stark auf letzteres.
Überlege doch mal: wenn der Systemtakt 128kHz ist und die ISR mit einer
Interruptrate von 10kHz ausgeführt wird, bleiben für jede ISR nur exakt
12,8 Takte. Das reicht für einen minimalen Interrupt-Rahmen (8 Takte)
zum Sichern und Wiederherstellen eines einzigen Registers (4 Takte). Es
reicht schon nicht mehr dazu, das Statusregister zu sichern und
wiederherzustellen und Luft für irgendeinen Nutzcode bleibt natürlich
gar keine...
Bei 1MHz sieht das schon deutlich besser aus, da hast du dann 100 Takte
pro ISR. Aber: C ist tierisch ineffizient in ISRs, es würde mich kein
bissel wundern, wenn auch diese 100 Takte nicht genügen für den Code von
irsnd. Letzte Sicherheit liefert das Assemblerlisting der ISR, da kannst
du die benötigten Takte zählen. Wenn es mehr als 97 sind, kann die Sache
nicht funktionieren.
Asm rules! Damit kann man ganz sicher einen universellen IR-Sender bei
1Mhz realisieren. Wenn man nur einen ganz speziellen umsetzen möchte,
kann man mit dem Takt auch noch deutlich weiter runtergehen, muss ihn
dann aber möglichst "passend" wählen, idealerweise ein ganzzahliges
Vielfaches sowohl der Modulationsfrequenz als auch der Trägerfrequenz.