delay us liegt weit daneben

Gast #2536203
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);


  }
}
Angehängte Dateien:
#2536217
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.
Gast #2536218
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?
#2536221
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.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.