delay_us - AtmelStudio7- zu langsam ?

Gast #4587203
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
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
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
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
Gast
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.
@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

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.