Forum: Mikrocontroller und Digitale Elektronik PIC24F Clock setzten


von Mr. Mister (Gast)


Lesenswert?

Hallo habe folgendes Problem:

...schreibe gerade ein ganz einfaches BSP Programm um mich am PIC 
einzuarbeiten, leider schaffe ich es nicht den Clock wie gewuenscht auf 
4MHz einzustellen...Laut Stoppwatch habe ich 120MHz...

hier mal der Code:

#include <p24fj128ga010.h>

_CONFIG1(FWDTEN_OFF & JTAGEN_OFF & WDTPS_PS1)
_CONFIG2(FNOSC_FRCDIV & POSCMOD_NONE & FCKSM_CSDCMD & OSCIOFNC_OFF & 
IESO_OFF)

void InitT1(void)
{
  T1CONbits.TCS  =  0;   // set clocksource to Fosc/2
  T1CONbits.TCKPS  =  1;  //Prescaler to 1:8
}

void pause (void)
{
  TMR1  = 0x0000;
  T1CONbits.TON=1;   //start Timer
  while(TMR1<126);
}

int main (void)
{
  CLKDIVbits.RCDIV=2;        //set clockdivider to 2-->fosc=4MHz

   TRISA  =  0x0000;    //set Pins of PORT A as outputs
  char i;

  InitT1();

  Sprungmarke:

    i=250;
    while(i)
    {
      PORTA=0x0001;
      pause();
      PORTA=0x0000;
      pause();
      i--;
    }

    i=250;
    while(i)
    {
      pause();
      pause();
      pause();
      pause();
      i--;
    }
goto Sprungmarke;

return 0;
}

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Laut Stoppwatch habe ich 120MHz...
Das wage ich zu bezweifeln  :-o

> schaffe ich es nicht den Clock wie gewuenscht auf 4MHz einzustellen...
Schaffst du es wenigstens, den Wert zu ändern?

> goto Sprungmarke;
Basic?

von Mr. Mister (Gast)


Lesenswert?

...nein die Stopwatch zeigt immer 120MHz an, wie kann ich den sonst 
ueberpruefen auf welchen Wert mein Clock arbeitet?

@goto...is ne einfache methode fuer ne endlosschleife, die den Code sehr 
einfach macht

von Mr. Mister (Gast)


Lesenswert?

...also kenn mich momentan garnicht mehr aus, was wo und wie welcher 
Clock jetzt wirklich meinen Timer steuer...ich hoffe wirklich mir kann 
jemand ein wenig Licht ins Dunkel bringen :-)

von Master S. (snowman)


Lesenswert?

ich kenn mich mit C18 und ein bischen mit C30 aus. wenn ich mir deine 
frage und "goto" ansehe, ich würde dir wärmstens(!) empfehlen erstmal 
mit den PIC18 zu beginnen!!!
auf die schnelle: schau dir den befehl OpenTimer1() an und nebenbei: 
ersetze dein "goto" durch ein "while(1){ }".

ps: ich würde T1CONbits.TON = 1 eher in die InitT1() befördern

von Master S. (snowman)


Lesenswert?

noch was: es genügt nicht, einfach ein paar interessante einstellungen, 
die du im datenblatt findest, zu modifizieren, sie müssen auch noch 
stimmen ;-) ..ich hab dir da mal ein tutorial: 
http://www.engscope.com/pic24-tutorial/3-first-program/ ich hoffe, es 
lift.

von Mr. Mister (Gast)


Lesenswert?

@Master Showman

...warum sollte ich die T1CONbits.TON = 1  besser in die Init setzen? Da 
wird doch der Timer gestartet oder nicht?

...was is da Problem an goto? Ich weiss natuerlich wie ich es durch eine 
while(1) ersetze, finde aber den Code so um einiges uebersichtlicher...

...danke fuer den Link, werd ich gleich mal durcharbeiten...

...weiss trotzdem niemand wie ich nachsehen kann ob der Clock richtig 
gesetzt wurde?....

von Werner01 (Gast)


Lesenswert?

