Forum: Mikrocontroller und Digitale Elektronik delay_us - AtmelStudio7- zu langsam ?


von KoE (Gast)


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

von Karl M. (Gast)


Lesenswert?

Hallo,

was soll das hier ?
1
#define F_CPU 8000000UL

Einmal Banane - bitte abbeißen.

von Karl M. (Gast)


Lesenswert?

Add
1
<zahl>UL
Die Zahl wird als 64Bit-Zahl ohne Vorzeichen interpretiert.

von Karl M. (Gast)


Lesenswert?

Sorry 32Bit-Zahl.

von g457 (Gast)


Lesenswert?

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

Hast Du CKDIV8 gelöscht?

von KoE (Gast)


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

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

KoE schrieb:
>> Hast Du CKDIV8 gelöscht?
>
> Ist gesetzt

Dann wird der Takt durch 8 geteilt. Dein µC rennt dann nur mit 1MHz.

von g457 (Gast)


Lesenswert?

>> Hast Du CKDIV8 gelöscht?
>
> Ist gesetzt

Löschen.

von Wersi (Gast)


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?).

von KoE (Gast)


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

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Karl M. schrieb:
> Add
>
1
<zahl>UL
> Die Zahl wird als 64Bit-Zahl ohne Vorzeichen interpretiert.

Karl M. schrieb:
> Sorry 32Bit-Zahl.

Weder noch.  Es wird als unsigned long interpretert.  Das können 32 oder 
64 Bits sein, muss aber nicht.

von Wersi (Gast)


Lesenswert?

Johann L. schrieb:
> Weder noch.  Es wird als unsigned long interpretert.  Das können 32 oder
> 64 Bits sein, muss aber nicht.

Auf einem Tiny?
Du mußt jetzt nicht alle Möglichkeiten aufzählen, die es woanders gibt. 
Hier geht es um einen Tiny, und da hat UL 32bit/unsigned.

von Falk B. (falk)


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.

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.