PIC18FxxK42 órajel beállítása

 

Adatlap (pdf): PIC18F(L)xxK42.pdf

Katalógos 93. oldal:

 

 


Hiba a rajzon, hogy a CDIV<4:0> helyesen CDIV<3:0>

 

 

OSCCON1<3:0> = NDIV<3:0> (Írható, olvasható. Reset esetén a konfigurációtól függóen felülbírálódik)
OSCCON1<6:4> = NOSC<2:0> (Írható, olvasható. Reset esetén a konfigurációtól függóen felülbírálódik)
OSCCON1<7> = Nem használt

OSCCON2<3:0> = CDIV<3:0> (Csak olvasható)
OSCCON2<6:4> = COSC<2:0> (Csak olvasható)
OSCCON2<7> = Nem használt


Azalábbi ködok hasznosak lehetnek programírásnál:

Főprogram forráskódja : 

  LIST   P=PIC18F45K42 ;  ISO 8859-2   
  #include p18f45k42.inc ;  

  
valtozok:    UDATA_ACS   ; H'10' ; nincs kezdo memoriacim megadva ';' végett az ACCESS ramban
W_TEMP         RES   1      ; w register for context saving (ACCESS)
STATUS_TEMP    RES   1      ; status used for context saving
BSR_TEMP       RES   1      ; bank select used for ISR context saving       
   

    global konfig_  ;      
    extern konfig ; 
           
    ORG 0X0000    
    CODE
           
; FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF   
           
    goto konfig ;
   
konfig_:    
    
    goto orajel_teszt
        
    goto $ ;
    
; FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF   
        
orajel_teszt: ; A 40/23-AS LÁBON MEG LEHET MÉRNI A FREKVENCIÁT, AMINEK
              ; A 24 SZERESE LESZ A CPU ÓRAJELÉNEK A FREKVENCIÁJA
    banksel ANSELC ;    
    bcf ANSELC,ANSELC4 ;   Digitális legyen a (40/23) 23-as láb
    banksel TRISC
    bcf TRISC,TRISC4 ; Kimenet legyen a 23-as láb    
    
 ; Próba oszcilloszkóppal vagy frekvenciamérővel vizsgálva:    
    banksel LATC 
    ; Egy félperiódushoz 12 CPU óraimpulzus kell, így a:
    ; CPU órajel (Hz) = 24 X Kimeneti frekvencia (Hz)
   
    btg LATC,LATC4 ; Átvált a kimenet. 1 ciklusú utasítás (4 órajel)   
    goto $-2  ; 2 ciklosú utasítás (8 órajel)
    ; fenti két soron marad a programfutás
    
    
    END

 

Konfigurációs fájl forráskódja (részben konfigurált):

   ;   External Oscillator Selection:
;     FEXTOSC = LP         LP (crystal oscillator) optimized for 32.768 kHz; PFM set to low power
;     FEXTOSC = XT         XT (crystal oscillator) above 100 kHz, below 8 MHz; PFM set to medium power
;     FEXTOSC = HS         HS (crystal oscillator) above 8 MHz; PFM set to high power
;     FEXTOSC = RESERVED   Reserved (DO NOT USE)
      CONFIG FEXTOSC = OFF   ;     Oscillator not enabled
;     FEXTOSC = ECL        EC (external clock) below 100 kHz; PFM set to low power
  ; CONFIG   FEXTOSC = ECM ;       EC (external clock) for 500 kHz to 8 MHz; PFM set to medium power
 ;   CONFIG  FEXTOSC = ECH    ;    EC (external clock) above 8 MHz; PFM set to high power
;
;   Reset Oscillator Selection:
;     RSTOSC = HFINTOSC_64MHZHFINTOSC with HFFRQ = 64 MHz and CDIV = 1:1
;     RSTOSC = RESERVED_1  Reserved
;     RSTOSC = EXTOSC_4PLL EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC bits
;     RSTOSC = RESERVED_2  Reserved
;     RSTOSC = SOSC        Secondary Oscillator
;     RSTOSC = LFINTOSC    Low-Frequency Oscillator
 ;  CONFIG  RSTOSC = HFINTOSC_1MHZHFINTOSC ; with HFFRQ = 4 MHz and CDIV = 4:1
 
