Forum: Mikrocontroller und Digitale Elektronik _delay_ms tut garnichts


von Markus W. (kornbanane)


Lesenswert?

Hallo,

ich steh gerade voll aufm Schlauch und find einfach den Fehler nicht....

Habe in einem Programm gemerkt dass die _delay_ms funktion garnichts tut 
- also egal welchen Wert ich ihr Übergebe das Resultat ist so als währe 
sie garnicht da.

Jetzt hab ich ein mini Testprogramm geschrieben welches die Led's an 
Port C blinken lassen soll:
1
#define F_CPU 16000000L
2
3
#include <util/delay.h>
4
5
#include <avr/io.h>
6
7
8
9
int main(void){
10
11
DDRA=0xFF;
12
DDRB=0xFF;
13
DDRC=0xFF;
14
DDRD=0xFF;
15
16
17
while(1)
18
{
19
  PORTC=0x00;
20
  _delay_ms (1000);
21
  PORTC=0xFF;
22
}
23
24
25
26
}

Und es passiert einfach nix - also die Led's Leuchten dauerhaft 
(zumindest für's Auge) also als ob die delay Funktion garnicht da 
stände.

Ich benutze WINAVR und einen Atmega16, dieser ist auch in der Makefile 
mit richtiger Frequenz definiert.

Danke für die Hilfe ;)

von MaWin (Gast)


Lesenswert?

Natürlich leuchtet die LED dauerhaft,
du hast den Scheiss ja auch so programmiert,
zwischen
 PORTC=0xFF;
und
 PORTC=0x00;
steht keine Verzögerung.

von Detlev T. (detlevt)


Lesenswert?

Gibt es keine Warnungen? Welche Optimierung ist eingestellt? _delay_ms 
meckert bei mir immer, wenn ich -O0 habe.

von Lukas K. (carrotindustries)


Lesenswert?

Markus Wi*** schrieb:
> Und es passiert einfach nix - also die Led's Leuchten dauerhaft
> (zumindest für's Auge) also als ob die delay Funktion garnicht da
> stände.

Überleg' dir mal was dein Code macht:

[Alle LEDs aus
eine Sekunde warten
Alle LEDs an]
[Alle LEDs aus
eine Sekunde warten
Alle LEDs an]
...

fällt dir was auf?

von boool (Gast)


Lesenswert?

Hallo,

was soll schon passieren....

PORTC ist nur für den Bruchteil einer Sekunde auf "FF"

Gruss BOOOL

von hp-freund (Gast)


Lesenswert?


von Martin (Gast)


Lesenswert?

Probier mal folgenden Code in der While-Schleife
1
PORTC=0xFF;
2
_delay_ms(1000);
3
PORTC=0x00;
4
_delay_ms(1000);

von Falk B. (falk)


Lesenswert?

@  Markus Wi*** (kornbanane)

Versuchs mal so . . .

1
while(1)
2
{
3
  PORTC=0x00;
4
  _delay_ms (1000);
5
  PORTC=0xFF;
6
  _delay_ms (1000);
7
}

MfG
Falk

von Falk B. (falk)


Lesenswert?

Zu langsam . . .

von Cyblord -. (cyblord)


Lesenswert?

Ist aber ein sehr beliebter Anfängerfehler ;-)

von Markus W. (kornbanane)


Lesenswert?

Unfassbar .....

hab ja gesagt ich steh auf dem Schlauch aber sowas ...

Naja vielen dank euch allen

von Klaus (Gast)


Lesenswert?

cyblord ---- schrieb:
> Ist aber ein sehr beliebter Anfängerfehler ;-)

Nein, ist er absolut nicht...

von Cyblord -. (cyblord)


Lesenswert?

Klaus schrieb:
> cyblord ---- schrieb:
>> Ist aber ein sehr beliebter Anfängerfehler ;-)
>
> Nein, ist er absolut nicht...

Doch ist er

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.