mikrocontroller.net

Forum: Compiler & IDEs AVR ATMEGA 8


Autor: AVR Studio problem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wir haben in der Schule mit AVR-Studio angefangen, das Projekt war eine 
LED am board zum leuchten zu bringen.

Ich habs geschrieben, jedoch werden die while Befehle übersprungen.

DANKE

Quellcode:

#include <avr/io.h>

int main(void)
{
  DDRC = 1;
  unsigned long i;


  for(;;)
  {



      PORTC = PORTC & 254;

      i=0;
    while(i<=1000)
    {
      i++;
    }


      PORTC = PORTC | 1;

      i=0;
    while(i<=5000)
    {
      i++;
    }


  } return 0;

}

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
logisch deine schleife tut ja nix...

daher schmeißt der compiler das raus..

schau mal nach delay_ms( und F_CPU nciht vergessen)

Autor: AVR Studio problem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aber unser lehrer hat uns das so erklärt,


Das soll als verzögerung dienen:

while(i<=1000)
    {
      i++;
    }




Damit es mehrmals blinkt:

while(i<=5000)
   {
      i++;
   }

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das liegt daran, dass der Compiler die while-Schleifen wegoptimiert, 
weil da ja nix weiter passiert. Mach einfach mal ein "volatile" vor 
unsigned long i; Ein richtiges volatile bewirkt Wunder! ;-)

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
AVR Studio problem schrieb:

> aber unser lehrer hat uns das so erklärt,

Dann soll er mal das Tutorial lesen...

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei alten Compilerversionen hat das ja auch funktioniert. Mittlerweile 
ist der Compiler so optimiert, dass offensichtlich funktionsloser Code 
entfernt wird. Wenn man das Warten braucht, muss man entsprechend 
programmieren:
http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Autor: AVR Studio problem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
VIELEN VIELEN DANK :D

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst ja mal deinen Lehrer fragen, warum das hier funktioniert:
volatile unsigned long i;

////

while(i<=1000)
{
   i++;
}


Oliver

Autor: AVR Studio problem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie mach ich das die 2te LED anfangt zu blinken?? also wie muss ichs 
ändern damit ich eine beliebige diode zum blinken bringen kann?

Autor: MeinerEiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Normalerweise schreibt man die Portzugriffe etwas übersichtlicher.
Statt DDRC = 1 nimmt man z.B. DDRC |= (1 << 0), d.h. Bit 0 wird ein 
Ausgang, ohne die anderen Bits in DDRC zu ändern.

Pins Ein/Ausschalten macht man auch eher nicht mit  PORTC = PORTC | 1 
und PORTC = PORTC & 254. Wenn ein Pin eingeschaltet werden soll: PORTC 
|= (1 << n), wobei n zwischen 0 und 7 liegt. Zum Ausschalten: PORTC &= 
~(1 << n).

Macht das ganze etwas übersichtlicher und man braucht nicht lang 
rumrechnen, wenn andere Pins des Ports unangetastet bleiben sollen.

Autor: AVR Studio problem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie würde das mit dem herumrechnen gehen?? Bitte eine kurze erklärung

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitmanipulation

Noch kürzer schaffe ich es nicht ;-)

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.