mikrocontroller.net

Forum: Compiler & IDEs Lauflicht anhalten und weiterlaufen lassen


Autor: Tobias Alberto (tomabe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

programmieren in der Schule gerade ein Lauflicht, nun kennen wir uns 
damit nicht wirklich aus xD...

das ist unser Quellcode:

#include<avr/io.h>
#include<util/delay.h>



    main(viod)
    {
            int takt, takt2, takt3;
      DDRC = 0x00;
      DDRB = 0xFF;
      takt = 5000;
      takt2 = 2500;
      takt3 = 50;








      while (1)
      {


      _delay_ms(takt);
      PORTB =0x1F;
      _delay_ms(takt);
      PORTC = 0xF4;
      _delay_ms(takt);
      PORTC = 0x1F;
      _delay_ms(takt);
      PORTC = 0xF1;
      _delay_ms(takt);


//Taste S5
        if (!(PIND & (0<<PD6)) )

        {

        PORTB = 0xFF;
        _delay_ms(takt);
        PORTB = 0xFE;
        _delay_ms(takt);
        PORTB = 0xFD;
        _delay_ms(takt);
        PORTB = 0xFB;
        _delay_ms(takt);
        PORTB = 0xF7;
        _delay_ms(takt);
        PORTB = 0xEF;
                _delay_ms(takt);
        PORTB = 0xDF;
                _delay_ms(takt);
        PORTB = 0xBF;
        _delay_ms(takt);
        PORTB = 0xEF;
        _delay_ms(takt);
        PORTB = 0xF7;
        _delay_ms(takt);
        PORTB = 0xFB;
        _delay_ms(takt);
        PORTB = 0xFD;
        _delay_ms(takt);
        PORTB = 0xFE;
        _delay_ms(takt);
        PORTB = 0xFF;
        _delay_ms(takt);

        }
//Taste S6
                if (!(PIND & (1<<PD7)) )
        {

        PORTB = 0xFF;
        _delay_ms(takt2);
        PORTB = 0xFE;
        _delay_ms(takt2);
        PORTB = 0xFD;
        _delay_ms(takt2);
        PORTB = 0xFB;
        _delay_ms(takt2);
        PORTB = 0xF7;
        _delay_ms(takt2);
        PORTB = 0xEF;
                _delay_ms(takt2);
        PORTB = 0xDF;
                _delay_ms(takt2);
        PORTB = 0xBF;
        _delay_ms(takt2);
        PORTB = 0xEF;
        _delay_ms(takt2);
        PORTB = 0xF7;
        _delay_ms(takt2);
        PORTB = 0xFB;
        _delay_ms(takt2);
        PORTB = 0xFD;
        _delay_ms(takt2);
        PORTB = 0xFE;
        _delay_ms(takt2);
        PORTB = 0xFF;
        _delay_ms(takt2);
        }
//Taste S2
                if (!(PIND & (1<<PD3)) )
        {

            PORTB = 0xFF;
                _delay_ms(takt);
             PORTB = 0xEF;
                _delay_ms(takt);
            PORTB = 0xF7;
                _delay_ms(takt);
            PORTB = 0xFB;
                _delay_ms(takt);
            PORTB = 0xFD;
                _delay_ms(takt);
            PORTB = 0xFE;
                _delay_ms(takt);
            PORTB = 0xFE;
                _delay_ms(takt);
            PORTB = 0xFD;
                _delay_ms(takt);
            PORTB = 0xFB;
                _delay_ms(takt);
            PORTB = 0xF7;
                _delay_ms(takt);
            PORTB = 0xEF;
                _delay_ms(takt);


        }

        }

      return 0;

}


Nun fragen wir uns wie wir das machen können, dass wenn wir den Knopf 
PD4
drücken das Licht was gerade durchläuft angehalten werden kann.

Danke im vorraus.

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

Bewertung
0 lesenswert
nicht lesenswert
Das wird so sowieso nicht richtig fnktionieren. Die _delay_XX-Funktionen 
funktionieren nämlich nur dann richtig, wenn ihnen konstante, zur 
Compile-Zeit bekannte Parameter übergeben werden. Wenn das nicht 
zutrifft, wird erstens die float-lib ins Programm eingebunden, damit die 
Werte zur Laufzeit berechnet werden können, und außerdem funktioniert 
das Timing nicht mehr.

Variable delays macht man, wenn überhaupt, indem man ein _delay_XX mit 
fester länge in einer Schleife wiederholt aufruft.

Außerdem sorgen die delays dafür, dass sich das ganze nicht ohne 
weiteres und ohne softwaretechnische Verrenkungen anhalten lässt. Für so 
etwas nimmt man einen Timer, den kann man jederzeit einfach anhalten!

Abgesehen davon hast Du die Forenregeln, die Du beim Absenden 
bestätigen musstest, nicht beachtet! Es ist bei Anfragen im Betreff oder 
zumindest irgendwo im Text zu erwähnen, um welchen Controller es sich 
handelt! Da Du hier schreibst, gehe ich davon aus, dass Du auch des 
Lesens mächtig bist. Und für C-Code gibt es hier im Forum 
Formatierungsmöglichkeiten, die das ganze besser lesbar machen!

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Abgesehen davon hast Du die Forenregeln, die Du beim Absenden
>bestätigen musstest, nicht beachtet! Es ist bei Anfragen im Betreff oder
>zumindest irgendwo im Text zu erwähnen, um welchen Controller es sich
>handelt! Da Du hier schreibst, gehe ich davon aus, dass Du auch des
>Lesens mächtig bist. Und für C-Code gibt es hier im Forum
>Formatierungsmöglichkeiten, die das ganze besser lesbar machen!

Nu reg dich mal nicht so auf! Das ist für Leute in deinem Aletr gar 
nicht gut ;)

