Go Down

Topic: Interrupt - FALLING verhält sich wie CHANGE?! (Read 883 times) previous topic - next topic

Doc_Arduino

Hallo,

habs mal nachgestellt. Funktioniert fast wie erwartet. Nur das die Counter zueinander mit der Zeit wegdriften. Hängt damit zusammen das zwar beide zeitgleich ihr Signal sehen, aber beide ISRs nur nacheinander abgearbeitet werden. Mit millis Ausgabeintervall wirds nur schlimmer, mit harten delay weniger schlimm. Man erkennt aber das die Werte zueinander fast immer ca. ungefähr nahezu halbiert ist.

Code: [Select]

// https://forum.arduino.cc/index.php?topic=596606.0
// Arduino Mega2560

volatile int Flanken_L;  
volatile int Flanken_R;  

void setup() {
  Serial.begin(250000);
  
  attachInterrupt(digitalPinToInterrupt(18), count_Flanken_R , CHANGE);   // rechter Raddrehzahlsensor
  attachInterrupt(digitalPinToInterrupt(19), count_Flanken_L , FALLING);   // linker Raddrehzahlsensor

  pinMode(18, INPUT_PULLUP);
  pinMode(19, INPUT_PULLUP);
}

void loop() {

  delay(5000);

  Werte();

}

void Ausgabe (unsigned int interval)              // hat noch stärken Drift          
{
  static unsigned long last_ms = 0;
  
  unsigned long ms = millis();
  
  if (ms - last_ms >= interval) {
    last_ms = ms;
    noInterrupts();
    int tempL = Flanken_L;
    int tempR = Flanken_R;
    interrupts();
    Serial.print(tempL);
    Serial.print('\t');
    Serial.println(tempR);
  }
}


void Werte ()                        
{
    noInterrupts();
    int tempL = Flanken_L;
    int tempR = Flanken_R;
    interrupts();
    Serial.print(tempL);
    Serial.print('\t');
    Serial.println(tempR);
}

void count_Flanken_R(){
   Flanken_R++;
}

void count_Flanken_L(){
   Flanken_L++;
}


Werte
Code: [Select]

2    3
55    96
83    143
108    192
136    246
156    286
177    327
222    409
240    442
251    459
277    498
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

Whandall

#16
Feb 09, 2019, 08:24 pm Last Edit: Feb 09, 2019, 08:24 pm by Whandall
Hallo,

@ Whandall:  #9  pinD2 und pinD3 sind sicherlich keine Ausgänge. ;)
Oh doch, und zwar mit voller Absicht.

Damit kann ich aus dem Programm die Pins umschalten ohne Hardware zu benutzen,
die Interruptlogik interessiert nicht wo das Signal herkommt.
Ah, this is obviously some strange usage of the word 'safe' that I wasn't previously aware of. (D.Adams)

Doc_Arduino

Hallo,

daran hatte ich ehrlich gesagt nicht gedacht das man das so machen kann, vorallendingen mit Interrupts.

Habe mir nochmal "General Digital I/O" angeschaut. Tatsache, alle Port-Register hängen am I/O Pin. Das erklärt auch warum man die Ausgangspegel wiederum einlesen kann. Das nutzt du hier mit den Interrupts aus. Okay.   :D
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

Whandall

@Mahimus ich habe mir noch einmal deine Lichtschranken angeschaut, die sollten völlig prellfrei sein.

Lass mal das Debouncen ganz weg und schau wie es dann aussieht.
Ah, this is obviously some strange usage of the word 'safe' that I wasn't previously aware of. (D.Adams)

Mahimus

@Mahimus ich habe mir noch einmal deine Lichtschranken angeschaut, die sollten völlig prellfrei sein.

Lass mal das Debouncen ganz weg und schau wie es dann aussieht.
Doch, er "prellt", gerade wenn er langsam dreht. Der Mechanismus ist sicher ein anderer als beim Taster, aber beim Übergang von High zu Low oder umgekehrt, vermutlich wenn die Lichtschranke teilweise verdeckt ist, gibt er manchmal sowas aus:  "...0000101011111..."
Der Zustand ist dann denk ich nicht exakt definiert, bzw genau an der Grenze von "ich les das als offene Lichtschranke" oder "geschlossen". Dann kommt noch ein allgemeines Rauschen dazu und voila: Prellen.

Weiterhin habe ich den Versuch auch schon ohne Entprellen laufen lassen, gleiche Symptomatik wie in der Threadbeschreibung genannt.
Als Korrektur zu dem oben geschriebenen: Die höchste zu erwartende Frequenz sind 50Hz, das wären mit "Change" 100 ISR Ausführungen pro Sek, meine Entprellung lässt ~200 Ausführungen pro Sek zu. Alles gut. getestet hab ich bisher mit noch viel weniger Drehzahl (= geringere Abzutastende Frequenz).



@Doc_Arduino:  Danke für die Mühe. Irgendwie muss es wohl doch mein Fehler sein, aber ich komm nicht drauf. Ist echt komisch. Für das aktuelle Projekt ist es allerdings auch recht egal, ich nutze jetzt "Change" und weiß eben, dass das Rad nach 40 Interrupts eine Umdrehung gemacht hat.

Whandall

Hast du mal versucht, die Trimmpotis zu verstellen?

