Delay funktion

OP #901266
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);

    }
}
#901276
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.
Gast #901552
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".
#901575
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren