Forum: Mikrocontroller und Digitale Elektronik F_CPU-Verwirrung ATMEGA88


von Stephan (Gast)


Angehängte Dateien:

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Stephan schrieb:
> Kann mir jemand verraten was hier schief läuft??

Vergessen, die Optimierung einzuschalten und dann die entsprechende
Warnung auch noch ignoriert?

von Oliver J. (skriptkiddy)


Lesenswert?

CKDIV8-Fuse?

von Stephan (Gast)


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

von Stephan (Gast)


Lesenswert?

Skript Kiddy schrieb:
> CKDIV8-Fuse?

Perfekt!!
Vielen Dank!


Ich habe das einfach so gelassen wie es war...
Dann guck ich mal was ich da denn fälschlicherweise gesetzt habe!
Nun läuft es!
Danke schön!!!

von Hc Z. (mizch)


Lesenswert?

CKDIV8 wurde ja schon genannt.  Hast Du diese Fuse geprüft?

Edit: Hat sich überschnitten.

von Stephan (Gast)


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!

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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

von Stephan (Gast)


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.

von Peter (Gast)


Lesenswert?

Stephan schrieb:
> Und ich habe mich gerade gefragt wozu man den Takt verringern sollte
um Strom zu sparen, genau aus dem Grund Takten ja auch aktuelle CPU 
immer mal runter.

von Stephan (Gast)


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Stephan schrieb:
> Wäre also vor der Verwendung des vollen Taktes abzuraten?

Wenn du den Controller nicht mit 5 V betreiben kannst: ja.

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.