mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC24F Clock setzten


Autor: Mr. Mister (Gast)
Datum:

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

Autor: Mr. Mister (Gast)
Datum:

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

Autor: Mr. Mister (Gast)
Datum:

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

Autor: Master Snowman (snowman)
Datum:

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

Autor: Master Snowman (snowman)
Datum:

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

Autor: Mr. Mister (Gast)
Datum:

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

Autor: Werner01 (Gast)
Datum:

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

Autor: Mr. Mister (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Werner

wo finde ich dein Programm?

Autor: Master Snowman (snowman)
Datum:

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

Autor: Mr. Mister (Gast)
Datum:

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

Autor: Maik Werner (werner01)
Datum:

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

Autor: Mr. Mister (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...ja ok, das hilft mir leider auch nicht weiter...

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

Autor: Maik Werner (Gast)
Datum:

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

Autor: Mr. Mister (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...haha die 120MHz werden vom PC vorgegeben (einzustellen im MPLAB)..

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.