delay_us - AtmelStudio7- zu langsam ?

Gast #4587203
Lesenswert?

1
//Attiny45
2
#define F_CPU 8000000UL
3

4
#include <avr/io.h>
5
#include <util/delay.h>
6

7

8
int main(void)
9
{
10
  DDRB |= (1<<DDB0);
11
    /* Replace with your application code */
12
    while (1) 
13
    {
14
    PORTB ^= (1<<PORTB0);
15
    _delay_ms(1000);
16
    }
17
}

Guten Tag,

Ich möchte hier eine LED die sich +- alle 1s ein und Ausschaltet.

Ich musste leider feststellen das sich meine LED nur ca alle 7s 
umschaltet obwohl ich einen delay von 1000ms eingetragen habe.

Im Datenblatt steht folgendes:
"By default, the PLL uses the output of the internal, 8.0 MHz RC 
oscillator as source"

Also warum stimmt mein Delay nicht ?

( #define F_CPU 8000000UL -> Was bedeutet das "UL" am ende ? )

Bei den Fuses bei SUT_CKSEL -> stehen auch 8Mhz wenn ich ihn auslese.

Bei Board settings steht : 3.686Mhz ich benutze ein STK500 um ihn zu 
programmieren.

Freundliche Grüsse
Koe
Gast #4587220
Lesenswert?

g457 schrieb:
>> Bei den Fuses bei SUT_CKSEL -> stehen auch 8Mhz wenn ich ihn
> auslese.
>
> Hast Du CKDIV8 gelöscht?

Ist gesetzt

Karl M. schrieb:
> Hallo,
>
> was soll das hier ?
> #define F_CPU 8000000UL
> Einmal Banane - bitte abbeißen.

Sorry, aber sehe hier keinen Fehler. Wenn du das mit der Banane 
meinst...

8Mhz = 8000kHz = 8000000Hz -> oder wilst du auf was anderes hinaus ?

da ich ja die <util/delay.h> include motzt er mir wenn ich die F_CPU 
nicht definiere.

Mfg Koe
Gast #4587226
Lesenswert?

Wenn du willst, daß die delay-Funktion richtig funktioniert, mußt du bei 
F_CPU den Wert eintragen, mit der der µC wirklich läuft. Also welcher 
Quarz ist dran, wie steht CKDIV8, wie sind die Fuses gesetzt (wird der 
Quarz oder der interne RC genutzt?).
Gast #4587227
Lesenswert?

Frank M. schrieb:
> KoE schrieb:
>>> Hast Du CKDIV8 gelöscht?
>>
>> Ist gesetzt
>
> Dann wird der Takt durch 8 geteilt. Dein µC rennt dann nur mit 1MHz.

g457 schrieb:
>>> Hast Du CKDIV8 gelöscht?
>>
>> Ist gesetzt
>
> Löschen.

Besten Dank.

Aber welche funktion hat es einen µC mit 8MHz internal Clock 
auszuliefern und dann diesen durch 8 zu dividieren, und ihn nur mit 1MHz 
laufen zu lassen ?

Weil auch im Datenblatt ist immer die Rede von 8Mhz.....

Mfg Koe
#4587243
Lesenswert?

@KoE (Gast)

>Aber welche funktion hat es einen µC mit 8MHz internal Clock
>auszuliefern und dann diesen durch 8 zu dividieren, und ihn nur mit 1MHz
>laufen zu lassen ?

Damit er auch bei minimaler Spannung noch sicher funktioniert. Der 
Hersteller weiß ja nicht, mit welcher Spannung dieser betrieben wird. 
Wenn der nur mit 1,8V läuft, sind 8 MHz nicht mehr zulässig. Dann müsste 
man ihn in der Massenproduktion vorher umprgrammieren. Das will keiner.

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