mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik F_CPU-Verwirrung ATMEGA88


Autor: Stephan (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
#define F_CPU 10000000UL //Takt in Hertz

#include <avr/io.h>
#include <avr/delay.h>

int main()
{ 
 DDRD  = 0xFF;        // Port D komplett Ausgang
 
 while(1)
 {
  PORTD=0xFF;          // Ausgang high
  _delay_us(10);        
  PORTD=0x00;        // Ausgang low
  _delay_us(10);      
 } 
}

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stephan schrieb:
> Kann mir jemand verraten was hier schief läuft??

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

Autor: Oliver Ju. (skriptkiddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
CKDIV8-Fuse?

Autor: Stephan (Gast)
Datum:

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

Autor: Stephan (Gast)
Datum:

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

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
CKDIV8 wurde ja schon genannt.  Hast Du diese Fuse geprüft?

Edit: Hat sich überschnitten.

Autor: Stephan (Gast)
Datum:

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

Autor: Stephan (Gast)
Datum:

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

Autor: Peter (Gast)
Datum:

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

Autor: Stephan (Gast)
Datum:

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

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

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.