;     RSTOSC = EXTOSC      EXTOSC operating per FEXTOSC bits (device manufacturing default)
;
;   Clock out Enable bit:
;     CLKOUTEN = ON        CLKOUT function is enabled
;     CLKOUTEN = OFF       CLKOUT function is disabled
;
;   PRLOCKED One-Way Set Enable bit:
;     PR1WAY = OFF         PRLOCK bit can be set and cleared repeatedly
 ; CONFIG   PR1WAY = ON ;         PRLOCK bit can be cleared and set only once
;
;   Clock Switch Enable bit:
;     CSWEN = OFF          The NOSC and NDIV bits cannot be changed by user software
;     CSWEN = ON           Writing to NOSC and NDIV is allowed
;
;   Fail-Safe Clock Monitor Enable bit:
;     FCMEN = OFF          Fail-Safe Clock Monitor disabled
;     FCMEN = ON           Fail-Safe Clock Monitor enabled
;
;   MCLR Enable bit:
 ;  CONFIG   MCLRE = INTMCLR  ;    If LVP = 0, MCLR pin function is port defined function; If LVP =1, RE3 pin fuction is MCLR
;     MCLRE = EXTMCLR      If LVP = 0, MCLR pin is MCLR; If LVP = 1, RE3 pin function is MCLR 
;
;   Power-up timer selection bits:
;     PWRTS = PWRT_1       PWRT set at 1ms
;     PWRTS = PWRT_16      PWRT set at 16ms
;     PWRTS = PWRT_64      PWRT set at 64ms
;     PWRTS = PWRT_OFF     PWRT is disabled
;
;   Multi-vector enable bit:
 ;  CONFIG  MVECEN = OFF ;        Interrupt contoller does not use vector table to prioritze interrupts
;     MVECEN = ON          Multi-vector enabled, Vector table used for interrupts
;
;   IVTLOCK bit One-way set enable bit:
;     IVT1WAY = OFF        IVTLOCK bit can be cleared and set repeatedly
 ;  CONFIG  IVT1WAY = ON ;        IVTLOCK bit can be cleared and set only once
;
;   Low Power BOR Enable bit:
;     LPBOREN = ON         ULPBOR enabled
  CONFIG   LPBOREN = OFF ;       ULPBOR disabled
;
;   Brown-out Reset Enable bits:
;     BOREN = OFF          Brown-out Reset disabled
;     BOREN = ON           Brown-out Reset enabled according to SBOREN
;     BOREN = NOSLP        Brown-out Reset enabled while running, disabled in Sleep; SBOREN is ignored
;     BOREN = SBORDIS      Brown-out Reset enabled , SBOREN bit is ignored
;
;   Brown-out Reset Voltage Selection bits:
;     BORV = VBOR_2P85     Brown-out Reset Voltage (VBOR) set to 2.8V
;     BORV = VBOR_2P7      Brown-out Reset Voltage (VBOR) set to 2.7V
;     BORV = VBOR_245      Brown-out Reset Voltage (VBOR) set to 2.45V
;     BORV = VBOR_190      Brown-out Reset Voltage (VBOR) set to 1.90V
;
;   ZCD Disable bit:
;     ZCD = ON             ZCD always enabled
;     ZCD = OFF            ZCD disabled. ZCD can be enabled by setting the ZCDSEN bit of ZCDCON
;
;   PPSLOCK bit One-Way Set Enable bit:
  CONFIG   PPS1WAY = OFF   ;     PPSLOCK bit can be set and cleared repeatedly (subject to the unlock sequence)
  ; CONFIG  PPS1WAY = ON ;        PPSLOCK bit can be cleared and set only once; PPS registers remain locked after one clear/set cycle
;
;   Stack Full/Underflow Reset Enable bit:
;     STVREN = OFF         Stack full/underflow will not cause Reset
  CONFIG   STVREN = ON ;         Stack full/underflow will cause Reset
