PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : M-Unit und Interrupt zur Motorsteuerung



hephaistos
23.06.2004, 14:33
Tach allerseits,
hat jemand Erfahrung mit dem IRQ-Eingang der M-UNIT?

Habe ein ganz einfaches Programm geschrieben zum Erzeugen und Zählen von Impulsen.
Auf dem IRQ liegt ein ca 10Hz-Rechtecksignal, mind. 25 Hz wären schön, aber auch den langsamen Takt verträgt das Programm nicht.
Das Programm ist ohne Fehlermeldungen kompiliert und geladen.
Problem: planlose Sprünge in Routine "Reset", obwohl die Sprungbedingung nicht erfüllt ist.
Harware gründlich gemessen, alle Ein-?Ausgänge ok?

Seht Ihr meinen Fehler?

define sens port[8]
define cnt word
define speed word
define stop 100

interrupt count
speed=1500
cnt=0

' beep speed,0,0
#loop
if sens then gosub reset
if cnt>stop then gosub ende
goto loop

#ende
' beep 0,0,0
pause 100
' beep speed,0,0
return

#reset
print cnt
cnt=0
return

#count
cnt=cnt+1
return interrupt

-

AlexAtRobo
23.06.2004, 15:03
Hm, ich hatte zwar nur kurz eine m-control aber rein prinzipell fällt mir diese Zeile auf:
if sens then gosub reset
Ich würde da auf jeden Fall if sens=ON schreiben.
Weiters empfiehlt es sich, sens nocheinmal definitiv als eingang zu definieren, mit DEACT sens.

sonst fällt mir erstmal nichts auf.

lg

Alex

Gottfreak
23.06.2004, 16:41
Wenn der planlos (meint wohl unregelmäßig) nach Reset springt, könnte Sens, undefiniert sein. Hast du da einen Pulldown angeschlossen?

23.06.2004, 17:07
"Deact", "ON" und dergleichen werde ich noch testen.
Pull-ups sind immer dabei, auch bei unbenutzten Ein-/Ausgängen

Gottfreak
23.06.2004, 17:16
Pull-ups sind immer dabei, auch bei unbenutzten Ein-/Ausgängen

PullUPs und ein Taster gegen Vcc? Wenn du nach ON fragst, müsste dein Taster ja den Port auf Vcc legen und dein Pullup auch. Dann ist der immer an und der springt immer zu Reset. Du brauchst für ein definiertes OFF bei offenem Taster einen Widerstand gegen GND (pullDOWN).

12.07.2004, 13:25
verehrter Gottfreak
vielen Dank für Deine Antwort. Ich habe etwas schlampig gefragt.

mein Taster ist eine Lichtschranke Licht frei>> Phototransi ist niederohmig, Reset ist OFF. Deshalb meine Abfrage nach ON.
Die Resetroutine ist nicht das Problem und funktioniert einwandfrei.
Die Zickerei beginnt, sobald ich den Interrupt benutze.
Hast Du Erfahrung mit Assembler? Ist es vielleicht sinnvoll, den Interrupt direkt mit Assembler auszuwerten?

BlueNature
13.08.2004, 17:03
Also die Interrupt-Routine reagiert nur auf die negative Flanke. Bleibt das Signal statisch passiert erst mal gar nichts.
Aber die Zeile:
if sens then gosub reset
würde ich auf jeden Fall durch
if sens = on then gosub reset
ersetzen. Das ist wohl sicherer und die einzigste Möglichkeit für die Sprünge. Eine andere Möglichkeit wäre ein fremdes Signal das den Interrupt-Pin dauernd sehr schnell auslöst. Solltest das Signal einmal messen und mit einem Schmitt-Trigger vorschalten. Dann dürfte es funktionieren.

Grüsse Wolfgang