mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mainclock mit falschem Ergebnis AT91SAM7


Autor: Wolfgang U. (wolle68)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe hier einen Denkfehler dem ich nicht auf die Spur komme und 
hoffe, das sich von Euch schon mal jemand damit beschäftigt hat.

Die Funktion
AT91F_PMC_GetMasterClock(pPMC,pCKGR,SLOWCLK) aus der Atmel Lib liefert 
mir bei einem externen 18,432MHz Quartz 54,712MHz zurück. MAINF steht 
auf 10275 und damit ist der Wert eigentlich auch richtig. Wie kann ich 
aber nun MCK oder MAINCK ermitteln?

Eigentlich wollte ich über MAINF und SlowCLK die externe Frequenz 
errechnen und mir dann über (MUL+1)/DIV PLLCK ermitteln. Danach den PRES 
noch genommen und dann hat man MCK. Durch die Abweichung geht das aber 
alles nicht und wenn ich die Werte dann noch für die Baudrate einer 
seriellen Schnittstelle heranziehe sind die Abweichungen viel zu groß.

Was übersehe ich hier???

Danke für eure Hilfe!

Autor: Wolfgang U. (wolle68)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mhh - nutzt das von euch niemand? Wie bekommt ihr denn exakte 
Zeitscheiben hin? Ich habe das nun mit fest definierten Werten gemacht, 
aber das ist doch sicher nicht die Lösung, oder?

Autor: T.R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also, wenn du den standard 18,432 MHZ Qzarz verwendest + den dazu 
üblichen asm startup code, dann ist die MCK auf 48MHZ eingestellt (wegen 
USB). Andere Quarze brauchste übrigens auch andere Kondensatoren um den 
Quarz.

Autor: Wolfgang U. (wolle68)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja der MCK ist auf 48MHz, aber wie kann ich das zur Laufzeit im Programm 
berechnen? Auser dem MAINF Register das die Anzahl der Masterclock 
Cycles während 16 Slowclock Cycles angibt hab ich doch nichts zum 
auslesen, oder?

Autor: T.R. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso willst du eine Konstante zur Laufzeit berechnen? Was spricht gegen 
ein Define?

//--------------
// Master Clock
//--------------
#define EXT_OC    18432000

// External ocilator MAINCK
#define MCK             48054857   // MCK (PLLRC div by 2)
#define MCKKHz    (MCK/1000)

Autor: Wolfgang U. (wolle68)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einfach um den Code allgemeingültig zu halten. Der Slowclock ist ja 
konstant und der externe Oscillator kann ja auf jedem Board anders sein. 
Um nun bei unterschiedlichen Oscillatorfrequenzen die Zeitscheiben für 
meinen Code zu erzeugen benötige ich halt den MCK zur Laufzeit.

Autor: embedded-os (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schau dir doch mal meinen MCK-scanner im SPI-port zum AT91SAM7xxx an.
Das Einzigste was der braucht ist das define zur Quarz-Frequenz, den 
Rest ermittelt er aus den Registern - wenn es das war was du sucht...

http://www.embedded-os.de/index.html?pcfat_port.htm

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.