-
Inzwischen hab ich zwar rausgefunden, dass der Taster als Öffner fungierte, hab ihn jetzt auf Schließer umgestellt, aber funktionieren tut das alles immernoch nicht.
Naja, notfalls muss ich mir was anderes einfallen lassen, den Motor immer wieder in die Ausgangsstellung zu bringen
-
Bei deiner Konfiguration muss es so heissen: Config Int1 = rising,
da du ja von 0 auf 1 schaltest. Ansonsten poste doch etwas mehr code,
vielleicht liegt der Fehler wo anders?
-
Hier mal der ganze Code, wie ich ihn momentan habe:
Code:
'Port-Deklarationen
Config Pinb.0 = Input
Config Pind.1 = Input
Config Pind.2 = Input
Config Pind.3 = 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
Motor Alias Pind.3
'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
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"
Do
'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
Motoraus:
Ledaux = 0
Locate 4 , 1
Lcd "Waiting for Signal"
Return
Loop
End
ledaux schaltet ein Reed-Relais, an dem Der Motor hängt
motor ist der Taster an der Achse, er ist mitm 10k-Ohm-Widerstand zu GND gezogen
Sobald ich das Programm auf dem µC starte (egal ob faling oder rising) und die "Manual"-Taste drücke, zuckt der Motor und beim dritten Male zeigt das Display nur noch irgendwelche Sonderzeichen an, die sich bei irgendwelchen Taster-Impulsen munter verändern.
-
spontan fällt mir auf, das die Ein und Ausgänge mit
config portx.x =output nicht pinx.x= output konfiguriert werden
das gilt auch für die Inputs, den Rest muss ich noch anschauen
-
ich denke nicht dass dies mit dem interrupt so funktioniert... durch das prellen des tasters werden auch beim anfahren des motors, wenn der taster wieder freigegeben wird einige flanken am interrupt ankommen und das programm sofort wieder anhalten...
sorry wenn es schon erwähnt wurde... habe nicht den ganzen tread genau gelesen...
gruss bluesmash
-
Ich habe jetzt mal komplett die INTs weggelassen und die Wait-Routinen, die bestimmten, wie lange ledaux high bleiben soll, durch folgenden Schnipsel ersetzt:
Debounce Motor , 1 , Motoraus1
Motoraus1:
an der 2. Stelle heißen die Label motoraus2, damit es eindeutig bleibt.
Aber ncihtmal dies funktioniert.. Obwohl es ohne problemlos funktioniert.. die Batteriespannung ist ok (9V Netzteil) der Anlaufstrom kann nicht zu hoch sein (Netzteil schafft 1,2A, es funktioniert ohne Taster ja)...
Ich habe keine Ideen mehr, muss ich mich halt damit abfinden, dass es nicht klappt
Vielen dank für eure Hilfe =D>
-
probier doch mal folgendes (pseudocode):
Code:
do
if start=0 then
motor=1
waitms 200
end if
if motor = 1 and taster=0 then
stop motor
end if
loop
-
wie schauts aus mit Freilaufdioden?
Wie haste den Brown out eingestellt, evtl. diefer
setzen?
-
Hab jetzt ne Freilaufdiode (1N4007 antiparallel zum Motor) eingebaut und das Programm stürzt nicht mehr so leicht ab, aber dennoch zuckt der Motor nur, sobald er was machen soll.
BoD steht auf 1,7V
-
Man müsste in den Schaltplan schauen ob sich da noch was
eingeschlichen hat ... haste zufällig n Speicheroszi
um die Eingangsspannung mal anschauen zu können?
Einbrüche, Spitzen etc. Auch die Beschaltung des Reset währ wichtig
zu sehen ... oder mal einfach Bilder vom Gesamtaufbau hier rein
stellen, evtl. sieht man da nen Schwachpunkt