www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Lauflicht programmieren


Autor: Oliver D. (smasher)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

also irgendwie steig ich nicht dahinter....

Ich würde gern ein Blinklich programmieren doch irgendwie sind meine 
Lichter immer beide an.

So sieht mein quellcode aus:

sbit led0=0x80;
sbit led1=0x81;
main (void)
{
unsigned int x,y;

for (y=0; y<100000;y++)
{
led0=0;
led1=1;
}

for (x=0; x<100000;x++)
{
led0=1;
led1=0;
}

}

Es sollte ja also immer von 0 bis gezählt werden und solange die LED 
einegschaltet sein. Wenn die For schleife beendet ist, gehts zur 
nächsten, bei der das gleiche nur mit anderer LED passiert. Es ist 
ausserdem immer eine LED ausgeschaltet.
Also sollten die LEDs Wechselweise hin und her springen.
Stattdessen bekomme ich beide Lampen eingeschaltet.
Auch bei utopisch hohen werten für die beiden Variablen kein 
unterschied.

Habt ihr einen Tip?

Autor: ARM-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der unsigned int Werteberiech geht nur von 0 bis 0xFFFF bzw. 65535.

Autor: Oliver D. (smasher)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Upssala :)

Autor: Oliver D. (smasher)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, ich habe jetzt den unsigned int gegen unsigned long integer
getauscht und den wert auf 4 000 000 000 gesetzt.

Funz immer noch nicht

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach ne Schleife drumrum.

Das Main darf nie verlassen werden !


Peter

Autor: Oliver D. (smasher)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso,
sorry, es ist bereits eine Schleife drumherum.
Hatte ich vergessen mit einzutragen!

Autor: Oliver D. (smasher)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aaah es funktioniert :)

Es lag am Datentyp und an der Zähllänger.

Ich habe nun einfach 2 For schleifen ineinander geschachtelt, sodass 
6500 bis 600 gezählt wird. Also insgesamt 4 For schleifen um abwechselnd 
leds zum leuchten zu bringen.

Nun muss ich nurnoch die Zählzeit anpassen um einen schönen Wechsel zu 
haben.


Danke für die Hilfe!

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oliver D. wrote:

> Nun muss ich nurnoch die Zählzeit anpassen um einen schönen Wechsel zu
> haben.

Man kann auch nen Timer nehmen, dann muß man nicht planlos rumprobieren, 
sondern kann alle Zeiten auf den Takt genau ausrechnen.


Peter

P.S.:
Genau dafür sind die Timer da.

Autor: Oliver D. (smasher)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich weiß,

aber leider verstehe ich nicht genaue wie man die Timer verwendet...
Im Datenblatt meines AT89S52 steht ne Tabelle mit adressen der SFRs, 
leider raffe ich nicht was ich genau brauche für den Timer, auch wenn 
ich hier schon mehrere Beispiele dazu hatte.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
braucht man dazu überhaupt einen Timer?
Oder geht das auch ohne?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas schrieb:
> braucht man dazu überhaupt einen Timer?
> Oder geht das auch ohne?

Sachen wir mal so:
Wenn das Ziel nur darin besteht ein paar LED zum blinken zu bringen, 
dann gehts auch ohne.

Übrigens: diese Zählschleifen sind meistens Murks. Wann immer möglich, 
wird der Optimizer des Compilers sein Pflicht tun und sie einfach 
rauswerfen :-)

Im WinAVR gibt es Wartefunktionen: _delay_ms( zeit )
Damit macht man Warteschleifen, wenn man denn unbedingt keinen Timer 
benutzen will.

Aber Hand aufs Herz: Wie oft hat man den Fall, dass ein µC wirklich nur 
ein paar LED blinken lassen soll und sonst nichts.

In allen anderen Fällen ist der Warteschleifenansatz meistens nicht zu 
gebrauchen.

Autor: Thomas B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also benutzt man dieses delay nur für Zeitschleifen. Kann man diese 
Schleifen auch in einem Unterprogramm verknüpfen?

mfg Thomas

Autor: jaytharevo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Natürlich kannst du die delay Funktionen in einer Funktion verwenden.

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.