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
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.