;
;   Debugger Enable bit:
;     DEBUG = ON           Background debugger enabled
;     DEBUG = OFF          Background debugger disabled
;
;   Extended Instruction Set Enable bit:
;     XINST = ON           Extended Instruction Set and Indexed Addressing Mode enabled
  CONFIG   XINST = OFF      ;    Extended Instruction Set and Indexed Addressing Mode disabled
;
;   WDT Period selection bits:
;     WDTCPS = WDTCPS_0    Divider ratio 1:32
;     WDTCPS = WDTCPS_1    Divider ratio 1:64
;     WDTCPS = WDTCPS_2    Divider ratio 1:128
;     WDTCPS = WDTCPS_3    Divider ratio 1:256
;     WDTCPS = WDTCPS_4    Divider ratio 1:512
;     WDTCPS = WDTCPS_5    Divider ratio 1:1024
;     WDTCPS = WDTCPS_6    Divider ratio 1:2048
;     WDTCPS = WDTCPS_7    Divider ratio 1:4096
;     WDTCPS = WDTCPS_8    Divider ratio 1:8192
;     WDTCPS = WDTCPS_9    Divider ratio 1:16384
;     WDTCPS = WDTCPS_10   Divider ratio 1:32768
;     WDTCPS = WDTCPS_11   Divider ratio 1:65536
;     WDTCPS = WDTCPS_12   Divider ratio 1:131072
;     WDTCPS = WDTCPS_13   Divider ratio 1:262144
;     WDTCPS = WDTCPS_14   Divider ratio 1:524299
;     WDTCPS = WDTCPS_15   Divider ratio 1:1048576
;     WDTCPS = WDTCPS_16   Divider ratio 1:2097152
;     WDTCPS = WDTCPS_17   Divider ratio 1:4194304
;     WDTCPS = WDTCPS_18   Divider ratio 1:8388608
;     WDTCPS = WDTCPS_19   Divider ratio 1:32
;     WDTCPS = WDTCPS_20   Divider ratio 1:32
;     WDTCPS = WDTCPS_21   Divider ratio 1:32
;     WDTCPS = WDTCPS_22   Divider ratio 1:32
;     WDTCPS = WDTCPS_23   Divider ratio 1:32
;     WDTCPS = WDTCPS_24   Divider ratio 1:32
;     WDTCPS = WDTCPS_25   Divider ratio 1:32
;     WDTCPS = WDTCPS_26   Divider ratio 1:32
;     WDTCPS = WDTCPS_27   Divider ratio 1:32
;     WDTCPS = WDTCPS_28   Divider ratio 1:32
;     WDTCPS = WDTCPS_29   Divider ratio 1:32
;     WDTCPS = WDTCPS_30   Divider ratio 1:32
;     WDTCPS = WDTCPS_31   Divider ratio 1:65536; software control of WDTPS
;
;   WDT operating mode:
  CONFIG    WDTE = OFF  ;         WDT Disabled; SWDTEN is ignored
