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; }
> 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?
...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
...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 :-)
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
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.
@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?....
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 ;)
@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 ;-)
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...
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
...ja ok, das hilft mir leider auch nicht weiter... ...hat einer von euch eine Idee wo denn die 120MHz ueberhaupt herkommen koennen?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.