Gobstar
21.09.2005, 10:28
Hi Leute, ich habe vor kurzem erfolgreiche meine H-brücke aufgebaut und die auch schon geproggt..das Anfangsprogramm war jedoch relativ simpel und das hoch und runterzählen der PWM hat der hauptprozzi. Ich hab es so programmiert, dass ich über eine Softwareserielle immer einen wert schick (2 räder, 2 brücken, 2 serielle)
-1023 bis -1= pwm links, 0=stopp,1 bis 1023 pwm rechts, dass sie die werte die ich vom hauptprozzi schick.
Jetzt will ich allerdings nicht mehr vom hauptprozzi aus anfahren und abbremsen lassen, sonder will das die brücke übernehmen lassen, doch bisher hab ich es nicht gebacken gekriegt, wer kann mir helfen?
( Hauptprozzi M16, Brücke M8 )
Hier mal das vorherige Programm und den einenregelungsversuch
$regfile = "m8def.dat"
$crystal = 16000000
$baud = 19200
Config Pinb.1 = Output
Config Pinb.2 = Output
Config Pind.5 = Output
Config Pind.6 = Output
Config Pind.7 = Output
Enable Interrupts
Dim A As Word
Dim I As Integer
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
Open "Comc.3:19200,8,n,1" For Input As #1
Do
Portd.6 = 1
Portd.7 = 1
Input #1 , I
Print I
Select Case I
Case Is > 0 : Gosub Rechts
Case 0 : Gosub Stopp
Case Is < 0 : Gosub Links
End Select
Loop
Links:
A = I * -1
Pwm1a = 0
Pwm1b = A
Return
Rechts:
Pwm1a = I
Pwm1b = 0
Return
Stopp:
Pwm1a = 0
Pwm1b = 0
Return
End
Nicht funktionierende Eigenregelung:
$regfile = "m8def.dat"
$crystal = 16000000
$baud = 19200
Config Pinb.1 = Output
Config Pinb.2 = Output
Config Pind.5 = Output
Config Pind.6 = Output
Config Pind.7 = Output
Enable Interrupts
Dim A As Word
Dim I As Integer
Dim L As Integer
Dim R As Integer
Dim R1 As Integer
Dim S1 As Integer
Dim S2 As Integer
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
Open "Comc.3:19200,8,n,1" For Input As #1
Portd.6 = 1
Portd.7 = 1
Do
I = Inkey(#1)
Select Case I
Case Is > 0 : Gosub Rechts
Case 0 : Gosub Stopp
Case Is < 0 : Gosub Links
End Select
Loop
Links:
A = I * -1
If R > 0 Then
For R1 = R To 0 Step -25
Pwm1a = R1
Pwm1b = 0
Next
End If
If L < 1 Then
For L = 0 To A Step 25
Pwm1b = L
Pwm1a = 0
Next
End If
Pwm1b = A
Pwm1a = 0
Return
Rechts:
If A > 0 Then
For L = A To 0 Step -25
Pwm1b = L
Pwm1a = 0
Next
End If
If R < 1 Then
For R = 0 To I Step 25
Pwm1a = R
Pwm1b = 0
Next
End If
Pwm1a = I
Return
Stopp:
If A > 0 Then
For S1 = A To 0 Step -50
Pwm1b = S1
Pwm1a = 0
Next
End If
If R > 0 Then
For S2 = R To 0 Step -50
Pwm1a = S2
Pwm1b = 0
Next
End If
Return
End
Vielleicht steh ich ja auch auf der leitung oder man kann es viel einfacher machen..bitte helft mir, bin halt nicht der progger vor dem herren..
Gruss Gobstar
-1023 bis -1= pwm links, 0=stopp,1 bis 1023 pwm rechts, dass sie die werte die ich vom hauptprozzi schick.
Jetzt will ich allerdings nicht mehr vom hauptprozzi aus anfahren und abbremsen lassen, sonder will das die brücke übernehmen lassen, doch bisher hab ich es nicht gebacken gekriegt, wer kann mir helfen?
( Hauptprozzi M16, Brücke M8 )
Hier mal das vorherige Programm und den einenregelungsversuch
$regfile = "m8def.dat"
$crystal = 16000000
$baud = 19200
Config Pinb.1 = Output
Config Pinb.2 = Output
Config Pind.5 = Output
Config Pind.6 = Output
Config Pind.7 = Output
Enable Interrupts
Dim A As Word
Dim I As Integer
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
Open "Comc.3:19200,8,n,1" For Input As #1
Do
Portd.6 = 1
Portd.7 = 1
Input #1 , I
Print I
Select Case I
Case Is > 0 : Gosub Rechts
Case 0 : Gosub Stopp
Case Is < 0 : Gosub Links
End Select
Loop
Links:
A = I * -1
Pwm1a = 0
Pwm1b = A
Return
Rechts:
Pwm1a = I
Pwm1b = 0
Return
Stopp:
Pwm1a = 0
Pwm1b = 0
Return
End
Nicht funktionierende Eigenregelung:
$regfile = "m8def.dat"
$crystal = 16000000
$baud = 19200
Config Pinb.1 = Output
Config Pinb.2 = Output
Config Pind.5 = Output
Config Pind.6 = Output
Config Pind.7 = Output
Enable Interrupts
Dim A As Word
Dim I As Integer
Dim L As Integer
Dim R As Integer
Dim R1 As Integer
Dim S1 As Integer
Dim S2 As Integer
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
Open "Comc.3:19200,8,n,1" For Input As #1
Portd.6 = 1
Portd.7 = 1
Do
I = Inkey(#1)
Select Case I
Case Is > 0 : Gosub Rechts
Case 0 : Gosub Stopp
Case Is < 0 : Gosub Links
End Select
Loop
Links:
A = I * -1
If R > 0 Then
For R1 = R To 0 Step -25
Pwm1a = R1
Pwm1b = 0
Next
End If
If L < 1 Then
For L = 0 To A Step 25
Pwm1b = L
Pwm1a = 0
Next
End If
Pwm1b = A
Pwm1a = 0
Return
Rechts:
If A > 0 Then
For L = A To 0 Step -25
Pwm1b = L
Pwm1a = 0
Next
End If
If R < 1 Then
For R = 0 To I Step 25
Pwm1a = R
Pwm1b = 0
Next
End If
Pwm1a = I
Return
Stopp:
If A > 0 Then
For S1 = A To 0 Step -50
Pwm1b = S1
Pwm1a = 0
Next
End If
If R > 0 Then
For S2 = R To 0 Step -50
Pwm1a = S2
Pwm1b = 0
Next
End If
Return
End
Vielleicht steh ich ja auch auf der leitung oder man kann es viel einfacher machen..bitte helft mir, bin halt nicht der progger vor dem herren..
Gruss Gobstar