;     WDTE = SWDTEN        WDT enabled/disabled by SWDTEN bit
;     WDTE = NSLEEP        WDT enabled while sleep=0, suspended when sleep=1; SWDTEN ignored
;     WDTE = ON            WDT enabled regardless of sleep
;
;   WDT Window Select bits:
;     WDTCWS = WDTCWS_0    window delay = 87.5; no software control; keyed access required
;     WDTCWS = WDTCWS_1    window delay = 75 percent of time; no software control; keyed access required
;     WDTCWS = WDTCWS_2    window delay = 62.5 percent of time; no software control; keyed access required
;     WDTCWS = WDTCWS_3    window delay = 50 percent of time; no software control; keyed access required
;     WDTCWS = WDTCWS_4    window delay = 37.5 percent of time; no software control; keyed access required
;     WDTCWS = WDTCWS_5    window delay = 25 percent of time; no software control; keyed access required
;     WDTCWS = WDTCWS_6    window always open (100%); no software control; keyed access required
;     WDTCWS = WDTCWS_7    window always open (100%); software control; keyed access not required
;
;   WDT input clock selector:
;     WDTCCS = LFINTOSC    WDT reference clock is the 31.0 kHz LFINTOSC
;     WDTCCS = MFINTOSC    WDT reference clock is the 32kHz MFINTOSC output
;     WDTCCS = SOSC        WDT reference clock is SOSC
;     WDTCCS = SC          Software Control
;
;   Boot Block Size selection bits:
;     BBSIZE = BBSIZE_8192 Boot Block size is 8192 words
;     BBSIZE = BBSIZE_4096 Boot Block size is 4096 words
;     BBSIZE = BBSIZE_2048 Boot Block size is 2048 words
;     BBSIZE = BBSIZE_1024 Boot Block size is 1024 words
;     BBSIZE = BBSIZE_512  Boot Block size is 512 words
;
;   Boot Block enable bit:
;     BBEN = ON            Boot block enabled
;     BBEN = OFF           Boot block disabled
;
;   Storage Area Flash enable bit:
;     SAFEN = ON           SAF enabled
;     SAFEN = OFF          SAF disabled
;
;   Application Block write protection bit:
;     WRTAPP = ON          Application Block write protected
;     WRTAPP = OFF         Application Block not write protected
;
;   Configuration Register Write Protection bit:
;     WRTB = ON            Configuration registers (300000-30000Bh) write-protected
;     WRTB = OFF           Configuration registers (300000-30000Bh) not write-protected
;
;   Boot Block Write Protection bit:
;     WRTC = ON            Boot Block (000000-0007FFh) write-protected
;     WRTC = OFF           Boot Block (000000-0007FFh) not write-protected
;
;   Data EEPROM Write Protection bit:
;     WRTD = ON            Data EEPROM write-protected
;     WRTD = OFF           Data EEPROM not write-protected
;
;   SAF Write protection bit:
;     WRTSAF = ON          SAF Write Protected
;     WRTSAF = OFF         SAF not Write Protected
;
;   Low Voltage Programming Enable bit:
  CONFIG     LVP = OFF ;           HV on MCLR/VPP must be used for programming
;     LVP = ON             Low voltage programming enabled. MCLR/VPP pin function is MCLR. MCLRE configuration bit is ignored
;
;   PFM and Data EEPROM Code Protection bit:
;     CP = ON              PFM and Data EEPROM code protection enabled
;     CP = OFF             PFM and Data EEPROM code protection disabled
 
;-----------------------------------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------------------------------   
  LIST   P=PIC18F45K42 ;  ISO 8859-2   
  #include p18f45k42.inc ;    
    
  CODE  
  
    global konfig  ;      
    extern konfig_ ; 
  
konfig:
     
;--------------------------------------------------------------------------------------------------------------- 
; ÓRAJRL BEÁLLÍTÁSA    
    ; Belső nagyfrekvenviás (HFINOSC) oszcillátor beállítása  
    banksel OSCFRQ ; OSCFRQ<3:0>, OSCFRQ<7:4> nincs használva. Dok.:105 old.
    movlw b'00000000' ; 1 MHz
   ; movlw b'00000001' ; 2 MHz   
   ; movlw b'00000010' ; 4 MHz   Ez az alapértelmezett ha nem állítjuk be
   ; movlw b'00000011' ; 8 MHz   
   ; movlw b'00000100' ; 12 MHz   
   ; movlw b'00000101' ; 16 MHz   
   ; movlw b'00000110' ; 32 MHz   
   ; movlw b'00000111' ; 48 MHz   
   ; movlw b'00001000' ; 64 MHz
    movwf OSCFRQ
