Forum: Compiler & IDEs Delay funktion


von Matthias L. (mcl024)


Lesenswert?

Hallo

ich habe dieses kleine Prgrämmchen um die delay funktion mal zu testen. 
Das Problem ist das wenn ich 1000ms warte dauert es bestimmt fast 5s bis 
etwas passiert. Woran liegt das??

ich benutze einen ATtiny 13

#include <avr/io.h>
#ifndef F_CPU
#define F_CPU 9600000UL     /* Interner Takt mit 9,6 Mhz */
#endif
#include <util/delay.h>


int main( void )
{
  DDRB = ( 1 << PB3 );// PB3 an PORTB als Ausgang setzen

    for(;;) {
        PORTB ^= ( 1 << PB3 );
        _delay_ms(1000);

    }
}

von Nico E. (masta79)


Lesenswert?

Ist vlt. CKDIV8 gesetzt? Und, bist du sicher das der tiny auf 9.6 und 
nicht auf 4.8 programmiert ist?

Nachtrag aus dem Datenblatt:
1
The device is shipped with CKSEL = “10”, SUT = “10”, and CKDIV8 programmed. The default
2
clock source setting is therefore the Internal RC Oscillator running at 9.6 MHz with longest startup
3
time and an initial system clock prescaling of 8.

von Johannes M. (johnny-m)


Lesenswert?

Optimierung nicht eingeschaltet...

von Matthias L. (mcl024)


Lesenswert?

Also Optimierung ist enable. Aber was meint Nico Erfurth?

In den Fuses ist ein Haken bei 9,6 MHz, also gehe ich davon aus. Den 
Rest verstehe ich nicht bin noch ziemlich neu hier.

Nachtrag
CKDIV8=0 ist angehakt.

muss der haken weg??Was bedeutet das??

von AVRFan (Gast)


Lesenswert?

CKDIV8 = clock divided by 8 = Der System Clock Prescaler, den jedes 
Taktsignal durchläuft, bevor es zu den einzelnen µC-Modulen geroutet 
wird, wird beim µC-Start auf "Teilung durch 8" konfiguriert.

Siehe im Data Sheet unter "System Clock Prescaler" bzw. "Fuses".

von Matthias L. (mcl024)


Lesenswert?

Ok wenn ich den Haken für CKDIV8 wegmache und F_CPU = 4,8MHz definiere 
dann leuchtet die LED bei einer Delay zeit von 1000ms ca. im Takt von 
1Hz. Super das passt, aber warum ist die interne Osl frequenz mit 9,6MHz 
anghakt? Muss ich 4,8MHz wählen?

von Nico E. (masta79)


Lesenswert?

Matthias Lobitz wrote:
> Ok wenn ich den Haken für CKDIV8 wegmache und F_CPU = 4,8MHz definiere
> dann leuchtet die LED bei einer Delay zeit von 1000ms ca. im Takt von
> 1Hz. Super das passt, aber warum ist die interne Osl frequenz mit 9,6MHz
> anghakt? Muss ich 4,8MHz wählen?

Die 9.6 sind angehakt und aktiv. Deine eigentliche Blinkfrequenz bei 
1000ms sollten nämlich 0.5HZ sein (1s an, 1s aus). Durch die halbierte 
F_CPU Einstellung wartet _delay_ms aber nur 500ms pro aufruf.

von Matthias L. (mcl024)


Lesenswert?

ok alles klar. Vielen Dank

Ja manchmal brauch man ein bißchen länger :-)

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.