www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Fehler in einer if-Bedingung


Autor: Tobias Busch (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich habe einen PIC16F877 mit 20MHz und ich benutze CC5x.

Ich hab zwei LED's die abwechselnd blinken. Am Anfang mit 1ms Abstand
und dann werden die Abstände immer verdoppelt bis 1024ms. Dann sollte
er eigentlich die Abstände bis 1ms wieder halbieren, um dann wieder von
vorn anzufangen. Das tut er aber nicht! Ich hab schon eine Kontroll-LED
eingebaut die angeht wenn er anfängt runter zu zählen.

Komisch ist, dass die Kontroll-LED zwar angeht er, aber das Blinken
nicht wieder schneller wird. Das kann ich mir nicht erklären, da die
Kontroll-LED erst auf high geht, wenn er anfängt zu teilen.

Dazu bitte unbedingt den angehängten Sourcecode ansehen!!!

Danke für die Hilfe!

Autor: Tobias Busch (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Sorry in der Datei isn Fehler! Hier aber die richtige ( geht trotzdem
net!)

Autor: Philipp Sªsse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann geh Deinen Spaß doch einmal Schritt für Schritt durch:

Wenn Du bei 1024 bist, setzt Du Dein Flag, daß es wieder abwärts gehen
soll, aber den Wert läßt Du auf 1024, damit wird der Teil, wo
runtergezählt wird, nie mehr erreicht.

Autor: Tobias Busch (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
ist mir grade selbst aufgefallen. Danke trotzdem! funzt das denn so?

siehe Anhang

Autor: Philipp Sªsse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, aber warum so umständlich?

if (up_down)
 {
  time <<= 1;
  if (time == 1)
    up_down = 0;
 }
else
 {
  time >>= 1;
  if (time == 1024)
    up_down = 1;
 }

Wenn man so programmiert statt mit solchen Bedingungskaskaden,
1) kann es nicht passieren, daß man eine Zustandskombination vergißt
2) kann man auf einen Blick verstehen, was da passiert
3) wird der Code kleiner

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.