>programmieren in der Schule gerade ein Lauflicht, nun kennen wir uns
>damit nicht wirklich aus xD...

Wird inzwischen in der Schule gelehrt, dass Sätze kein Subjekt mehr 
haben müssen?

Habt Ihr schon mal etwas von Schleifen und Felder gelernt?
Die Kombination aus diesem beiden würde dein Programm wesentlich 
verkürzen und dei gewünschte Funktionalität problemlos ermöglichen.

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

Bewertung
0 lesenswert
nicht lesenswert
STK500-Besitzer wrote:
> Nu reg dich mal nicht so auf! Das ist für Leute in deinem Aletr gar
> nicht gut ;)
Ich rege mich nicht auf. Wenn ich mich aufrege, sieht das anders aus! 
Außerdem: Woher willst Du wissen, wie alt ich bin?

> Wird inzwischen in der Schule gelehrt, dass Sätze kein Subjekt mehr
> haben müssen?
Ach, aber anderen vorwerfen, sie regen sich auf. Hmmm...

Autor: Skua (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Habt Ihr schon mal etwas von Schleifen und Felder gelernt?
Aber erst den Oberlehrer machen.

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

Bewertung
0 lesenswert
nicht lesenswert
Übrigens immer wieder gern gelesen: AVR-GCC-Tutorial...

Finde es allerdings ein bisschen seltsam, dass die Betreuer solcher 
Schulversuche es nicht hinbekommen, ihren Schützlingen die Materie auf 
anschauliche Art nahezubringen. Und das mit den delays oben stimmt mich 
da ein bisschen nachdenklich...

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Und das mit den delays oben stimmt mich da ein bisschen nachdenklich...
Ja, wenn das alles ist... :-/
Ich würde sowas sofort zur Erklärung einer for-Schleife hernehmen, wenn 
ich Lehrer wäre.

> dass wenn wir den Knopf PD4
> drücken das Licht was gerade durchläuft angehalten werden kann.
Also, so wie das Programm bisher aussieht, kann ein bisschen mehr Murks 
auch nicht schaden. Ich würde die Abfrage von PD4 in die _delay_ms() 
Routine einbauen, die wird ja dauernd aufgerufen. :-o

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.