Hallo zusammen,
ich habe mich nach mehreren anderen Bascom Projekten an den Interrupts versucht. Leider funktioniert die Sache mit Int0 und Int1 nicht wirklich. Hier erstmal die Aufgabe, welche ich zu lösen versuche:
Ich habe eine Kette. Jedes Kettenglied wird über einen Initiator erkannt ( 24V über Optokoppler 5V ). Diesen Initiator habe ich an Int0 angeschlossen. Wenn ich die Kette laufen lasse, und folgenden Code verwende funktioniert das sehr gut.
Bei jedem Kettenglied wird die Variable Takter hochgezählt. Ich bekomme dies auch im Terminal angezeigt. An Int1 habe ich einen weiteren Initiator angeschlossen. Dieser erkennt die Kettenglieder, an denen ein weiteres Stück Metall angebracht ist ( Referenzkettengliederkennung ). Den Signalverlauf habe ich angehängt. Zuerst kommt das Signal an Int1. Kurze Zeit danach kommt Int0. Die Signale fallen in umgekehrter Reihenfolge wieder ab. Zuerst Int0 = 0 dann kurze Zeit danan Int1 = 0.Code:$regfile = "m644pdef.dat" $crystal = 18432000 $baud = 19200 Config Pind.3 = Input Config Pind.2 = Input Pind.3 = 1 Pind.2 = 1 Config Int0 = Rising On Int0 Takt Enable Int0 Dim takter as Word Main: nop goto main Takt: incr takter print takter return
Bei folgendem Code wird Int1 sporadisch auch 2x ausgelöst:
Ein Hardwareproblem schließe ich vorerst aus, da die Signale über Hutschienen Optokoppler getrennt sind. Mir kommt es so vor, als würde Int1 prellen. Es wäre nett, wenn Ihr mal über den Code schauen könntet, ob der Fehler im Programm zu finden ist.Code:$regfile = "m644pdef.dat" $crystal = 18432000 $baud = 19200 Config Pind.3 = Input Config Pind.2 = Input Pind.3 = 1 Pind.2 = 1 Config Int0 = Rising On Int0 Takt Enable Int0 Config Int1 = Rising On Int1 Referenz Enable Int1 Enable Interrupts Dim Takter As Word Dim referenz as Word Print "Booting" Do nop Loop Takt: Incr takter Return Referenz: If Pind.3 = 1 Then print "referenz erkannt" End If Return
Danke und Gruß
BlaueLed







Zitieren

Lesezeichen