Ich denke dass die den Threshold beeinflussen.
Ah, this is obviously some strange usage of the word 'safe' that I wasn't previously aware of. (D.Adams)

Mahimus

Hast du mal versucht, die Trimmpotis zu verstellen?

Ich denke dass die den Threshold beeinflussen.
Ja, habe ich eingestellt. Wie hoch der Threshold liegt ändert aber nichts an der Tatsache, dass ich ihn durchfahren muss.

Whandall

Fremde Beleuchtung können die Schranken nicht abbekommen?
Ah, this is obviously some strange usage of the word 'safe' that I wasn't previously aware of. (D.Adams)

Mahimus

#23
Feb 11, 2019, 03:17 pm Last Edit: Feb 11, 2019, 03:18 pm by Mahimus
Fremde Beleuchtung können die Schranken nicht abbekommen?
Doch. Aber ein HIGH bleibt zumindest immer HIGH und ein LOW immer LOW. Die Fremdbeleuchtung allein hat also keinen so großen Einfluss, dass sie alleine einen fälschlichen Wechsel des Wertes auslöst. Nur beim gewollten Wechsel (Rad dreht sich) gibt es das "Prell"-Problem, aber dieses Problem ist ja gelöst.

Um die Hardware genauer zu beschreiben: Die Lichtschranke ist am Unterboden von einem kleinen Roboter, also kommt direkte Lichteinstrahlung nicht hin. Da ich keinen Anlass sehe das weiter abzuschirmen hab ich da bisher kein lichtdichtes Gehäuse für die Lichtschranken gebaut.

Whandall

Du könntest ja mal im Dunkeln testen, dann könntest du auch das Fremdlicht ausschließen.
Ah, this is obviously some strange usage of the word 'safe' that I wasn't previously aware of. (D.Adams)

Mahimus

Du könntest ja mal im Dunkeln testen, dann könntest du auch das Fremdlicht ausschließen.
Ich habe ja den Sensor bei den üblichen Lichtbedingungen analog Ausgelesen und da bekomm ich ne superhübsche Rechteckfunktion ohne nennenswerte Störung/Rauschen.
Weiterhin verhält er sich ja bei "Change" als Interruptauslöser und mit Entprellung so wie er soll. Da schaltet er also nicht fälschlicherweise. Licht war da auch an. Das Licht ist demnach schonmal nicht der Übeltäter.

Whandall

#26
Feb 11, 2019, 03:39 pm Last Edit: Feb 11, 2019, 04:09 pm by Whandall
Wenn du es sagst, aber du meintest auch schon CHANGE sei wie FALLING.  ;)

Mit "im Dunkeln" meinte ich ohne künstliche Beleuchtung.
Bei Tageslicht würde ich keine (Prell-)Störungen erwarten.
Ah, this is obviously some strange usage of the word 'safe' that I wasn't previously aware of. (D.Adams)

Mahimus

Wenn du es sagst, aber du meintest auch schon CHANGE sei wie FALLING.  ;)
Ich dachte mir schon, dass es keiner glaubt. Wenn ichs objektiv betrachte glaube ich auch, ich würde an eurer Stelle denken der TE hat den Sketch nicht hochgeladen oder sowas dämliches. Vielleicht probier ichs später nochmal aus und mach ein Video, wenn ich es wieder reproduzieren kann. Da es aber eher ein theoretisches Problem ist als ein praktisches widme ich mich eigentlich lieber den verbliebenen praktischen Problemen des Projekts.

Whandall

Ich dachte mir schon, dass es keiner glaubt. Wenn ichs objektiv betrachte glaube ich auch, ich würde an Da es aber eher ein theoretisches Problem ist als ein praktisches widme ich mich eigentlich lieber den verbliebenen praktischen Problemen des Projekts.
Na ja, ich finde du solltest schon genau feststellen woran der beschriebene Effekt liegt.
Wenn du das nicht tust, rächt sich das mit ziemlicher Sicherheit.

Dass es nicht an CHANGE/FALLING liegt habe ich doch mit meinem Sketch bewiesen.
Dein Sensor sollte nicht prellen, da werden OpAmps benutzt, die hoffentlich als Schmitt-Trigger beschaltet sind.

Deine analoges Messung zeigt dir vielleicht nicht die wirklichen Vorgänge, weil sie zu langsam abtastet.
Hast du ein Ozilloskop, oder so einen günstigen Logicanalyzer zur Verfügung?
Ah, this is obviously some strange usage of the word 'safe' that I wasn't previously aware of. (D.Adams)

postmaster-ino

Hi

Wie Dem  jetzt auch sei - finde ich die Herangehensweise des TO aber durchaus nett :).
50Hz werden erwartet, der ISR-Endpreller lässt 100Hz zu, durch das CHANGE wird die Lichtschranke 'irgendwann' wohl auch Mal mit Prellen fertig und im jetzigen Zustand verharren - eigentlich keine so dumme Lösung, wenn ich gefragt würde.

Denke immer noch, daß die Schlitzscheibe das Problem ist, da Diese unzureichend genau oder eben nur 'zu' schmutzig ist - das 'zu' besagt hierbei nicht, daß Da der Siff runter tropft, sondern, daß da eben ZU viel Schmutz dran ist - kann auch ganz wenig sein, aber eben zu viel.
(ist wie die Vorsilbe VER ... verlieren, verheiraten ... ups)

MfG
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

Go Up