PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : probleme mit schleife



patti16
24.01.2006, 18:05
hallo

hab mal wieder ein Problem rein Theoretisch müsste ich doch mit Declare Subine Schleife auf bauen können die klappt. Jedoch habe ich das Gefühl das irgendwie im Programm das next bei der Motorsteuerung stört und nicht nach den Befehlen geht in der Do-Schleife, sondern nach dem next was ich allerdings nicht möchte habe schon viel Probiert aber vielleicht habt ihr eine Idee !!!

hier der Code:


$regfile = "m8def.dat"
$crystal = 7372800
$baud = 9600
$hwstack = 34
$framesize = 34
$swstack = 34

Dim A As Word
Dim B As Word

Config Portc = &B11111111
Config Adc = Single , Prescaler = Auto , Reference = Internal
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
Config Pinb.1 = Output
Motor1_pwm Alias Portb.1
Config Pind.4 = Output
Motor1_in1 Alias Portd.4
Config Pind.5 = Output
Motor1_in2 Alias Portd.5

Declare Sub Fahr_v()
Declare Sub Stop_v()
Declare Sub Fahr_r()


Start Adc

Do

B = Getadc(1)
Print B


If B > 200 Then
Stop_v

Else
Fahr_v
End If


Loop
End




Fahr_v:
Motor1_in1 = 1
Motor1_in2 = 0

For A = 255 To 511
Pwm1a = A
Waitms 10
Next

Stop_v:
Motor1_in1 = 1
Motor1_in2 = 1

For A = 255 To 0
Pwm1a = A
Waitms 10
Next




Fahr_r:
Motor1_in1 = 0
Motor1_in2 = 1

For A = 255 To 511
Pwm1a = A
Waitms 10
Next



könnte man vielleicht die Pwm Modulation noch anders ausdrücken wie??

For A = 255 To 511
Pwm1a = A
Waitms 10
Next

gruß
patrick

chr-mt
24.01.2006, 18:21
Hi,
hast du die "end sub" vergessen ?

Noch was
For A= 256 to 511

Du hast doch die PWM als 8 Bit deklariert.
Sollte also auch nur bis 255 gehen.

Warum zählst du die überhaupt hoch ?


Gruß
Christopher

patti16
24.01.2006, 18:26
eigentlich will ich das nicht aber da es nicht gerade anders geht habe ich das so.

sonst macht mein motor komische geräusche läuft langsam an und dann steigt die Amperemeter auf ca. 1.2 Ampere hoch

gruß
patrick

chr-mt
24.01.2006, 18:31
Was soll das Hoch bzw. Runterzählen denn bewirken ?
Willst du damit einen Softanlauf machen ?

Gruß
Christopher

patti16
24.01.2006, 18:34
erstens das und zweitens erstmal so zum test das programm werde ich gleich noch weiter ausbauen.

so es klappt zum mindestens mal so:



$regfile = "m8def.dat"
$crystal = 7372800
$baud = 9600
$hwstack = 34
$framesize = 34
$swstack = 34


Declare Sub Fahr_v()
Declare Sub Stop_v()
Declare Sub Fahr_r()


Dim A As Word
Dim B As Word

Config Portc = &B11111111
Config Adc = Single , Prescaler = Auto , Reference = Internal
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
Config Pinb.1 = Output
Motor1_pwm Alias Portb.1
Config Pind.4 = Output
Motor1_in1 Alias Portd.4
Config Pind.5 = Output
Motor1_in2 Alias Portd.5

Start Adc

Do

B = Getadc(1)
Print B

If B >= 200 Then
Stop_v
Else
Fahr_v

End If
Loop
End




Sub Fahr_v:
Motor1_in1 = 1
Motor1_in2 = 0

For A = 255 To 255
Pwm1a = A
Waitms 10
Next A
End Sub

Sub Stop_v:
Motor1_in1 = 1
Motor1_in2 = 1

For A = 255 To 0
Pwm1a = A
Waitms 10
Next

End Sub

patti16
24.01.2006, 18:36
hallo


danke für die Hilfe chr-mt das andere klappt jetzt auch.

das es nur an dem sub ...... und an dem end sub hängt wenn man es vergisst naja passt schon.

gruß
patrick