www.mikrocontroller.net

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


Autor: derhalt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)
Config Timer3 = Pwm , Prescale = 256 , Pwm = 8 , Compare B Pwm = Clear Down 

Dim I As Byte
Dim Negspeed As Integer
Dim Newval As Byte
Dim Oldval As Byte
Dim Stepsize As Integer

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

Compare3b = 0
Oldval = Compare3b

Do

  Newval = Rnd(230) + 25
  Stepsize = Rnd(58) + 2
  Oldval = Slide(oldval , Newval , Stepsize)
  Waitms 30

Loop
End



Function Slide(a As Byte , B As Byte , C As Integer) As Byte
   If A > B Then
      Negspeed = 0 - C
      For I = A To B Step Negspeed
         Compare3b = I
         Waitms 20
      Next
   Else
      For I = A To B Step C
         Compare3b = I
         Waitms 20
      Next
   End If
   Compare3b = B
   Slide = B
End Function

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: tastendrücker (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: derhalt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank Link (franklink)
Datum:

Bewertung
0 lesenswert
nicht 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.
Function Slide(a As Byte , B As Byte , C As Integer) As Byte
   If A > B Then
//      Negspeed = 0 - C
      For I = A To B Step C
         Compare3b = I
         Waitms 20
      Next
   Else
      For I = B To A Step C
         Compare3b = I
         Waitms 20
      Next
   End If
   Compare3b = B
   Slide = B
End Function

So sollte es funktionieren.

Gruß
Frank

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.