Pin-Tooglefrequenz an PIC32MX

OP #2447393
Lesenswert?

Hallo,

ich versuche gerade meinen PIC32MX795F512L auf 72MHz einzustellen. 
Externer Qwarz mit 20Mhz. Debugger ICD3.

Vorab:

1. wenn ich Inputdivider und Outputmultplier so einstelle, das 72MHz 
erzeugt werden sollten, kommt folgende Fehlermeldung:

ICD3Err0040: The target device is not ready for debugging.
Please check your configuration bit settings and program
the device before proceeding.

2. Mit folgenden Einstellungen funktioniert dann alles:

#pragma config POSCMOD=HS, FNOSC=PRIPLL
#pragma config FPLLIDIV=DIV_5, FPLLMUL=MUL_18, FPLLODIV=DIV_4
#pragma config FPBDIV=DIV_2, FWDTEN=OFF, CP=OFF, BWP=OFF
#pragma config FSOSCEN = OFF, IESO = OFF
#pragma config ICESEL = ICS_PGx1

(Rechnerisch: 18 MHz Systemtakt)

3. Ich habe dann eine PIN-Togglefrequenz von 203KHz.

Code:

void main (void)
{

TRISEbits.TRISE0 = 0;

  while(1)
  {
    LATEbits.LATE0 = 1;
    LATEbits.LATE0 = 0;
  }
}

So jetzt zu meinen Fragen:

1.) Wenn ich im Datenblatt lese, dass ich den PIC auf 72MHz (Systemtakt) 
takten kann, bedeutet dass nicht gleichzeitig, dass der Pin mit 72MHz 
(bzw. 36MHz) toggelt?

2.) Was mache ich falsch, dass ich nicht mal rechnerisch die 72MHz 
einstellen kann?

Vielen Dank im Voraus.


Selles
Gast #2447408
Lesenswert?

Zumindest zu Punkt 1) kann ich Dir was sagen: Du wirst auf keinem 
Mikrocontroller dieser Welt ein Pin-Toggeling hinbekommen, das der 
halben Systemtaktfrequenz entspricht (PWM-Hardware mal ausgenommen). Das 
liegt daran, dass Du mindestens zwei Befehle brauchst: einen oder zwei 
für's Pin-Toggeling und einen Sprungbefehl. Und auf vielen 
Mikrocontrollern brauchen diese Befehle jeweils mehr als einen 
Systemtakt.
OP #2447427
Lesenswert?

Vielen Dank, für die schnelle Antwort.

Doch die 203KHz sind für mich immer noch ein bisschen enttäuschend. Vor 
allem deswegen, weil ich mit dem selben Code auf dem PIC18f452 ein 
PIN-Toggling von 4,7 MHz hinbekomme.

An was könnte das liegen? Ich muss definitiv etwas falsch machen.

Gruß
#2447449
Lesenswert?

also bei den dsPIC's hab ich den Takt nicht über #pragma eingestellt, 
sondern über einen speziellen code. Das im pragma war nur dafür da, mit 
was der uC hochfahren soll. Und dann musste man die neue Clock source 
aktivieren/selektieren, PLL aktivieren, warten bis das so ist, etc....
Da gibts (zumindest für die dsPICs) Beispiele von Microchip
Gast #2447494
Lesenswert?

Hab jetzt nicht nachgeschaut ob Pin ändern nur einen Systemtakt braucht, 
vermutlich sind es mehr. Nehmen wir mal an es sind zwei, dann läuft dein 
Pic evtl. mit 800-900 Khz. Entweder ist das jetzt der interne Takt oder 
er kriegt ständig nen Reset/Interrupt oder ne Kombination von beidem.
OP #2447673
Lesenswert?

Neue Erkenntnisse:


#include <plib.h>

#pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, 
FWDTEN = OFF
#pragma config POSCMOD = HS, FNOSC = PRIPLL, FPBDIV = DIV_8
#pragma config ICESEL = ICS_PGx1

#define SYS_FREQ       (80000000L)

int main(void)
{

SYSTEMConfig(SYS_FREQ, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);
OSCConfig( OSC_POSC, OSC_PLL_MULT_24, OSC_PLL_POST_4, OSC_FRC_POST_1 );

TRISEbits.TRISE0 = 0;

   while (1)
    {
      LATEbits.LATE0 = 1;
      LATEbits.LATE0 = 0;
    }
}

/***************************************************************/


Mit dieser Software (zusammengeschustert aus meiner und dem Example von 
Microchip) bekomm ich ne Pin-Toggle Frequenz von 4,56MHz hin. (ICD3 
abgehängt)

Deutlich mehr als zu Beginn.

Laut Disassembly Listing benötigt die while(1) Schleife 7 Schritte um 
einmal durch zulaufen.

Wie könnt ich jetzt noch überprüfen wie schnell der Systemtakt wirklich 
ist? Timer?

Auf die Einstellungen in den Configuration Bits vertraue ich nicht mehr.

Gruß
Gast #2447692
Lesenswert?

Silas Gschwender schrieb:
> Mit dieser Software (zusammengeschustert aus meiner und dem Example von
> Microchip)

dann druck dir das Datenblatt (den Oszillator Teil) und die Application 
Notes dazu aus, setzt dich vom PC weg und lies dir erstmal durch was du 
da machst.


> bekomm ich ne Pin-Toggle Frequenz von 4,56MHz hin.

Etwas Systematischer geht es vielleicht so:

- Sourcecode in Assembler anschauen
- die Takte zusammen zählen die dein Programm so braucht
- daraus die aktuelle Taktfrequenz errechnen.

Dann wirst du zum beispiel feststellen das deine While Schleife mehr 
Zeit braucht als das von allen Seiten mit Verdammnis behängte "GOTO". 
Das hängt aber aber u.a. vom compiler und der Optimierung ab.

In Mplab geht das mit dem Simulator sogar ohne lästiges Opcode 
nachschlagen.

>(ICD3  abgehängt)

Ja und?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren