-         

Ergebnis 1 bis 7 von 7

Thema: Sehr kurioses Problem mit INT0 und INT1 !!!

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.09.2004
    Beiträge
    119

    Sehr kurioses Problem mit INT0 und INT1 !!!

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo

    ich erklär erst mal die Fakten:

    ich hab ein RN-Control mit exterer H-Brückenschaltung mit 2 Getriebemotoren
    an den Rädern befinden sich je eine Gabellichtschranke mit Schmidtrigger welche an den INT0 und INT1 angeschlossen sind.
    ich möchte damit die Umdrehungen der Räder überwachen.

    Gezählt wird so :
    Code:
    SIGNAL (SIG_INTERRUPT0)
    {	
    	cli();
    	left_trigger ++;
    	sei();
    }
    
    SIGNAL (SIG_INTERRUPT1)
    {
    	cli();
    	right_trigger ++;
    	sei();
    }
    Nun das Problem: ich setze die Variablen "left_trigger" und "right_trigger" zum Programmstart auf 0 und lass diese mir ausgeben, dann lass ich einen Motor für 1s drehen und lass mir wieder beide Variablen ausgeben, so und nun hat sich aber der Wert in beiden Variablen verändert!!!

    Warum

    Wenn ich die H-Brücke über einen Schalter deaktiviere und das Programm ablaufen lasse, funktioniert es wunderbar...

    ich bin total ratlos im Moment an was es liegen könnte, habt ihr ne Idee ????

    Danke

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    42
    Beiträge
    1.140
    Da baut Dir wohl der Compiler einen Strick. Der Compiler sieht nicht, wozu die Variablen gut sein sollen und optimiert sie weg. Bei globalen Variablen in Interruptroutinen kommt das häufig vor. Verhindern kannst Du das, indem Du die beiden Variablen mit "volatile" deklarierst.

    askazo

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.09.2004
    Beiträge
    119
    Hallo Askazo,

    das hab ich auch schon gemacht nur leider ohne erfolg

    Code:
    volatile int left_trigger=0, right_trigger=0;

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.02.2004
    Ort
    Greifswald
    Alter
    37
    Beiträge
    102
    Es kann sein, dass du bei längerer Kabelage zwischen Gabellichtschranke und Prozessor Störungen auffängst, die natürlich am stärksten sind, wenn ein Motor läuft.

    Teste das Ganze mal gegen, indem du die INT-EIngänge fest auf Masse legst. Dann dürfte sich nichts tun, außer wenn der Compiler irgendwas wegoptimiert (glaube ich in diesem Fall nicht).

    Vielleicht hilft es, die Beschaltung des Detektors niederohmiger auszulegen oder zur Not die Motoren zu entstören. Ich hatte auch mal so ein Problem und habe zwischen Sensor und INT-Pin einen Schmitttrigger (1/6 CD40106) gesetzt. In den Megas sind zwar schon Schmitt-Trigger drin, scheinbar ist die Hysterese aber recht klein, sodass auch Störungen ausreichen, um sie zu triggern.

    Gruß,

    Jan

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.09.2004
    Beiträge
    119
    Hallo Jan,

    das mit der Störung durch das Magnetfeld der Motoren kann mit einer ziemlich Hohen Wahrscheinlichkeit die Ursache sein, nur jetzt ist die Frage wie kann man diese Entstören bzw wie hast du das gelöst ?

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.02.2004
    Ort
    Greifswald
    Alter
    37
    Beiträge
    102
    Nach Aufwand sortiert:

    - Verkürzen der Verdrahtung auf ein Minimum
    - VErdrillen der Motorzuleitungen und der VErsorgungskabel der H-Brücke
    - Durchziehen der Kabel durch Ferrit-Ringkerne (am Verbraucher und an der Quelle)
    - Anlöten von Entstörkondensatoren am Motor (je einmal 100 n von jeder Motorklemme an das Motorgehäuse, 47 n zwischen die Klemmen)
    - evtl. zusätzliche Pufferkapazität in die Versorgungsleitung der H-Brücke
    - Verwendung von niederohmigeren Detektorschaltungen
    - Verwendung von niederohmigen Pullups/-downs
    - Getrennte Versorgung von Leistungs- und Steuerteil

    Wie gesagt, bei mir hat erst die Verwendung von zusätzlichen Schmitt-Triggern was gebracht. Das ist ja auch nicht allzu teuer. Mit einem 4093 würde es auch gehen (vielleicht hast du ja davon einen).

    Gruß,

    Jan

  7. #7
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Verdrillen der Sensor (int) leitungen wär gut (also auch GND extra führen)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •