Gast
#4779310
Hi,
ich hab eine Frage bezüglich Timing/ISR etc. pp. Folgendes Problem liegt
zu Grunde. Ich habe ein externes Clocksignal mit 106kHz. Nun möchte ich
abhängig meiner Daten ein Rechtecktsignal mit 53 kHz erzeugen. Dies
sollte möglichst syncron (konstanter Versatz von 3-4us kein Problem) mit
steigender Flanke meines externen Clocksignals mit 106kHz sein.
Momentan teste ich mein Timing mittels folgenden Code. Die Idee ist bei
jeder steigenden Flanke des Clocksignals den Output zu Toggeln und somit
einen Art Clockteiler zu bauen. Später soll der Output dann auf HIGH/LOW
entsprechend vorgegebenem Bitstrom gesetzt werden.
<code>
void setup(){
pinMode(13,OUTPUT);
attachInterrupt(1,ISR,RISING);
}
void loop(){
}
void ISR(){
PORTB |=!PortB;
}
</code>
Auf dem Oszi (Anhang) lässt sich erkennen das so kein Clockteiler
realisiert werden kann. Zum einen driften Output Signal auf Pin 13 und
Clock immer weiter auseinander und zum anderen ist der Output länger auf
High als auf Low, was ich mir erst recht nicht erklären kann. Meine
Befürchtungen momentan sind, dass 106 kHz Input und Test auf steigende
Flanke mittels einer ISR einfach zuviel für den guten Arduino ist. Bei
einer groben Überschlagsrechnung kam ich aber zu dem Ergebnis das
ungefähr 3us-4us für die Bearbeitung der ISR() nötig sind, was mir bei
einem 106kHz => 9.44us Signal doch eigentlich noch genügend Luft (~6us)
lässt?
Kann mir einer sagen wo ich hier den Denkfehler mache? Ist dies
überhaupt zu realisieren mit einem Arduino?
Grüße
JC
