Forum: Compiler & IDEs delay us liegt weit daneben


von Rudi (Gast)


Angehängte Dateien:

Lesenswert?

Hallo, ich habe eine Atmega 168-20pu und habe dieses kleine Programm 
genommen, um die delay Funktion zu testen. Leider liege ich nicht bei 
100us, sondern bei 1ms.

Die 8MHz habe ich über PB0 gemessen.


#define F_CPU 8000000

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

int main()
{
  DDRB=0xff;


  while( 1 ) {

   PORTB=0x00;
    _delay_us( 100 );

   PORTB=0xff;
    _delay_us( 100);


  }
}

von Fabian H. (hdr)


Lesenswert?

X-Mag - Taste am Oszi gedrückt?

von Rudi (Gast)


Lesenswert?

Hi,
leider nein. Dann messe ich 10ms..

von micha54 (Gast)


Lesenswert?

Hallo,

hört sich an, als sei die CKDIV8-Fuse falsch gesetzt.

Gruß,
Michael

von Fabian H. (hdr)


Lesenswert?

Falsche Optimierung im Compiler gewählt? (Delay braucht OS)

von Karl H. (kbuchegg)


Lesenswert?

mögliche Fehlerquellen bei _delay_us und _delay_ms

1) man muss beiden Funktionen einen konstanten Ausdruck
   übergeben. Keine Variablen oder sonst zur Laufzeit berechnete
   Werte

2) der Optimizer des Compilers muss eingeschaltet sein

3) die mittels F_CPU angegebene Taktfrequenz muss auch tatsächlich
   die sein, mit der der AVR wirklich läuft


Sind alle 3 Punkte erfüllt, dann stimmen die _delay Zeiten erstaunlich 
genau. Punkt 1 ist bei dir offensichtlich erfüllt. Den Rest kannst nur 
du vor Ort prüfen.

von Rudi (Gast)


Lesenswert?

Ne Warnung bekam ich schon, dachte aber, dass hier keine Optimirungen 
erlaubt sind.


Warning  1  #warning "Compiler optimizations disabled; functions from 
<util/delay.h> won't work as designed"

Was muss ich denn da machen?

von Oliver (Gast)


Lesenswert?

Irgend einen Optimieruengslevel setzten. Alles ausser -O0 geht.

Oliver

von Karl H. (kbuchegg)


Lesenswert?

Rudi schrieb:
> Ne Warnung bekam ich schon, dachte aber, dass hier keine Optimirungen
> erlaubt sind.

Weil keine Optimierungen erlaubt sind, warnt auch der Compiler, dass 
Optimierungen ausgeschaltet sind :-)

(bisse nachdenken. Wenns wurscht wäre, gäbs keine Warnung)

> Was muss ich denn da machen?

Die Optimierung einschalten.
Welche IDE benutzt du? Irgendwo in den Projekt Konfigurations Optionen 
(meist ein Dialog, der von einem Menüpunkt aus aufgerufen wird), gibt es 
eine Einstellung für Compiler-Optimizations. Die stellst du auf -Os.

von Rudi (Gast)


Lesenswert?

Habs gefunden!
Passt sehr genau.
Danke für die schnelle hilfe!!

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.