Forum: Mikrocontroller und Digitale Elektronik [Frage?] die Delay TIme nicht stimmt mit <util/delay.h>.


von Paramet W. (paman)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen ....

Ich hab diese Funktion <util/delay.h> mit ATmega16 versucht zu benutzen.
Aber die Zeit nicht so stimmt.

zB. Ich hab auf 80us gesetzt, aber sie kommt auf 990us aus.

Ich habe schon mit FUSE Bit korrigiert, das schon richtig ist.
Die Quarz ist auch richtig 4Mhz.

Woran kann die Problem noch legen, oder mich etwas flash gemacht

Danke für eure Hilfe ...

Gruß
PaMan
1
#include <avr/interrupt.h>
2
#include <avr/io.h>
3
#include <stdint.h>
4
5
#ifndef F_CPU
6
#define F_CPU 4000000UL     /* Quarz 4 Mhz */
7
#endif
8
#include <util/delay.h> 
9
/******************************************************************************/
10
11
int main (void)
12
{
13
14
  DDRA = 0xFF;          // Set PortA as Output
15
16
  DDRB =  0b11111010;        // PB3( OC0 as Output) PB0(T0 as Input) PB2(SW as Input)
17
  PORTB = 0b00000101;        // Pull Up Input Pin
18
19
  PORTA |= (1<<PORTA0);      // Pre Show
20
21
  
22
23
    while(PINB & (1<<PINB2));  // wait switch Clear (Loop until bits clear)
24
    PORTA &= ~(1<<PORTA0);    // switch Confirm clear pre show
25
26
    while(1)
27
    {
28
    _delay_us(80);
29
30
    PORTA |= (1<<PORTA1);
31
32
    _delay_us(80);
33
34
    PORTA &= ~(1<<PORTA1);
35
    }
36
37
}

von Andreas K. (a-k)


Lesenswert?

Zum Thema Screenshot: Bildformate, also PNG nicht JPG.

Zum Problem: Doku lesen bildet: Optimierung einschalten. 
Fliesskommarechnung zur Laufzeit ist auf AVRs eher langsam.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Kontrolliere ob F_CPU ausserhalb von deinem Quellcode anders definiert 
ist (AVRStudio-Einstellung oder Makefile).

Kontrolliere ob die Quellen wie von delay() vorgesehen mit 
eingeschalteter Optimierung übersetzt werden.

von Peter S. (psavr)


Lesenswert?

Das jpg Bild ist von der Dateigrösse und Bildqualität völlig ok!

Aber vermutlich hast Du die Optimierung nicht aktiviert,ich empfehle 
generell -O1 zu verwenden. (Höhere Optimierungs Stufen sind auch okey, 
bewirken aber nur noch marginale Verbesserungen)

von Andreas K. (a-k)


Lesenswert?

> Das jpg Bild ist von der Dateigrösse und Bildqualität völlig ok!

Seine erste Version war völlig unbrauchbar. Es ergibt wenig Sinn, einen 
Screenshot solange als JPG mit unterschiedlicher Komprimierung zu 
speichern bis er lesbar ist. PNG ist da einfacher und besser.

von Falk B. (falk)


Lesenswert?

@ Peter S. (psavr)

>Das jpg Bild ist von der Dateigrösse und Bildqualität völlig ok!

Ja, aber dennoch das falsche Format. Ich kann auch mit ner Schubkarre am 
Sonntagmorgen zum Bäcker fahren. . . ;-)

Mfg
Falk

von Sebastian M. (sebby)


Lesenswert?

was steht in der util/delay.h also taktfrequenz drin?
wenn da auch 4 mhz steht, dann mach mal eine endlos schleife und toggle 
nur ein pin, da müssten dann 2 mhz rauskommen (wenn ich mich net irre), 
als vergleich

von Johannes M. (johnny-m)


Lesenswert?

Sebastian Müller wrote:
> was steht in der util/delay.h also taktfrequenz drin?
Was soll denn bitteschön in der delay.h für eine Taktfrequenz stehen? 
Die wird im Makefile angegeben!

> wenn da auch 4 mhz steht, dann mach mal eine endlos schleife und toggle
> nur ein pin, da müssten dann 2 mhz rauskommen (wenn ich mich net irre),
> als vergleich
Das kannste ja mal versuchen. Jede Wette, dass da bei Weitem weniger als 
2 MHz rauskommen!

BTW: Durch Pin-Toggeln in Software kriegste selbst in Assembler bei 
Weitem keine F_CPU/2 raus, von C ganz zu schweigen!

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.