-         

Ergebnis 1 bis 7 von 7

Thema: % Rechnung

  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693

    % Rechnung

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Folgender Codeteil erbringt nicht das erhoffte:
    Code:
    Do
       For X = 800 To 0 Step -10
       Pwm1b = X
       Pwm1a = X
          A = X / 8
       Cls
       Lcd A ; "%"
       Lowerline
       Lcd X
       Waitms 150
       Next X
       Wait 1
      Loop
    X ist Word und A ist Byte. Wenigstens das sollte schonmal richtig sein.
    Das ganze ist eine PWM die soweit auch funktioniert, bis auf das auf dem LCD angezeigte.

    Im ersten Durchlauf fängt X mit 800 an. Aber A zeigt nur 4%
    X zählt in 10er Schritten runter. A wird auch weniger. Nachdem A=0 hatte fängt A wieder mit 31 an. X zählt normal weiter. A zählt auch runter und fängt nach 0 wieder mit 31 an.
    Irgendwann sind dann X und A=0.

    Dann fängt X mit 6553X an. Welche Zahl genau kann ich so schnell nicht sehen. Aber ziemlich am max was Word aufnehmen kann. A zählt auch da immer nur von 31 runter.
    X zählt immer un 10 runter und die Bel. wird heller. Bei max. Helligkeit fängt sie wieder bei (fast) Null an heller zu werden.

    Sieht da jemand den Fehler im Programm und kann mir die Lösung nennen?

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    48
    Beiträge
    1.254
    Hallo Marco78,
    X ist Word und A ist Byte. Wenigstens das sollte schonmal richtig sein.
    Dimensionier A als Word, und es sollte passen.
    Wenn du nämlich von deinem Anfangswert (800) nur die unteren 8 Bit (Byte) nimmst, hast du 32! Das geteilt durch 8 ist 4.
    Gruß, Michael

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Danke, genau das war's!

    Hast du auch ne Idee, warum der Zähler danach bei 65536 anfängt?
    Man könnte es ja auch mit decr lösen. Aber verstehen würd ich es trotzdem gerne. Ich hatte auch schon ein X=0 vor loop eingefügt, aber das änderte nichts.

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    48
    Beiträge
    1.254
    Hallo Marco78,
    Hast du auch ne Idee, warum der Zähler danach bei 65536 anfängt?
    Wir die Loop-Schleife dann wiederholt, oder hängt er noch in der FOR-Schleife fest?
    Laß mal das Do-Loop weg und teste dann, ob X überhaupt 0(Null) erreicht.
    Ich nehme an, daß die FOR-Schleife nicht verlassen wird.
    Hast du die End Anweisung drin?
    Gruß, Michael

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Interessante Erkentniss

    Also, die 0 wird erreicht. End habe ich ganz am Ende des Listings.
    Aber nachdem ich wait mal auf 100 gesetzt habe, konnte ich beobachten das er sofort (ohne über eine Minute zu warten) mit 65536 wieder anfängt.
    Bei Step -1 war es auch so. Eigentlich müsste die 0 ja erreicht werden.

    Was für ein Fehler habe ich denn da wieder eingebaut?!?

    Ich hab grad mal nachgeschaut. Sonst sind da im Programm keine Schleifen eingebaut. Den Rest habe ich mit Incr und Loop Until gemacht. Wäre da zwar auch möglich, aber 10 Schritte auf einmal sollten es schon sein. Da wäre Step -10 einfacher denke ich.
    Oder alternativ X = X - 10
    Verstehen warum es so nicht geht möchte ich aber dennoch.

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von Michael
    Registriert seit
    17.01.2004
    Ort
    Karlstadt
    Alter
    48
    Beiträge
    1.254
    Hallo Marco78,
    so, ich hab jetzt mal das ganze aufgebaut und getestet.
    Es stimmt, der Zähler X läuft über, und zwar in der FOR-Schleife.
    Abhilfe schafft entweder:
    For X = 800 To 1 Step -10
    allerdings ist der letzte Schleifenwert dann 10, bzw. 1%
    oder:
    For X = 0 To 800 Step 10
    Pwm1b = 800 - X
    .
    A = 800 - x
    A = A / 8
    usw.
    Gruß, Michael

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.11.2004
    Beiträge
    1.693
    Ich denke ich hab das Problem erkannt. von 800 bis 0 sind es 801 Schritte. Und das lässt sich schlecht durch 10 teilen

    Aber ich hab's gestern Nacht noch in Do und Loop Until und X = X + 10 geändert.

    Wenn doch alle Lösungen so einfach wären

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •