PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Motorsteuerung



Carlos31
31.08.2010, 13:48
Hallo
Ich brauche ein bischen hilfe mit mein programm es ist eine roll fenstersteuerung also fusstaster gedrückt fenster wird geöffnet , wieder fusstater gedrückt fenster wird geschlossen ,mit eine taste (teach) wird der weg das der motor fahren soll eingelernt , das fenster fährt zum endschalter stellt der eingelernter weg auf 0 , und fährt in die andere richtung bis man die teach taste los lässt , es funktioniert alles einwandfrei ,ich möchte jetzt wenn das fenster in bewegung ist und ich der fusstaster drücke das der motor stoppt , leider hab ich kein interrupt eingang mehr gibt es iergend am möglichkeit es zu machen , vielen dank in voraus ?



$regfile = "m32def.dat"
$crystal = 8000000
$baud = 19200
Config Pinb.0 = Input
Config Pinb.1 = Input
Config Pinb.2 = Input
Config Pinb.3 = Input
Config Pinb.4 = Input
Portb.0 = 1
Portb.1 = 1
Portb.2 = 1
Portb.3 = 1
Portb.4 = 1

Config Pind.2 = Input
Config Pind.3 = Input
Config Pina.7 = Input
Porta.7 = 1
Portd.2 = 1
Portd.3 = 1
Config Portc = Output
Config Portd.4 = Output
Config Portd.6 = Output
Enc_a Alias Pind.2
Enc_b Alias Pind.3
Endschalter Alias Pinb.0
Fusstaster Alias Pinb.1
Eingang5 Alias Pinb.2
Eingang6 Alias Pinb.3
Eingang7 Alias Pinb.4
Taster Alias Pina.7

Ausgang1 Alias Portc.0
Ausgang2 Alias Portc.1
Ausgang3 Alias Portc.2
Ausgang4 Alias Portc.3
Ausgang5 Alias Portc.4
Ausgang6 Alias Portc.5
Ausgang7 Alias Portc.6
Ausgang8 Alias Portc.7

Reset_ Alias Portd.4
Dir_ Alias Portd.6

Config Timer0 = Timer , Prescale = 1024
Timer0 = 240
On Timer0 Isr_timer
Enable Timer0

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1
Config Lcdpin = Pin , Db4 = Porta.6 , Db5 = Porta.3 , Db6 = Porta.5 , Db7 = Porta.4 , E = Porta.2 , Rs = Porta.1
Config Lcd = 20 * 4
Config Int0 = Rising
Config Int1 = Falling
On Int0 Encoder0
On Int1 Encoder1
Enable Int0
Enable Int1 'Hardware Configuration
Enable Interrupts
Dim Bremsendefin As Long
Dim Wert As Long
Dim Weg As Long
Dim Weg_eprom As Eram Long
Dim Aufzu As Bit
Dim Besch As Byte
Dim Geschw As Word
Dim Bremsweg As Word
Dim Zuf As Bit
Dim Auf As Bit
Dim Beschlzu As Bit
Dim Beschlauf As Bit
Dim Freigabe As Bit
Dim Bremsende As Long
Dim Steigung As Byte
Dim Notaus As Bit
Dim Zaehler As Word
Dim Notaus2 As Bit
Geschw = 180
Bremsweg = 100
Steigung = 1









Weg = Weg_eprom
Zuf = 0

Do

Bremsende = Weg - 500
Bremsendefin = Weg - Bremsende
Print Fusstaster ; " " ; Wert ; " " ; " " ; Besch ; " " ; Weg
If Taster = 0 Then
Reset_ = 1
Gosub Teach
End If
If Fusstaster = 0 Then
Toggle Freigabe
End If
If Fusstaster = 0 And Freigabe = 1 Or Zuf = 1 And Auf = 0 Then

Gosub Zu
End If

If Wert < Weg And Fusstaster = 0 And Freigabe = 0 Or Auf = 1 And Zuf = 0 Then

Gosub Auf

End If


Loop

Isr_timer:


Return




Zu:

Zuf = 1
Dir_ = 0
Reset_ = 1

If Besch < Geschw And Beschlzu = 0 And Endschalter = 1 Then
For Besch = 0 To Geschw Step 1
Pwm1a = Besch
Waitms 5
Next Besch
End If
If Wert < 500 Then
For Besch = Besch To 50 Step -1

Pwm1a = Besch
Waitms 5
Next Besch
Beschlzu = 1
If Endschalter = 0 Then
Reset_ = 0
Pwm1a = 0
Besch = 0


Beschlzu = 0
Zuf = 0
Waitms 300
Wert = 1
End If
End If
Return

Auf:

Auf = 1
Dir_ = 1
Reset_ = 1
If Besch < Geschw And Beschlauf = 0 Then
For Besch = 0 To Geschw Step 1
Pwm1a = Besch
Waitms 5
Next Besch
Beschlauf = 1
End If

If Wert > Bremsende Then
For Besch = Besch To 50 Step -1
Pwm1a = Besch
Waitms 5
Next Besch
If Wert >= Weg Or Notaus = 1 Then
Reset_ = 0
Pwm1a = 0
Besch = 0
Beschlauf = 0
Auf = 0

Waitms 300
Notaus = 0
End If
End If
Return


Teach:
'unterprogram zum teachen
If Endschalter = 1 Then
Dir_ = 0
Do
Pwm1a = 150
Loop Until Endschalter = 0
Reset_ = 0
End If

If Endschalter = 0 Then
Reset_ = 1
Pwm1a = 0
Waitms 500
Wert = 0
Weg = 0
Do
Dir_ = 1
Pwm1a = 150
Loop Until Taster = 1
Pwm1a = 0
Reset_ = 0
Waitms 300
Weg_eprom = Wert
Weg = Wert
Freigabe = 0
End If
Return

Encoder1:
If Enc_a > Enc_b Then
Decr Wert
End If
Return

Encoder0:
If Enc_b < Enc_a Then
Incr Wert
End If
Return