;.......................................................................    
; OSCCON1 beállítása:    
; CPU órajel választás OSCCON1<6:4> (NOSC), osztás OSCCON1<3:0> (NDIV),    
; nem használt OSCCON1<7> Dok.: 101-102. old,   
;  
;  OSCCON1<6:4> NOSC<2:0>
  ; 010 - EXTOSC + 4x PLL ( Elsődleges külső oszcillátor 4xPLL-el)
  ; 100 - SOSC (Másodlagos oszcillátor /Timer1/)
  ; 101 - LFINTOSC (belső 31 KHz-es RC oszcillátor)
  ; 110 - HFINTOSC ( belső kalibrálható és választhaó frekvenciájú    
                  ; 1,2,4 8,12,16,32,48,64 MHz nagyfrekvenciájú oszcillátor               
  ; 111 - EXTOSC ( Elsődleges külső oszcillátor vagy órajel 4XPLL nélkül )  
  
;  OSCCON1<3:0> NDIV<3:0> osztásarány (osztó) 
  
  ; 0000 - 1
  ; 0001 - 2
  ; 0010 - 4
  ; 0011 - 8
  ; 0100 - 16
  ; 0101 - 32
  ; 0110 - 64
  ; 0111 - 128
  ; 1000 - 256 
  ; 1001 - 512
  
  
    banksel OSCCON1
    movlw b'01100000' ;
    movwf OSCCON1 ;    
    goto konfig_
;--------------------------------------------------------------------    
; ide írjuk az egyéb konfigurációhoz a kódokat, pld TRISB megadása     
    
    END

 

 

 

 

 

 




Belső nagyfrekvenciás oszcillátor használata (HFINTOSC):

A program felső részébe a következőket konfigurációk lehetnek:
    CONFIG  FEXTOSC = OFF ;      Külső oszcillator nincs engedelyezve (lehet, hogy ez csak az elsődleges oszcillátorra vonatkozik)

    CONFIG  RSTOSC = HFINTOSC_1MHZHFINTOSC ; with HFFRQ = 4 MHz and CDIV = 4:1 -
                              ;       RESET esetén:  Magas frekvenciaju belso oszcillator   ??????  kozepes frekvencias beallitassal             

OSCFRQ regiszter FRQ<3:0> bitekkel beállítható a HFINTOSC által kiadott ferkvencia lépéskben 1MHz-64MHz-ig.
A regiszter többi bitje nencs felhasználva. (Katalógus 107. old.)

OSCTUNE regiszter TUN<0:5>  bitjeivel  ezt az oszcillátort finomhangolhatjuk, ha fontos a nagyon pontos frekvencia. (Katalógus 108. old.) Tudtommal ez gyárilag be van finomhangolva, melynek az  értékét programozás előtt érdemes kiolvasni és elmenteni. Persze ezt nem értem ha RAM területen van tárolva!

Az OSCEN regiszterrel egyenkét engedélyezhetők az oszcillátorok a 2-7. bitekkel. Így  HFOEN = 1-el állításával kell engedélyezni a HFINTOSC oszcillátort. A többi oszcillátor is hasonlóan engedélyezhető. Részletek: Katalógus 108. old.

Az OSCCON2  regiszter COSC<2:0> bitjeinek beállításával kell megadni, hogy a CPU melyik órajel forrásból kapja meg az órajel, Esetünkben a SOSC<110>, amit az OSCCON2  regiszter <6:4> bitjei tárolnak majd. Katalógus 105. oldal. Táblázat: 103. old.

Az OSCCON2 regiszter CDIV<3:0> bitjeivel a Posz Mixer által leosztott ferkvenciák közül választható meg a CPU órajel.  Itt OSCCON2 regiszter<3:0> bitjei tárolják az értéket.  Katalógus 105. oldal. Táblázat: 103. old.
 

 

 

 

 

 

 

 

 

;   External Oscillator Selection:
  Kulso oszcillator vagy orajelvalasztas (Kat.: 66. old. Modulrajz: 93. old.)
;  CONFIG  FEXTOSC = LP ;        LP (crystal oscillator) optimized for 32.768 kHz; PFM set to low power
                                             ; Alacsony frekvenciaju (32.768 kHz-re optimalizalt) kristaly oszcillator hasznalata
;  CONFIG  FEXTOSC = XT ;        XT (crystal oscillator) above 100 kHz, below 8 MHz; PFM set to medium power
                                              ; Kozepes frekvenciaju (100kHz és 8 MHz kozott) kristaly oszcillator hasznalata
;  CONFIG  FEXTOSC = HS ;        HS (crystal oscillator) above 8 MHz; PFM set to high power
                                              ;  Magas frekvenciaju (8 MHz felett) kristaly oszcillator hasznalata
;  CONFIG  FEXTOSC = RESERVED ; Reserved (DO NOT USE) - Fenntartva (NE HASZNÁLD)
;  CONFIG  FEXTOSC = OFF ;       Oscillator not enabled - Oszcillator nincs engedelyezve
;  CONFIG  FEXTOSC = ECL ;       EC (external clock) below 100 kHz; PFM set to low power
                                                ; EC (external clock) vagyis kulso orajel 100 Khz alatt. Ilyenkor az egyik oszcillatollab felszabadul me celra.
;  CONFIG  FEXTOSC = ECM ;       EC (external clock) for 500 kHz to 8 MHz; PFM set to medium power
                                                 ; EC (external clock) vagyis kulso orajel 500 Khz es 8 MHz kozott. Ilyenkor az egyik oszcillatollab felszabadul me celra.
;  CONFIG  FEXTOSC = ECH ;       EC (external clock) above 8 MHz; PFM set to high power
                                                 ; EC (external clock) vagyis kulso orajel 8 Mhz felett. Ilyenkor az egyik oszcillatollab felszabadul me celra.
                                                 ; 
;
;   Reset Oscillator Selection:
; Indulaskor mas orajelforras is lehet, amit itt lehet beallitani:
;  CONFIG  RSTOSC = HFINTOSC_64MHZHFINTOSC ;  with HFFRQ = 64 MHz and CDIV = 1:1
                                                                                          ; Magas frekvenciaju belso oszcillator magas ferkvencias beallitassal
;  CONFIG  RSTOSC = RESERVED_1 ; Reserved - Fenntartott. Ne haszmáljuk!
;  CONFIG  RSTOSC = EXTOSC_4PLL EXTOSC ; with 4x PLL, with EXTOSC operating per FEXTOSC bits
;  CONFIG  RSTOSC = RESERVED_2 ; Reserved  - Fenntartott. Ne haszmáljuk!
;  CONFIG  RSTOSC = SOSC ;       Secondary Oscillator - Masodlagos oszcillator (Timer0)
;  CONFIG  RSTOSC = LFINTOSC ;   Low-Frequency Oscillator - Alacsony frekvenciaju belso oszcillator, ami 31 Khz-es belso oszcillator
;  CONFIG  RSTOSC = HFINTOSC_1MHZHFINTOSC ; with HFFRQ = 4 MHz and CDIV = 4:1 - Magas frekvenciaju belso oszcillator
                                                                                       ;    ??????  kozepes frekvencias beallitassal                                                                                 ;
;  CONFIG  RSTOSC = EXTOSC ;     EXTOSC operating per FEXTOSC bits (device manufacturing default)
                                                      ; Kulso oszcillatoros mukodes a fentebb beallitott FEXTOSC szerint. Nincs ketsebesseges indulas.
                                                      ;Ez az alapertelmezett beallitas.
;
;   Clock out Enable bit:
;  CONFIG  CLKOUTEN = ON ;       CLKOUT function is enabled
;  CONFIG  CLKOUTEN = OFF ;      CLKOUT function is disabled
;
;   PRLOCKED One-Way Set Enable bit:
;  CONFIG  PR1WAY = OFF ;        PRLOCK bit can be set and cleared repeatedly
;  CONFIG  PR1WAY = ON ;         PRLOCK bit can be cleared and set only once
;
;   Clock Switch Enable bit:
;  CONFIG  CSWEN = OFF ;         The NOSC and NDIV bits cannot be changed by user software
;  CONFIG  CSWEN = ON ;          Writing to NOSC and NDIV is allowed
;
;   Fail-Safe Clock Monitor Enable bit:
; CPU orajelforras figyelesenek engedelyezese/tiltasa. Pld. ha a kulso oszcillator meghibasodik, azt tudja ezaltal erzekelni.
; Referenciaforrasnak az erzekelesre a 31 KHz-es TFINTOSC-ot hasznalja. Hiany eseten lehetoseg van beavatkozasra. 
;  CONFIG  FCMEN = OFF ;         Fail-Safe Clock Monitor disabled - Tiltja a CPU orajel figyelest
;  CONFIG  FCMEN = ON  ;         Fail-Safe Clock Monitor enabled - Engedelyezi a CPU orajel figyelest

;   MCLR Enable bit: ???? at kell majd irni