For-Schleife - Komisches Verhalten

Gast #871192
Lesenswert?

Hi zusammen
Ich war dabei ein kleines Beispielprogramm zu schreiben um die Funktion 
vom Mikrokontroller und dem LED was daran hängt zu demonstrieren, doch 
irgendwie scheint der Wurm drin zu sein.
Das Programm besteht aus einer Hauptschleife in der neue 
Farbintensitätswerte generiert werden und einem Unterprogramm welches zu 
diesen Farbwerten hin iterieren soll. Was passiert ist jedoch dass das 
Programm immer (auch im Simulator komischweise) direkt nach dem ersten 
Durchlauf aus der Schleife springt. Egal welche Zahlen die Schleife 
enthält.
Vll ist es nur was ganz Grundsätzliches, aber irgendwie schein ich da 
was zu übersehen.
Wäre dankbar für ein bisschen Hilfe ;)
1
Config Timer3 = Pwm , Prescale = 256 , Pwm = 8 , Compare B Pwm = Clear Down 
2

3
Dim I As Byte
4
Dim Negspeed As Integer
5
Dim Newval As Byte
6
Dim Oldval As Byte
7
Dim Stepsize As Integer
8

9
Declare Function Slide(a As Byte , B As Byte , C As Integer) As Byte
10

11
Compare3b = 0
12
Oldval = Compare3b
13

14
Do
15

16
  Newval = Rnd(230) + 25
17
  Stepsize = Rnd(58) + 2
18
  Oldval = Slide(oldval , Newval , Stepsize)
19
  Waitms 30
20

21
Loop
22
End
23

24

25

26
Function Slide(a As Byte , B As Byte , C As Integer) As Byte
27
   If A > B Then
28
      Negspeed = 0 - C
29
      For I = A To B Step Negspeed
30
         Compare3b = I
31
         Waitms 20
32
      Next
33
   Else
34
      For I = A To B Step C
35
         Compare3b = I
36
         Waitms 20
37
      Next
38
   End If
39
   Compare3b = B
40
   Slide = B
41
End Function
Gast #871364
Lesenswert?

Auf welchem Controller läuft das?

Hm, warum sollte er auch nicht aus der Schleife springen, schließlich 
rufst Du ja in der Schleife Deine Function auf. Da muß er ja erst mal 
hinhüpfen. In der Function selbst sind a,b und c alle Mann auf Null.
Das Einzige, was dort passiert ist, daß 20ms gewartet wird und dann ha's 
Ruhe.

Kopf kratz
Paul
Gast #871399
Lesenswert?

>Hm, warum sollte er auch nicht aus der Schleife springen, schließlich
>rufst Du ja in der Schleife Deine Function auf. Da muß er ja erst mal
>hinhüpfen. In der Function selbst sind a,b und c alle Mann auf Null.
>Das Einzige, was dort passiert ist, daß 20ms gewartet wird und dann ha's
>Ruhe.

Ich denke er meint die For-Schleife in der Funktion, die verlassen wird 
(siehe Betreff). Ausserdem wird doch die unktion mit Paramewtern 
aufgerufen, warum sollten die alle "0" sein?

Aber erklären kann ich mir den Fehler nicht.
Gast #872013
Lesenswert?

Danke für die Antwort. Habs wohl ungenau formuliert, sorry ;)
Ja ich meine natürlich die For-Schleifen in der Unterfunktion. Das ganze 
ist in Bascom geschrieben und das Bascom Programm selbst macht die 
Gross-Klein-Schreibung von alleine grins (also wenn ich "A" schreibe 
macht er automatisch "a" draus)

Ich komme leider nach viel viel kopfzerbrechen auch nicht drauf was es 
seinen  könnte verzweifel
#872323
Lesenswert?

Hallo,
wenn ich es richtig verstanden habe, gehst Du im Fall von A > B mit 
einem negativen Step in die Schleife, dass kann nicht funktionieren.
1
Function Slide(a As Byte , B As Byte , C As Integer) As Byte
2
   If A > B Then
3
//      Negspeed = 0 - C
4
      For I = A To B Step C
5
         Compare3b = I
6
         Waitms 20
7
      Next
8
   Else
9
      For I = B To A Step C
10
         Compare3b = I
11
         Waitms 20
12
      Next
13
   End If
14
   Compare3b = B
15
   Slide = B
16
End Function

So sollte es funktionieren.

Gruß
Frank

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren