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
Code:
$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:
Code:
$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