Forum: Mikrocontroller und Digitale Elektronik PIC18F HSPLL will nicht laufen.


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Thomas M. (tm112)


Bewertung
0 lesenswert
nicht lesenswert
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
von Dominic A. (neo123)


Bewertung
0 lesenswert
nicht lesenswert
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
von ollus (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Nach dem Umprogrammieren zwischen HS und HSPLL den PIC einmal kurz 
stromlos machen. Hab ich auch schon mal drüber geärgert.

von Carsten S. (dg3ycs)


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

von Thomas M. (tm112)


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

von Thomas M. (tm112)


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

von Carsten S. (dg3ycs)


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

von Thomas M. (tm112)


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

???

von Dominic A. (neo123)


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

von Thomas M. (tm112)


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

von Thomas M. (tm112)


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

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]
  • [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.