Forum: Mikrocontroller und Digitale Elektronik For-Schleife - Komisches Verhalten


von derhalt (Gast)


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

von Paul Baumann (Gast)


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

von tastendrücker (Gast)


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.

von Johannes M. (johnny-m)


Lesenswert?

Ist BASIC nicht Case-sensitiv? In C ist a nicht gleich A ... 
Zumindest heißt der erste Funktionsparameter oben a und in der 
Funktion wird mit A gearbeitet.

von derhalt (Gast)


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

von Frank L. (franklink)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.