Hallo Forum, Ich versuche gerade reichlich erfolglos einen PIC18F mit dem PLL Oszillator in Betrieb zu nehmen. Der Code wird fehlerfrei compiliert, die config Bits in den SFRs (1FFFA = 0x05; FOSC, FCMEN, IESO gesetzt) stehen richtig drin - aber der PIC läuft nur mit den 10 MHz vom angeschlossenen Quarz. Verwendet wird das Demo Board PICDEM PIC18 Explorer von Microchip. Der µC ist ein PIC18F87J11, Zur Kontrolle wurde REFO mit dem Systemtakt auf RE3/REFO durchgeschaltet. Auch der Pin zeigt am Logikanalyzer 10 MHz. Programmcode (blinkende LED z.B.) wird genau so schnell ausgeführt, egal ob FOSC = HS oder FOSC = HSPLL gesetzt wird. Wie krieg ich den PIC dazu mit 40 MHz zu laufen, statt mit 10? Beste Grüße und Frohes Neues, TM
:
Bearbeitet durch User
Ich denke der PIC läuft mit 40Mhz. Jedoch wird bei den PIC's der Takt noch durch 4 geteilt. Den Unterschied zwischen beiden Optionen also HS oder HSPLL wirst du wohl nicht bemerken weil die PLL wahrscheindlich in der Initialisierung vom OSCTUNE Register aktiviert wird. Du kannst ja mal probieren dieses PLL Enable Bit im OSCTUNE Register zu löschen und dann die Frequenz zu messen.
:
Bearbeitet durch User
Nach dem Umprogrammieren zwischen HS und HSPLL den PIC einmal kurz stromlos machen. Hab ich auch schon mal drüber geärgert.
Hi Thomas, Gruß nach München... Suchst du gerade auch mal etwas entspannung vom leidigen Dauerärgerniss Tetra? ;-) Aber BTT: Dominic A. schrieb: > Ich denke der PIC läuft mit 40Mhz. Jedoch wird bei den PIC's der Takt > noch durch 4 geteilt. > Den Unterschied zwischen beiden Optionen also HS oder HSPLL wirst du > wohl nicht bemerken weil die PLL wahrscheindlich in der Initialisierung > vom OSCTUNE Register aktiviert wird. > Du kannst ja mal probieren dieses PLL Enable Bit im OSCTUNE Register zu > löschen und dann die Frequenz zu messen. Es ist genau Umgekehrt: Beim angesprochenen PIC ist die PLL standardmäßig DE-Aktiviert. Es muss also zusätzlich zur Auswahl von HSPLL auch das Bit 6 im Osctune Register aktiv auf 1 gesetzt werden damit die PLL aktiv wird. Gruß Carsten
ollus schrieb: > Nach dem Umprogrammieren zwischen HS und HSPLL den PIC einmal kurz > stromlos machen. Hab ich auch schon mal drüber geärgert. Hallo ollus, Danke für Deine Antwort. Das hatte ich auch schon in einem anderen Beitrag gelesen und ausprobiert - leider hilft's aber nicht, denn: Dominic A. schrieb: > Ich denke der PIC läuft mit 40Mhz. Jedoch wird bei den PIC's der Takt > noch durch 4 geteilt. > Den Unterschied zwischen beiden Optionen also HS oder HSPLL wirst du > wohl nicht bemerken weil die PLL wahrscheindlich in der Initialisierung > vom OSCTUNE Register aktiviert wird. > Du kannst ja mal probieren dieses PLL Enable Bit im OSCTUNE Register zu > löschen und dann die Frequenz zu messen. Er läuft ziemlich sicher mit nur 10 MHz - die LEDs blinken immer gleich schnell. Die oscillator configurations in Abschnitt 2.0 wissen nichts von einer Teilung durch 4. Und selbst die Ausführung einer Instruktion würde die 4 Zyklen gleichermaßen beanspruchen - sowohl bei Verwendung des 10 MHz Quarzes direkt - wie auch bei der Vervierfachung durch die PLL. Im Debugmodus komm ich im Moment auch nicht groß weiter ...
Carsten Sch. schrieb: > Hi Thomas, > > Gruß nach München... > Suchst du gerade auch mal etwas entspannung vom leidigen Dauerärgerniss > Tetra? ;-) > > Es ist genau Umgekehrt: > Beim angesprochenen PIC ist die PLL standardmäßig DE-Aktiviert. > Es muss also zusätzlich zur Auswahl von HSPLL auch das Bit 6 im Osctune > Register aktiv auf 1 gesetzt werden damit die PLL aktiv wird. > > Gruß > Carsten Ach ne ... DU ?! Fröhliches Neues! TETRA is im Moment zum Glück kein wirkliches Thema - da kann ich mich tatsächlich Produktiverem widmen. Also nochmal von vorn: Ich muss ZUSÄTZLICH zum Fuse-Bit nochmal von Hand PLLEN setzen ?!? TM
Thomas Miehling schrieb: > Ach ne ... DU ?! Ja Ich! > Fröhliches Neues! Dir auch! > TETRA is im Moment zum Glück kein wirkliches Thema - da kann ich mich > tatsächlich Produktiverem widmen. Das ist sicher nicht verkehrt... Von mir kann ich sagen seit dem ich mich nicht mehr damit befasse ist mein Blutdruck deutlich niedriger - Obwohl ich Unfallbedingt in der ersten Jahreshälfte einige Ausfallzeit hatte und immer noch an der Chaosbewältigung arbeite ;-) > Also nochmal von vorn: > Ich muss ZUSÄTZLICH zum Fuse-Bit nochmal von Hand PLLEN setzen ?!? JA - Falls ich das für das Board noch richtig im Kopf habe ist das so! Gruß Carsten
Carsten Sch. schrieb: >> Also nochmal von vorn: >> Ich muss ZUSÄTZLICH zum Fuse-Bit nochmal von Hand PLLEN setzen ?!? > > JA - Falls ich das für das Board noch richtig im Kopf habe ist das so! OK. Egal ob ich das jetzt verstehe - aber so läuft's tatsächlich ... Eine Frage noch zur Ausgabe des Systemtakts. Der Programmcode wird jetzt zwar tatsächlich 4x schneller ausgeführt. Zu sehen am Blinken der LEDs. RE3 gibt das REFO Signal aus. Kapitel 2.6. Über Register REFOCON, ROSEL Bit (4) kann ausgewählt werden zwischen: 1 = Primary oscillator (EC or HS) used as the base clock 0 = System clock used as the base clock; base clock reflects any clock switching of the device Egal welche Quelle (Primary oscillator oder system clock) nun gewählt wird - die Frequenz von REFO ist immer 10 MHz. Und das ist auch unabhängig davon, ob der HS (10 MHz) oder HSPLL (40 MHz) Oszillator ausgewählt ist. Ich hätte wenigstens erwartet, dass beim aktivierten HSPLL und durchgeschalteten system clock 40 MHz am REFO anstehen ... ???
Carsten Sch. schrieb: > Es ist genau Umgekehrt: > Beim angesprochenen PIC ist die PLL standardmäßig DE-Aktiviert. > Es muss also zusätzlich zur Auswahl von HSPLL auch das Bit 6 im Osctune > Register aktiv auf 1 gesetzt werden damit die PLL aktiv wird. Ja stimmt da hatte ich etwas verdreht. Thomas Miehling schrieb: > Egal welche Quelle (Primary oscillator oder system clock) nun gewählt > wird - die Frequenz von REFO ist immer 10 MHz. Das habe ich ja schon weiter oben beschrieben. Ein Maschinenzyklus also FCY ist FOSC/4(Ein erster Hinweis ist übrigens das der Controller bei 48Mhz 12MIPS "leistet"). Wenn du nun ROSEL auf 1 machst kommt direkt der Quarz Takt raus also die 10MHz. Wenn du nun auf 0 stellst kommt der Maschinentakt raus also 40MHz / 4 = 10MHz. Thomas Miehling schrieb: > Und das ist auch > unabhängig davon, ob der HS (10 MHz) oder HSPLL (40 MHz) Oszillator > ausgewählt ist. Das kann ich fast nicht glauben. Bist du dir da sicher?
Das ist so. Alle 4 möglichen Kombination von ROSEL und PLLEN mehrfach durchprobiert. Im Ergebnis stehen an Pin RE3 immer 10 MHz an. Lediglich die LEDs blinken bei PLLEN=1 4 mal so schnell. Ich hatte schon verstanden, was Du mir sagen wolltest. Das Ergebnis ist aber so, wie ich es beschrieben habe. Und ich versteh es auch nicht. Daher die Frage.
OK. Hier die Auflösung: Natürlich muss jedesmal wenn eines der REFOCONbits gesetzt/gelöscht wird mit WDTCONbits.ADSHR = 1; umgeschaltet werden. REFOCON ist ein alternate Register ... In der Konsequenz wurde also immer der Oszillatortakt des Quarzoszillators durchgeschaltet - also nie eine andere Quelle. insofern kommt richtigerweise für die Kombinationen REFOCONbits.ROSEL = 1, HSPLL REFOCONbits.ROSEL = 1, HS REFOCONbits.ROSEL = 0, HS am REFO die erwarteten 10 MHz raus. In den ersten beiden Fällen klar, weil der Oszillator selbst die Quelle ist. Der arbeitet mit 10 MHz. Im dritten Fall deshalb, weil der Oszillator ohne Teiler als Systemtakt verwendet wird. Einen Teiler gäbe es beim 18F87J11 für den externen Oszillator tatsächlich gar nicht. nur für REFOCONbits.ROSEL = 0, HSPLL muss am REFO 40 MHz zu messen sein, weil aus den 10 MHz Oszillatorfrequenz über die PLL vervierfacht wird und die sind der Systemtakt. Die 40 MHz sind dann auch tatsächlich am REFO zu messen. Kleine Anmerkung zum Maschinenzyklus: Der Maschinenzyklus mag 4 Takte betragen. Es steht aber explizit "System clock" und nicht "duty cycle" als mögliche Quelle neben "primary oscillator". Daher war das schon richtig so.
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.