mikrocontroller.net

Forum: Compiler & IDEs Delay funktion


Autor: Matthias Laubnitz (mcl024)
Datum:

Bewertung
0 lesenswert
nicht 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);

    }
}

Autor: Nico Erfurth (masta79)
Datum:

Bewertung
0 lesenswert
nicht 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:
The device is shipped with CKSEL = “10”, SUT = “10”, and CKDIV8 programmed. The default
clock source setting is therefore the Internal RC Oscillator running at 9.6 MHz with longest startup
time and an initial system clock prescaling of 8.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Optimierung nicht eingeschaltet...

Autor: Matthias Laubnitz (mcl024)
Datum:

Bewertung
0 lesenswert
nicht 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??

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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".

Autor: Matthias Laubnitz (mcl024)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Nico Erfurth (masta79)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias Laubnitz (mcl024)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok alles klar. Vielen Dank

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.