Xmega128A1 Clock-Problem

Gast #3242071
Lesenswert?
• ▲
▼
Hallo Zusammen,

ich versuche gerade die Basics von der µC-Programmierung in C zu 
begreifen.

Dazu habe ich ein Xplained128A1 (Xmega128A1) einen 8 Bit LED Zähler 
programmiert um die Pin Ansteuerung zu üben.

Als nächstes möchte ich die den Oszillator unterschiedlich einstellen.
Dazu habe ich folgenden Code gefunden:


OSC.CTRL |= OSC_RC32MEN_bm;
while(!(OSC.STATUS & OSC_RC32MRDY_bm));
CCP = CCP_IOREG_gc;
CLK.CTRL = CLK_SCLKSEL_RC32M_gc;

Programm (siehe unten Läuft!) !!!



Wenn ich jedoch auf 2 MHz gehen möchte blinken meine LEDs (Zähler) 
(siehe Programm unten) immer noch gleich schnell!!?????

OSC.CTRL |= OSC_RC32MEN_bm;
while(!(OSC.STATUS & OSC_RC32MRDY_bm));
CCP = CCP_IOREG_gc;
CLK.CTRL = CLK_SCLKSEL_RC32M_gc;


Wo habe ich den Fehler/ Gedankenfehler?



Hier der gesamte Programmcode:

#include <asf.h>
unsigned int k,n,start;
char TastenD = 0;


void wait_sinnfrei (void)
{
  k = 0;
  while (k<10000)
  {
    k++;
  }
}


int main (void)
{

  OSC.CTRL |= OSC_RC32MEN_bm;
  while(!(OSC.STATUS & OSC_RC32MRDY_bm));
  CCP = CCP_IOREG_gc;
   CLK.CTRL = CLK_SCLKSEL_RC32M_gc;

  PORTE.DIR = 0xff;

  while (1)
  {

  n = 0;

    while (n<255)
    {
      PORTE_OUT = n;
      n++;
      wait_sinnfrei();
    }

  }



}


Vielen Dank für die Hilfe !!!!

Stefan
Gast #3242359
Lesenswert?
• ▲
▼
Ich habe auch das Problem !

Der µC läuft auch ohne Clock Initialisierung allerdings weiß ich nicht 
mit welcher Frequenz.

Die Änderung habe ich so gemacht wie Stefan Sie beschrieben hat.

Ebenfalls ohne merkliche Auswrkungen auf die Geschwindigkeit bei der 
Programmausführung.

Weiß jemand Bescheid?

Martin
Gast #3242383
Lesenswert?
• ▲
▼
Martin schrieb:
> Weiß jemand Bescheid?

Ja, dass Datenblatt... der µC läuft standardmäßig mit 2 MHz los...

Für Clockeinstellung benutz ich die ASF... ist mir zu mühsam das mit 
"Hand" zu machen, aber wenn du was lernen willst. Analysiere z.B. den 
Code der ASF... muss ich auch tun, wenns mal nicht so läuft wie ich 
will...
Gast #3242893
Lesenswert?
• ▲
▼
Ja da muss man warten. Aber nicht auf den RC, sondern bis der richtig in 
der PLL eingerastet ist. Steht im Datenblatt.

Schau dir mal das hier an: CLK_SCLKSEL_RC2M_gc
Das ist ja auch nur eine Bitmaske. Die findest du im Header zum 
Controller. Findest du über die IO.h und musst dich durchhangeln.
Dann nimmst du das Datenblatt und schaust, ob das mit den 
Bitdefinitionen übereinstimmt. Ich vermute mal nicht. So wie ich mich 
erinnere ist das der Prescaler für den Clock.

Gruß, Jens
Gast #3243018
Lesenswert?
• ▲
▼
Stimmt da ist ein Fehler ich warte ja auch 2Mhz habe aber 32Mhz 
geschrieben. Das ist richtig.

OSC.CTRL |= OSC_RC2MEN_bm;
while(!(OSC.STATUS & OSC_RC32MRDY_bm));
CCP = CCP_IOREG_gc;
CLK.CTRL = CLK_SCLKSEL_RC2M_gc;


Damm müsste er aber in der while-Schleife

while(!(OSC.STATUS & OSC_RC32MRDY_bm));

hängen bleiben.

Warum kommt er da jemals raus. Die Bedingung wird ja nie erfüllt ????
Anscheinend aber doch.

WARUM?
#3243134
Lesenswert?
• ▲
▼
Also mein Atxmega128A3 bleibt "wie gewünscht" bei "while(!(OSC.STATUS & 
OSC_RC32MRDY_bm));" hängen.
Mache aber nichts anders als du. 1:1 gleich.

Achja, damit das
1
CCP = CCP_IOREG_gc;
2
CLK.CTRL = CLK_SCLKSEL_RC32M_gc;
funktioniert musst die die optimierungen an schalten, denn sonst sind 
zwischen CCP = CCP_IOREG_gc; und CLK.CTRL = CLK_SCLKSEL_RC32M_gc; mehr 
als 4 Takte (und dann geht das setzen von CLK.CTRL nicht mehr)

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.