PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sehr kurioses Problem mit INT0 und INT1 !!!



alecs
12.12.2005, 15:40
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 :


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

askazo
12.12.2005, 15:52
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

alecs
12.12.2005, 15:57
Hallo Askazo,

das hab ich auch schon gemacht nur leider ohne erfolg :(


volatile int left_trigger=0, right_trigger=0;

Jan_Weber
12.12.2005, 16:00
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

alecs
12.12.2005, 16:29
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 ?

Jan_Weber
12.12.2005, 17:07
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

PicNick
12.12.2005, 19:36
Verdrillen der Sensor (int) leitungen wär gut (also auch GND extra führen)