schau mal in mein Programm ,hab da auch ein Thema mit pic24. Meiner 
läuft aber mit intern 7,37 oder so und raus kommen 80 MHz.
Vlieleicht kapierst Du es an dem Beispiel?

(Thema vom 8.)


viel Glück ;)

von Mr. Mister (Gast)


Lesenswert?

@Werner

wo finde ich dein Programm?

von Master S. (snowman)


Lesenswert?

@Mr. Mister: da du den timer nie ausschaltest, genügt es, wenn du ihn 1x 
einschaltest und nicht jedesmal in deiner pause-funktion (der timer 
schaltet sich nämlich nicht von alleine aus). und wenn du ihn nur 1x 
einschalten tust, machste das besser in der init() oder zu beginn der 
main()
edit: wenn du deine conigs im MPLAB-menu definierst (nicht empfohlen), 
dann werden die configs im program-code igrnoriert. vielleicht mal da 
nachsehen ;-)

von Mr. Mister (Gast)


Lesenswert?

hab am anfang mal etwas versucht ueber das Menue configure-configuration 
Bits einzustellen, hab das aber wieder sein lassen und den haken bei 
Configurationbits set in code gesetzt...also sollte da alles 
ueberschrieben sein oder?

...wenn ich die stopwatch verwende zeigt er mir immer noch 120MHz an, 
und die Timerzeiten (der ja mit Fosc/2 laeuft) stimmen auch zu den 
120MHz...

hier mal der neue Code:

#include <p24fj128ga010.h>
#include "usart.h"

_CONFIG2(IESO_OFF & FNOSC_FRC & OSCIOFNC_OFF & POSCMOD_NONE)    //select 
the Fast RC Oscillator, disable primary oscillator
_CONFIG1(JTAGEN_OFF & GCP_OFF & ICS_PGx2 & FWDTEN_OFF)        //disable 
JTAG and WatchDog, no protection, EMUC/EMUD share PGC2/PGD2


void InitT1(void)
{
  T1CONbits.TCS  =  0;   //set clocksource to Fosc/2
  T1CONbits.TCKPS  =  0;  //Prescaler to 1:8
  T1CONbits.TON  =  1;   //start Timer
}

void pause (void)
{
  TMR1  = 0x0000;
  while(TMR1<0x1F4);
}

int main (void)
{  OSCCON  =  0x0000;    //set clock on FRC 8MHz

   TRISA  =  0x0000;    //set Pins of PORT A as outputs
  TRISD  =  0xFFFF;    //set Pins of PORT D as inputs

  char counter;
  counter=0;

  InitT1();
  InitUSART2();

  while(1)
  {
    PORTA=0x00;
    pause();
    PORTA=0xFF;
    pause();
    WriteIntUSART2(0xFF,255);
  }

return 0;
}

interessanterweise funktioniert meine USART Uebertragung 
tadellos...obwohl ich dort meine Baudrate mit 8MHz kalkuliert habe...

von Maik W. (werner01)


Lesenswert?

na in meinem Beitrag der steht jetzt hier am 11.06.10 wieder .
Thema ist isp zwischen pic24 und pic16 und da im Anhang !





look look

von Mr. Mister (Gast)


Lesenswert?

...ja ok, das hilft mir leider auch nicht weiter...

...hat einer von euch eine Idee wo denn die 120MHz ueberhaupt herkommen 
koennen?

von Maik Werner (Gast)


Lesenswert?

ich hab mir mal das d.-sheet angekugt.
im config wählst du frcdiv ohne pll, dann im Programm machst du 
clkdiv10-8
so das durch 2 geteilt wird und clkdic14-12 ein 1:1.

dann hast du clk 4 MHz bei 2 mips glaube ich



120 Mhz wo die herkommen weis wohl keiner auf jeden fall wenn vom Pic, 
dann schnellstens Abhilfe schafen .So nen corecap haste dran und auch an 
der spannung, dann sollte das Ding so eigentlich funzen.

von Mr. Mister (Gast)


Lesenswert?

...haha die 120MHz werden vom PC vorgegeben (einzustellen im MPLAB)..

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.