PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PIC18F14K50 auf 32MHz internal einstellen, wie?



BioSniper
19.06.2010, 20:53
Ich wollte folgendes einstellen bzgl. Oszillator in den Configuration Bits:

FOSC = IRC (Internal RC oscillator)
PLLEN = ON (Oscillator multiplied by 4)

SCS<1:0> muss glaube ich nicht verändert werden, da es nach RESET auf 00 steht und somit auf Primary Oscillator. Da der PLL Ausgang über Primary läuft müsste dass die richtige Einstellung sein.

Jetzt müsste er nach RESET auf 32 MHz internal laufen, oder ?
Ich bin etwas verunsichert, weil das etwas bekackt beschrieben ist im Datenblatt. Aber nachdem ich das hier schreibe bin ich mir ziemlich sicher richtig zu liegen.

RoboHolIC
20.06.2010, 01:30
Hey, ist doch super, daß du schon einen plausiblen Ansatz hast.
Du hast jetzt ein paar Möglichkeiten, um weiter zu kommen:
1) Meines Wissens bieten diese Controller eine Oszillatorvariante, bei der fOSZ an einem Ausgang ansteht - das kannst du messen, sofern das Equipment vorhanden ist.
2) Du hast sicherlich irgendwas in deiner Ziel-Hardware, was blinken oder tuten kann. Dann setze einen Interrupt auf, den wirst du vermutlich eh brauchen. Stell ihn auf eine Millisekunde, schreib eine ISR, die bis 500 zählen kann und dann ein mit deinen Sinnen wahrnehmbares Ereignis im Wechsel aktiviert oder deaktiviert. Das kannst du auf ungefähren Synchronlauf mit einer Uhr prüfen.
3) Wenn die Voraussetzungen für 1) und 2) nicht gegeben sind, dann improvisiere das unter 2) genannte.
4) Du könntest die hiesige Comunity vor deinen Karren spannen ...

BioSniper
20.06.2010, 14:49
Danke für die Antwort, nur bin ich mir jetzt immer noch nicht sicher, dass das die richtige Einstellung ist.
Ist nämlich immer ein Horror, wenn der PIC nicht auf anhieb anschwingt.

Eine LED habe ich grundsätzlich dran, die beim Start z. B. 3x im 2 Hz Takt blinkt.

BioSniper
03.07.2010, 23:06
So, ja, Mist, geht nicht. Habe den halben Tag rumprobiert.

Datenblatt Seite 12:
http://ww1.microchip.com/downloads/en/DeviceDoc/41350C.pdf

Er geht zwar, aber er läuft nicht über die PLL. Er bringt nur maximal. 16 MHz (ist einstellbar via OSCCONbits.IRCF 0/1/2), statt 32 MHz. Ich weiss nicht was falsch ist. Eigentlich müsste es so gehen wie ich es eingestellt habe.
Ich habe auch schon FOSC = HS probiert, aber dann geht gar nichts (logisch). Ich glaube aber, dass FOSC nicht IRC, sondern etwas anderes sein muß, ich weiss aber nicht was.

Hier mal die Einstellungen:



#pragma config FOSC = IRC //POR => Internal RC oscillator.
#pragma config PLLEN = OFF //PLL is Software Controlled.
#pragma config CPUDIV = NOCLKDIV //No CPU System Clock divide.
#pragma config HFOFST = OFF //Warten bis System-clock stabil.
#pragma config PCLKEN = OFF //Primary clock is under software control.
#pragma config FCMEN = OFF //Fail-Safe Clock Monitor disabled.

#pragma config PWRTEN = ON //Power-UP-Timer enabled.
#pragma config MCLRE = ON //MCLR pin enabled, RA3 input pin disabled.
#pragma config BOREN = OFF //Brown-out Reset disabled.
#pragma config IESO = OFF //Oscillator Switchover mode disabled.
#pragma config LVP = OFF //Low Voltage ICSP.
#pragma config STVREN = OFF //Stack full/underflow will not cause Reset.
#pragma config WDTEN = OFF //Watchdog Timer OFF.

#pragma config BBSIZ = OFF //1kW boot block size.
#pragma config EBTR0 = OFF //Block 0 not prot. from table reads exec. in other blocks.
#pragma config EBTR1 = OFF //Block 1 not prot. from table reads exec. in other blocks.
#pragma config EBTRB = OFF //Boot block not prot. from table reads exec. in other blocks.

#pragma config WRT0 = OFF //Block 0 not write-protected.
#pragma config WRT1 = OFF //Block 1 not write-protected.
#pragma config WRTB = OFF //Boot block not write-protected.
#pragma config WRTC = OFF //Configuration registers not write-protected.
#pragma config WRTD = OFF //Data EEPROM not write-protected.

#pragma config CP0 = OFF //Block 0 not code-protected.
#pragma config CP1 = OFF //Block 1 not code-protected.
#pragma config CPB = OFF //Boot block not code-protected.
#pragma config CPD = OFF //Data EEPROM not code-protected.

#pragma config XINST = OFF //Instruction set extension & Indexed Addr. mode disabled.


OSCCONbits.IRCF0 = 1; //16 MHz (Eigentlich unnötig, da 8MHz standard.)
OSCCONbits.IRCF1 = 1;
OSCCONbits.IRCF2 = 1;

OSCTUNEbits.SPLLEN = 1; //PLL: Enable

OSCCONbits.SCS0 = 0; //Switch => 0: PLL; 0: Primary Quarz.
OSCCONbits.SCS1 = 0; //Switch => 0: PLL; 0: Primary Quarz.



Bin 2 Wochen im Urlaub, falls möglich komme ich ran.

BioSniper
04.07.2010, 00:14
Hat sich erledigt habe den Fehler gefunden, man muss die interne Frequenz doch auf 8 MHz einstellen, sonst geht die PLL nicht und er nimt es von intern.

Wenigstens noch 1 Fehler gefunden, jetzt muss ich noch das LCD zum Laufen bringen, das will auch noch nicht.

BioSniper
04.07.2010, 00:57
Hab den LCD Fehler gefunden. Hatte bei der Initialisierung das Display ausgeschaltet, es dann gelöscht und es dann vergessen wieder einzuschalten. So ein blöder Fehler, naja, jetzt kann ich beruhigt in Urlaub gehen, der Rest ist reine Routine.

RoboHolIC
04.07.2010, 22:39
Hallo BioSniper.

Glückwunsch zur erfolgreichen Fehlerjagd!


So ein blöder Fehler, naja, jetzt kann ich beruhigt in Urlaub gehen, der Rest ist reine Routine.

Ein vertrautes Gefühl. Wegen sowas hab ich schon manchen Sonnenaufgang am Computer sitzend erlebt ... na dann gute Erholung.

Gruß
Christian.