mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik einfache LED Schaltung


Autor: Stefan Meier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

könnt einer mir vielleicht sagen was ich falsch mache? Ich habe 
folgendes sehr einfaches Programm:

int main (void) {



   DDRB  = 0xff;
   PORTB = 0xff;

   DDRC  = 0xff;
   PORTC = 0x00;

   DDRD  = 0x00;
   PORTB = 0x00;

   DDRD = 0x00;
   PORTD = 0xFF;


   double i=0,t=0;

   while(1) {

     LED0 (LED_ON);
  for(i=0;i<500000;i++){};
  LED1 (LED_ON);


   }


   return 0;
}

und ich will eigentlich nur dass erst die LED0 und dann die LED1 
eingeschalten wird, aber er schaltet immer nur die LED0 ein, danach 
beendet er anscheinend das Programm.

Kann mir vielleicht jemand kurz helfen, denke dass ist für euch kein 
Problem??

danke!

Autor: Stefan Meier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, jezt hab ich selber rausgefunden!!!!! :-))))

Autor: Klaus Skibowski (skibby)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stefan,

was die Funktion "LED0 (LED_ON)" macht ist hier nicht ersichtlich ...
Daher kann man da keine Aussage treffen ob da ein Fehler ist.

Ausserdem:

definiere i mal als long int statt als double !

Autor: willi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>...denke dass ist für euch kein Problem??


selbst für uri geller wär das mit deinen angaben unmöglich.

1. wo und wie sind die LEDs angeschlossen?

2. was soll uns "LED0 (LED_ON);" sagen?

3. außerdem sieht:
    DDRB  = 0xff;
    PORTB = 0xff;

    DDRC  = 0xff;
    PORTC = 0x00;

    DDRD  = 0x00;
    PORTB = 0x00;

    DDRD = 0x00;
    PORTD = 0xFF;
  sehr merkwürdig aus

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>for(i=0;i<500000;i++){};

und die schleife geht vermutlich schneller als du denkst - bei 
optimierung werden es 0µs sein

Autor: ano (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn i überhaupt richtig defeniert ist

Autor: W. S. (wope)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ano wrote:
> wenn i überhaupt richtig defeniert ist

yep, denke auch, dass mit "double" ist wahrscheinlich eher "long" 
gemeint gewesen ist...

Hab gar nicht gewusst, dass i++ mit double geht, glaube werde es auch 
nie brauchen :-)

@Stefan:

Unbedingt auf die richtige Verwendung von Datentypen aufpassen. Für das 
obige Beispiel ist double irgendwie unpassend.

Aber wenn das -O Flag von gcc beim Kompilieren entsprechend gesetzt ist, 
wird der Code tatsächlich wegoptimiert worden sein - nix mehr 
Warteschleife...

Probier mal (gehe mal davon aus, es ist ein AVR Programm und avr-libc, 
usw. ist vorhanden):
#include <util/delay.h>
und statt der Warteschleife
_delay_ms( 500 ); // halbe sec. warten

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.