Freunde der Nacht, ich komme hier einfach nicht weiter...
Ich greife über einen Pin Interrupt die Werte von vier Eingängen ab
Diese Werte werden im "Loop" entsprechend verändert und wieder ausgegeben.
Die Ausgabe erfolgt über eine Signalgenerierung, die wie folgt aussieht:
void setup()
{
...
// only allow pin change interrupts for digital pins 10-13.
PCMSK0 = (1 << PCINT2) | (1 << PCINT3) | (1 << PCINT4) | (1 << PCINT5);
PCICR = (1 << PCIE0);
.....
loop()
{
....
for ( int i = 0; i < SERVOS; i = i + 1 ) {
digitalWrite(servoPin, LOW); // Initiate pulse start
delayMicroseconds(pulseStart); // Duration of pulse start
digitalWrite(servoPin, HIGH); // Stop pulse start
delayMicroseconds(g_values[i]); // Finish off pulse
}
digitalWrite(servoPin, LOW); // Initiate synchronisation pulse
delayMicroseconds(pulseStart); // Duration of start of synchronisation pulse
digitalWrite(servoPin, HIGH); // Stop synchronisation pulse start
....
Betrachte ich das generierte Signal mit dem Oscilloskop. So bekomme ich bei einem ausgelösten Interrupt immer eine leichte Ungenauigkeit in das aufgebaute Signal...
Was eigentlich klar ist, den der Interrupt verzögert die Generierung des Signalaufbaus und somit stimmt das Signal nicht mehr.
Jetzt suche ich verzweifelt nach einer Möglichkeit, den Interrupt für die oben genannte Codepassage zu deaktivieren, ohne die delayMicroseconds Methode in Mitleidenschaft zu ziehen.
Hat jemand einen Tipp für mich?