F_CPU-Verwirrung ATMEGA88

Gast #1799723
Lesenswert?
• ▲
▼
Hallo!
Also ich bin etwas verwirrt.. Ich verwende ein STK500 mit einem 
ATMEGA88.
Jumper scheinen richtig gesetzt, da das Programm bei gesetzem 4MHz-Quarz 
2.5 mal langsamer abläuft als bei 10MHz-Quarz. Ohne Quarz läuft nichts. 
Es wird also der gesteckte Quarz verwendet.

Mit meinen 20MHz-Quarzen läuft der ATMEGA88 nicht, aber das ist momentan 
nicht schlimm. (Reichelt G13-704 20,0000-HC18)

Zum Problem:
1
#define F_CPU 10000000UL //Takt in Hertz
2

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

6
int main()
7
{ 
8
 DDRD  = 0xFF;        // Port D komplett Ausgang
9
 
10
 while(1)
11
 {
12
  PORTD=0xFF;          // Ausgang high
13
  _delay_us(10);        
14
  PORTD=0x00;        // Ausgang low
15
  _delay_us(10);      
16
 } 
17
}

Dies ergibt auf dem Oszilloskop eine Verzögerung von 76µs und nicht die 
gewünschten 10µs.
Wenn ich F_CPU nun durch 7.6 dividiere, erhalte ich exakt die 
gewünschten 10µs.

Das ganz betrifft auch die Funktion    _delay_ms();

Kann mir jemand verraten was hier schief läuft??
Angehängte Dateien:
Gast #1799757
Lesenswert?
• ▲
▼
das geht ja schnell hier :-)

Also Warnung gibt es nur eine: neuer Pfad von delay.h

Ergebnisse der unterschiedlichen Optimierungen bei 10MHz-Quarz:

-O0:   3ms  Verzögerung
-O1:   76µs Verzögerung
-O2:   76µs Verzögerung
-O3:   76µs Verzögerung
-Os:   76µs Verzögerung

Ich habe keine Idee...
Gast #1799778
Lesenswert?
• ▲
▼
Ja, habe ich nun gelöscht!
Es war default-mäßig gesetzt und da ich gerade erst mit den ATMEGAs 
angefangen habe, habe ich es so galassen.. Ich muß mal nachlesen was man 
damit überhaupt fgestlegt..
Nun läuft es!
Moderator Persönliche Seite #1799792
Lesenswert?
• ▲
▼
Stephan schrieb:
> Ich muß mal nachlesen was man
> damit überhaupt fgestlegt..

Die initiale Einstellung des clock prescalers (CLKPR).  Mit gesetzter
CKDIV8-Fuse steht dieser auf 1:8, sodass bei einem 8-MHz-RC-Oszillator
ein CPU-Takt von 1 MHz heraus kommt.  Dieser Takt ist bei allen AVRs
für den kompletten Betriebsspannungsbereich ein gültiger Takt
(während der volle Takt dies nicht wäre).
Gast #1799805
Lesenswert?
• ▲
▼
Oh! (Und ich habe mich gerade gefragt wozu man den Takt verringern 
sollte)
Wäre also vor der Verwendung des vollen Taktes abzuraten?
Und jetzt frag ich mich noch, ob mein Oszilloskop spinnt... Also wegen 
den 76 statt 80µs.. Na, mal schaun. Ist ja auch älter.
Gast #1799815
Lesenswert?
• ▲
▼
ach so.. Aber dann könnte man doch auch einen anderen Quarz nehmen, 
oder?
Hat es noch etwas mit Stabiliät zu tun?
Also das Ganze wird später mit Netzteil betrieben, und in dem Bereich 
darf man ja ruhig "Strom verschwenden" ohne schlechtes Gewissen, oder?

Zum Oszilloskop: Paralaxefehler :-) Es ist ein älteres Oszilloskop bei 
dem die Skala recht weit von der Röhre entfernt ist...

Antwort schreiben

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.

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.