eIdea
20.10.2006, 12:03
Ich habe mal wieder ein Kleines Problem mit meiner Skinner-Box (Ich werde das Projekt dann euch dann auch vorstellen).
Ich habe einen Futterautomaten Angeschlossen, der genau eine Umdrehung machen soll (ist nen Getriebe mit bei) allerdings ist das ein Billig-Fernost-Motor, der nie gleich dreht. Momentan wird über nen wait-Befehl gewartet, bis der Motor etwa ne Umdrehung gemacht hat, das ist aber viel zu ungenau.
Bei der Original-Elektronik, die rausgeflogen ist, war ein Taster an der Motor-Welle, der durch die Welle in der Ausgangsposition gedrück wurde und der Elektronik verriet, wann schluss ist. Diesen Taster würde ich jetzt gerne wieder in BEtrieb nehmen, allerdings habe ich keine Ahnung, wie ich es meinem Bascom sagen soll, da der Taster ja auch bei dem nöchsten Starten noch kurzzeitig gedrück ist.
'Grundsätzliche Angaben zum Controller
$regfile = "2313def.dat"
$crystal = 8000000
'Variablen dimensionieren und nullen
Dim Ist As Integer , Soll As Integer , Startbs As Integer , Aux As Integer
'Port-Deklarationen
Config Pinb.0 = Input
Config Pind.1 = Input
Config Pind.2 = Input
Config Pinb.1 = Output
Config Pind.6 = Output
Config Pind.0 = Output
'Einstellungen
Aux = 1680 'Wie lang soll der AUX an sein (in ms)
Startbs = 3 'Wie lang soll der Startbildschirm angezeigt werden (in sec.)
Ist = 0 'Startwert für den Ist-Wert
Soll = 1 'Startwert für den Soll-Wert
'Den Ports Namen geben (nur fürs Layout)
Taster Alias Pinb.0
Ledtast Alias Portb.1
Ledaux Alias Portd.6
Lederr Alias Portd.0
Manual Alias Pind.1
Rst Alias Pind.2
'LED3 "Gerät nicht bereit / Fehler" aktivieren
Lederr = 1
'Display-Optionen
Cursor Off
Cls
Config Lcd = 20 * 4
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2 '
'Startbildschirm anzeigen
Locate 1 , 1
Lcd "Sebastian Rietig &"
Locate 2 , 1
Lcd " Tjark Radewaldt"
Locate 3 , 1
Lcd " SkinnerMaus 3000+"
Locate 4 , 1
Lcd " Skinner-Box"
'Startbs Sekunden den Startbildschirm aneigen, dann Anige löschen un Gerät freigeben
Wait Startbs
Cls
'Kleiner Fehlersucher
If Soll < Ist Then
Locate 1 , 1
Lcd " SkinnerMaus 3000+"
Locate 2 , 1
Lcd "Error: Soll < Ist"
Else
Lederr = 0
'Arbeitsbldschirm anzeigen
Locate 1 , 1
Lcd " SkinnerMaus 3000+"
Locate 2 , 1
Lcd "Soll:" ; Soll
Locate 3 , 1
Lcd "Ist :" ; Ist
Locate 4 , 1
Lcd "Waiting for Signal"
'Taster entprellen und bei High zu "Tasteran" springen
Entprell:
Debounce Taster , 1 , Tasteran
Debounce Manual , 1 , Manualan
Debounce Rst , 1 , Rstan
'Wenn der Taster gedrückt wurde, in diese Schleife springen
Tasteran:
Do
If Taster = 1 Then
Ledtast = 1
Locate 4 , 1
Lcd "Input high "
Ist = Ist + 1
Locate 3 , 1
Lcd "Ist :" ; Ist
If Ist = Soll Then
Locate 4 , 1
Lcd "AUX enabled "
Ledaux = 1
Ledtast = 0
Waitms Aux
Locate 4 , 1
Lcd "Waiting for Signal"
Ledaux = 0
Soll = Soll + 1
Ist = 0
Locate 2 , 1
Lcd "Soll:" ; Soll
Locate 3 , 1
Lcd "Ist :" ; Ist ; " "
End If
Do
Loop Until Taster = 0
Else
Locate 4 , 1
Lcd "Waiting for Signal"
Ledtast = 0
Goto Entprell
End If
Loop
'Bei Druck auf die Manual-Taste
Manualan:
Do
If Manual = 1 Then
Locate 4 , 1
Lcd "Manual Mode "
Ledaux = 1
Waitms Aux
Locate 4 , 1
Lcd "Waiting for Signal"
Ledaux = 0
Do
Loop Until Manual = 0
Else
Locate 4 , 1
Lcd "Waiting for Signal"
Goto Entprell
End If
Loop
' Bei Druck auf die Reset-Taste
Rstan:
Do
If Rst = 1 Then
Wait 3
If Rst = 1 Then
Locate 4 , 1
Lcd "Resetting Data "
Lederr = 1
Ist = 0
Soll = 1
Locate 2 , 1
Lcd "Soll:" ; Soll ; " "
Locate 3 , 1
Lcd "Ist :" ; Ist ; " "
End If
Do
Loop Until Rst = 0
Else
Lederr = 0
Ledaux = 0
Locate 4 , 1
Lcd "Waiting for Signal"
Goto Entprell
End If
Loop
End If
End
Das ist der bisherige, komplette Code.
Für den Taster im Automaten würd ich gerne PD.5 nehmen.
Also ich möchte jetzt, das der Mtor bis zum Tasterdruck dreht, aber mein Problem ist, dass beim nächsten Motor-Start der Taster ja immernoch gedrückt wäre.
Vielen Dank
Ich habe einen Futterautomaten Angeschlossen, der genau eine Umdrehung machen soll (ist nen Getriebe mit bei) allerdings ist das ein Billig-Fernost-Motor, der nie gleich dreht. Momentan wird über nen wait-Befehl gewartet, bis der Motor etwa ne Umdrehung gemacht hat, das ist aber viel zu ungenau.
Bei der Original-Elektronik, die rausgeflogen ist, war ein Taster an der Motor-Welle, der durch die Welle in der Ausgangsposition gedrück wurde und der Elektronik verriet, wann schluss ist. Diesen Taster würde ich jetzt gerne wieder in BEtrieb nehmen, allerdings habe ich keine Ahnung, wie ich es meinem Bascom sagen soll, da der Taster ja auch bei dem nöchsten Starten noch kurzzeitig gedrück ist.
'Grundsätzliche Angaben zum Controller
$regfile = "2313def.dat"
$crystal = 8000000
'Variablen dimensionieren und nullen
Dim Ist As Integer , Soll As Integer , Startbs As Integer , Aux As Integer
'Port-Deklarationen
Config Pinb.0 = Input
Config Pind.1 = Input
Config Pind.2 = Input
Config Pinb.1 = Output
Config Pind.6 = Output
Config Pind.0 = Output
'Einstellungen
Aux = 1680 'Wie lang soll der AUX an sein (in ms)
Startbs = 3 'Wie lang soll der Startbildschirm angezeigt werden (in sec.)
Ist = 0 'Startwert für den Ist-Wert
Soll = 1 'Startwert für den Soll-Wert
'Den Ports Namen geben (nur fürs Layout)
Taster Alias Pinb.0
Ledtast Alias Portb.1
Ledaux Alias Portd.6
Lederr Alias Portd.0
Manual Alias Pind.1
Rst Alias Pind.2
'LED3 "Gerät nicht bereit / Fehler" aktivieren
Lederr = 1
'Display-Optionen
Cursor Off
Cls
Config Lcd = 20 * 4
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2 '
'Startbildschirm anzeigen
Locate 1 , 1
Lcd "Sebastian Rietig &"
Locate 2 , 1
Lcd " Tjark Radewaldt"
Locate 3 , 1
Lcd " SkinnerMaus 3000+"
Locate 4 , 1
Lcd " Skinner-Box"
'Startbs Sekunden den Startbildschirm aneigen, dann Anige löschen un Gerät freigeben
Wait Startbs
Cls
'Kleiner Fehlersucher
If Soll < Ist Then
Locate 1 , 1
Lcd " SkinnerMaus 3000+"
Locate 2 , 1
Lcd "Error: Soll < Ist"
Else
Lederr = 0
'Arbeitsbldschirm anzeigen
Locate 1 , 1
Lcd " SkinnerMaus 3000+"
Locate 2 , 1
Lcd "Soll:" ; Soll
Locate 3 , 1
Lcd "Ist :" ; Ist
Locate 4 , 1
Lcd "Waiting for Signal"
'Taster entprellen und bei High zu "Tasteran" springen
Entprell:
Debounce Taster , 1 , Tasteran
Debounce Manual , 1 , Manualan
Debounce Rst , 1 , Rstan
'Wenn der Taster gedrückt wurde, in diese Schleife springen
Tasteran:
Do
If Taster = 1 Then
Ledtast = 1
Locate 4 , 1
Lcd "Input high "
Ist = Ist + 1
Locate 3 , 1
Lcd "Ist :" ; Ist
If Ist = Soll Then
Locate 4 , 1
Lcd "AUX enabled "
Ledaux = 1
Ledtast = 0
Waitms Aux
Locate 4 , 1
Lcd "Waiting for Signal"
Ledaux = 0
Soll = Soll + 1
Ist = 0
Locate 2 , 1
Lcd "Soll:" ; Soll
Locate 3 , 1
Lcd "Ist :" ; Ist ; " "
End If
Do
Loop Until Taster = 0
Else
Locate 4 , 1
Lcd "Waiting for Signal"
Ledtast = 0
Goto Entprell
End If
Loop
'Bei Druck auf die Manual-Taste
Manualan:
Do
If Manual = 1 Then
Locate 4 , 1
Lcd "Manual Mode "
Ledaux = 1
Waitms Aux
Locate 4 , 1
Lcd "Waiting for Signal"
Ledaux = 0
Do
Loop Until Manual = 0
Else
Locate 4 , 1
Lcd "Waiting for Signal"
Goto Entprell
End If
Loop
' Bei Druck auf die Reset-Taste
Rstan:
Do
If Rst = 1 Then
Wait 3
If Rst = 1 Then
Locate 4 , 1
Lcd "Resetting Data "
Lederr = 1
Ist = 0
Soll = 1
Locate 2 , 1
Lcd "Soll:" ; Soll ; " "
Locate 3 , 1
Lcd "Ist :" ; Ist ; " "
End If
Do
Loop Until Rst = 0
Else
Lederr = 0
Ledaux = 0
Locate 4 , 1
Lcd "Waiting for Signal"
Goto Entprell
End If
Loop
End If
End
Das ist der bisherige, komplette Code.
Für den Taster im Automaten würd ich gerne PD.5 nehmen.
Also ich möchte jetzt, das der Mtor bis zum Tasterdruck dreht, aber mein Problem ist, dass beim nächsten Motor-Start der Taster ja immernoch gedrückt wäre.
Vielen Dank