Forum: Mikrocontroller und Digitale Elektronik Idiotischer Anfängerfehler


von Harald B. (grieko)


Lesenswert?

Hallo Leuts,
nach vielen Jahren habe ich mal wieder mein Olimexboard mit dem Mega16 
bestückt und bin am probieren.
Mein AVR Dragon funzt einwandfrei, daran kann es nicht liegen.
An Port B0 ist eine LED angeschlosen, die eifnach nur blinken soll: Aber 
ich kann den Endwert der for-Schelifen ändern wie ich will, es tut sich 
nichts.
Wenn ich nur den Port einschalte oder ausschalte, also nur EINE 
Anweisung in der while schleife, dann geht es.
Hat jemand eine rettende Idee ?
1
#define  __AVR_ATmega16__  1
2
#define OSCSPEED  8000000    /* in Hz */
3
4
#include "avr/io.h"
5
6
7
void Initialize()
8
{
9
  PORTB = 0x01; //Led is set off
10
  PORTC = 0x00;
11
  PORTD = 0x00;
12
13
  DDRB = 0x01; // Led is set as output
14
  DDRC = 0x01;
15
  DDRD = 0x01;
16
  
17
}
18
19
int main()
20
{
21
  unsigned long l;
22
  Initialize();
23
  while (1)
24
  {
25
    PORTB = 0xFF;
26
    PORTD = 0xFF;
27
    for(l=0;l<100000;l++)
28
      ;
29
    PORTB = 0x00;
30
    PORTD = 0x00;
31
    for(l=0;l<100000;l++)
32
      ;
33
  }
34
  return 0;
35
}

von Werner (Gast)


Lesenswert?

Wie wäre es mit etwas delay?

von .... (Gast)


Lesenswert?

for(l=0;l<100000;l++) asm volatile("");

ansonsten mit:

for(l=0;l<100000;l++) asm volatile("nop");

von MWS (Gast)


Lesenswert?

Probier' doch mal die Optimierung abzuschalten, oder l volatile zu 
machen, damit's nicht wegoptimiert wird.

von Thomas L. (thomas_hx)


Lesenswert?

Leere Schleifen werden gerne auch mal wegoptimiert.

von Coder (Gast)


Lesenswert?

Der Compiler optimiert die for Schleifen raus, weil sie keinen Code 
enthalten. Führe entweder:
- Ein NOP aus
  for (long b = 0; b < 10000; b++) {
       asm("nop");
  };
- oder nutze die Funktion _delay_ms(time_in_ms); Musst dafür nur
  #include <util/delay.h>
  hinzufügen und den Takt über define.

von Lutz H. (luhe)


Lesenswert?

Optimiert der Compiler und macht die for Schleife ganz schnell?
Wie sieht es aus, wenn eine sinnvolle Berechnung in der For Schleife 
gemacht wird?

von Harald B. (grieko)


Lesenswert?

Yap, das war's.
1000 Danke

Greets
grieko

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.