Forum: Mikrocontroller und Digitale Elektronik Arduino Uno R3 Interruptproblem


von Pequi P. (pequi)


Angehängte Dateien:

Lesenswert?

Moinsen,

ich bin zwar neu im Forum, aber nicht unbeleckt, was Programmierung 
angeht. Da ich nun trotz reichlicher Recherchen keine Lösung gefunden 
habe, möchte ich Euch gerne konsultieren:

Ich habe das im Anhang gelistete Programm zur Steuerung einer Nerf 
RapidStrike geschrieben, das auch "eigentlich" gut funktioniert. Es 
werden die Flywheelmotoren und der Pushermotor mittels Mosfets durch den 
Arduino gesteuert. Desweiteren werden durch drei Lichtschranken das 
Dartverhalten erkannt und die Motoren entsprechend gestoppt und 
gestartet -> Ladehemmungserkennung und Messung der Dartgeschwindigkeit 
im Lauf durch zwei Lichtschranken. Die dritte Lichtschranke erkennt, ob 
ein Dart in der Kammer ist oder nicht. Ein Link auf das Projekt ist 
hier:

https://blasted.de/threads/mikrokontrollerprogrammierung-einer-rapidstrike.6331/

Das Problem besteht nun darin, daß die Interrupts auch ohne Auslösen der 
Lichtschranken-routinen "DartStart" und "DartStop" getriggert werden. 
Nur durch Drücken der Motortaster, die die Flywheelmotoren und den 
Pushermotor starten. Auch das Drücken der Taster mit abgeklemmten 
Motoren triggert die Interrupts, was eine Störung durch Bürstenfeuer 
ausschließt. Selbst, wenn ich die Phototransistoren der Lichtschranken 
entferne, werden die Interruptroutinen beim Tastendrücken getriggert. 
Auch ein "attachInterrupt" nachdem die Taster bereits gedrückt sind und 
ein "detachInterrupt" danach bringen nichts.
Ist vielleicht mein Arduino/Atmel defekt? Oder habe ich etwas ganz 
Wesentliches übersehen?

(Der Code enthält Zeilen, die ich zum Debugging eingestellt habe und die 
im "echten" Code eher sinnfrei wären. -> z.B. Zeile 627.)

Vielen Dank für Eure Rückmeldungen!

: Bearbeitet durch User
von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Da ich mit dem Arduino nicht ganz firm bin (hab hier zwar Einen liegen, 
Der vll. auch Mal mehr machen soll, als nur auf einem I2C-Display 
hochzuzählen), möchte ich einen Schuss ins Blaue wagen:
Aktivierst Du die Interrupt-Quelle bei den Tätigkeiten, Die Dir jetzt 
ungewollt den Interrupt auslösen?
Dann könnte Dir helfen, wenn Du direkt vor der (Re-)aktivierung des 
Interrupt das entsprechende Interrupt-Flag löscht.
So ist beim nackten ATtiny45 der PCINT-Flag auch 'von Haus aus' gesetzt 
- wenn ich 'ab hier und jetzt' auf Änderungen der Pins ächten will, muß 
ich zuvor das entsprechende Flag löschen (seltsamer weise hier durch 
Setzen einer 1, steht aber auch so im Datenblatt und in diversen 
Tutorials), sonst rennt der µC mit dem aktivieren der Interrupt-Quellen 
(Befehl sei) direkt in die PCINT-ISR.

Habe mir Deinen Quellcode nicht durchgeschaut, da ich beim Arduino 'noch 
nicht so weit bin' - Interrupts sind mir dort noch gröbstes Voodoo :)

MfG

von Jim M. (turboj)


Lesenswert?

Mal Dir mal einen ordentlichen Schaltplan auf. Fehlgetriggerte 
Interrupts könnten auch elektrische Ursachen haben. Wenn Du damit nicht 
weiter kommst, kannste den dann auch hier posten.

Nein, die Fotos vom Breadboard reichen nicht.

von Pequi P. (pequi)


Lesenswert?

SO!
Das Problem scheint gelöst:
Sowohl der Motorschalter als auch einer der Motoren haben wohl reichlich 
Störsignale gesendet. Ich habe durch einen sowohl 100nF zwischen 
Schalter 5V und GND als auch später durch einen 33nF Keramikkondensator 
den Schalter entstören können. Desweiteren habe ich an beide Motoren 
100nF Kondensatoren zwischen den Motorpolen gelötet. Zwei weitere 33nF 
Kondensatoren wollte ich noch zwischen je einem Pol und Gehäuse löten, 
allerdings ließ sich das Motorgehäuse nicht löten, nahm kein Lot an. 
Funktionierte allerdings trotzdem!

Jetzt kann es also zum Zusammenlöten und -bau kommen! Endlich!!

Vielen Dank an Alle, die sich die Mühe gemacht haben alles anzuschauen 
und auch Rückmeldung gegeben haben!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.