pbp ile pic18f serisi config ayarı örneği

Başlatan dnaci, 01 Ekim 2017, 19:10:35

dnaci

!!! LÜTFEN KODLARINIZI KOD # BUTONU İLE EKLEYİNİZ !!!



Forumda bu konu ile ilgili yeterince bilgi var ama biraz dağınık geldi bana.  Hepsini bir araya toplamaya çalıştım umarım faydalı olur:

Pic18f serisi için proton basic ve ccs c kullanıyorum. Ancak geçen yıl pbp ile pic16f887 ile çalışmıştım. Artık pic16f887 yetersiz geldiği için pic18f452 kullanmaya karar verdim. Pic basic pro ile pic18f452 kullanabilmek için mcs ayarları ve inc dosyaları ayarları yapılması gerekiyor. Bu bilgilerden yola çıkarak pic18f4520 veya pic18f4550 gibi işlemcileri pic basic pro kullanabilirsiniz. Bunları anlatmaya çalıştım.

1- Öncelikle c:pbp klasörü içindeki kullanacağımız işlemcinin inc dosyasını düzenlemek gerekiyor. Ben pic18f452 kullandığım için 18F452.INC  dosyasını notepad ile açıyoruz ve aşağıdaki satırlar karşımıza çıkar.
Görüldüğü gibi config satırlarını ; işareti ile kapattım. Neden derseniz mcs önce bu dosyaya bakıyor. Biz bu dosyayı kullanmayacağız. Biz proteus içindeki mpasm klasöründeki 18F452.INC  dosyasını kullanacağız. Yani proteusu bilgisayarınıza kurmanızda fayda var. __Config satırlarını ; ile kapatıp dosyayı kaydedip kapatınız.

;****************************************************************
;*  18F452.INC                                                  *
;*                                                              *
;*  By        : Leonard Zerman, Jeff Schmoyer                   *
;*  Notice    : Copyright (c) 2005 microEngineering Labs, Inc.  *
;*              All Rights Reserved                             *
;*  Date      : 12/16/05                                        *
;*  Version   : 2.47                                            *
;*  Notes     :                                                 *
;****************************************************************
        NOLIST
    ifdef PM_USED
        LIST
        "Error: PM does not support this device.  Use MPASM."
        NOLIST
    else
        LIST
        LIST p = 18F452, r = dec, w = -311, w = -230, f = inhx32
        INCLUDE "P18F452.INC"   ; MPASM  Header
        ;__CONFIG    _CONFIG1H, _OSCS_OFF_1H & _XT_OSC_1H
        ;__CONFIG    _CONFIG2H, _WDT_ON_2H & _WDTPS_128_2H
        ;__CONFIG    _CONFIG4L, _LVP_OFF_4L
        NOLIST
    endif
        LIST
EEPROM_START EQU 0F00000h

BLOCK_SIZE EQU 8


2- Şimdi işler biraz karışmaya başlıyor :)  c:program files içindeki proteus klasörü içindeki mpasm klasörünü buluyoruz. Bendeki dizin şu şekilde:

C:\Program Files\Labcenter Electronics\Proteus 8 Professional\Tools\MPASM

MPASM klasöründeki 18F452.INC  dosyasını notepad ile açıyoruz ve dosyanın sonundaki bütün config ayarlarını açıksa ; ile kapatıyoruz. Bu satırların altındakiler kapatılır dosya kaydedilir ve kapatılır.

;----- CONFIG1H Options --------------------------------------------------
;----- CONFIG2L Options --------------------------------------------------
;----- CONFIG2H Options --------------------------------------------------
;----- CONFIG3H Options --------------------------------------------------
;----- CONFIG4L Options --------------------------------------------------
;----- CONFIG5L Options --------------------------------------------------
;----- CONFIG5H Options --------------------------------------------------
;----- CONFIG6L Options --------------------------------------------------
;----- CONFIG6H Options --------------------------------------------------
;----- CONFIG7L Options --------------------------------------------------
;----- CONFIG7H Options --------------------------------------------------


Bendeki düzenlediğim dosya satırları aşağıdaki gibi:
;----- CONFIG1H Options --------------------------------------------------
;_LP_OSC              EQU  H'F8'    ; LP oscillator
;_LP_OSC_1H           EQU  H'F8'    ; LP oscillator
;_XT_OSC              EQU  H'F9'    ; XT oscillator
;_XT_OSC_1H           EQU  H'F9'    ; XT oscillator
;_HS_OSC              EQU  H'FA'    ; HS oscillator
_HS_OSC_1H           EQU  H'FA'    ; HS oscillator
;_RC_OSC              EQU  H'FB'    ; RC oscillator
;_RC_OSC_1H           EQU  H'FB'    ; RC oscillator
;_EC_OSC              EQU  H'FC'    ; EC oscillator w/ OSC2 configured as divide-by-4 clock output
;_EC_OSC_1H           EQU  H'FC'    ; EC oscillator w/ OSC2 configured as divide-by-4 clock output
;_ECIO_OSC            EQU  H'FD'    ; EC oscillator w/ OSC2 configured as RA6
;_ECIO_OSC_1H         EQU  H'FD'    ; EC oscillator w/ OSC2 configured as RA6
;_HSPLL_OSC            EQU  H'FE'    ; HS oscillator with PLL enabled/Clock frequency = (4 x FOSC)
;_HSPLL_OSC_1H         EQU  H'FE'    ; HS oscillator with PLL enabled/Clock frequency = (4 x FOSC)
;_RCIO_OSC            EQU  H'FF'    ; RC oscillator w/ OSC2 configured as RA6
;_RCIO_OSC_1H         EQU  H'FF'    ; RC oscillator w/ OSC2 configured as RA6

;_OSCS_ON_1H          EQU  H'DF'    ; Oscillator system clock switch option is enabled (oscillator switching is enabled)
;_OSCS_OFF_1H         EQU  H'FF'    ; Oscillator system clock switch option is disabled (main oscillator is source)

;----- CONFIG2L Options --------------------------------------------------
_PWRT_ON_2L           EQU  H'FE'    ; PWRT enabled
;_PWRT_OFF_2L         EQU  H'FF'    ; PWRT disabled

_BOR_OFF_2L           EQU  H'FD'    ; Brown-out Reset disabled
;_BOR_ON_2L           EQU  H'FF'    ; Brown-out Reset enabled

;_BORV_45_2L          EQU  H'F3'    ; VBOR set to 4.5V
;_BORV_42_2L          EQU  H'F7'    ; VBOR set to 4.2V
;_BORV_27_2L          EQU  H'FB'    ; VBOR set to 2.7V
;_BORV_20             EQU  H'FF'    ; VBOR set to 2.0V
_BORV_20_2L           EQU  H'FF'    ; VBOR set to 2.0V

;----- CONFIG2H Options --------------------------------------------------
_WDT_OFF_2H           EQU  H'FE'    ; WDT disabled (control is placed on the SWDTEN bit)
;_WDT_ON_2H           EQU  H'FF'    ; WDT enabled

;_WDTPS_1_2H          EQU  H'F1'    ; 1:1
;_WDTPS_2_2H          EQU  H'F3'    ; 1:2
;_WDTPS_4_2H          EQU  H'F5'    ; 1:4
;_WDTPS_8_2H          EQU  H'F7'    ; 1:8
;_WDTPS_16_2H         EQU  H'F9'    ; 1:16
;_WDTPS_32_2H         EQU  H'FB'    ; 1:32
;_WDTPS_64_2H         EQU  H'FD'    ; 1:64
;_WDTPS_128_2H        EQU  H'FF'    ; 1:128

;----- CONFIG3H Options --------------------------------------------------
_CCP2MX_OFF           EQU  H'FE'    ; CCP2 input/output is multiplexed with RB3
_CCP2MX_OFF_3H        EQU  H'FE'    ; CCP2 input/output is multiplexed with RB3
;_CCP2MX_ON           EQU  H'FF'    ; CCP2 input/output is multiplexed with RC1
;_CCP2MX_ON_3H        EQU  H'FF'    ; CCP2 input/output is multiplexed with RC1

;----- CONFIG4L Options --------------------------------------------------
_STVR_OFF_4L          EQU  H'FE'    ; Stack Full/Underflow will not cause RESET
;_STVR_ON_4L          EQU  H'FF'    ; Stack Full/Underflow will cause RESET

_LVP_OFF_4L           EQU  H'FB'    ; Low Voltage ICSP disabled
;_LVP_ON_4L           EQU  H'FF'    ; Low Voltage ICSP enabled

;_DEBUG_ON_4L         EQU  H'7F'    ; Background Debugger enabled. RB6 and RB7 are dedicated to In-Circuit Debug.
_DEBUG_OFF_4L         EQU  H'FF'    ; Background Debugger disabled. RB6 and RB7 configured as general purpose I/O pins.

;----- CONFIG5L Options --------------------------------------------------
;_CP0_ON_5L           EQU  H'FE'    ; Block 0 (000200-001FFFh) code protected
_CP0_OFF_5L           EQU  H'FF'    ; Block 0 (000200-001FFFh) not code protected

;_CP1_ON_5L           EQU  H'FD'    ; Block 1 (002000-003FFFh) code protected
_CP1_OFF_5L           EQU  H'FF'    ; Block 1 (002000-003FFFh) not code protected

;_CP2_ON_5L           EQU  H'FB'    ; Block 2 (004000-005FFFh) code protected
_CP2_OFF_5L           EQU  H'FF'    ; Block 2 (004000-005FFFh) not code protected

;_CP3_ON_5L           EQU  H'F7'    ; Block 3 (006000-007FFFh) code protected
_CP3_OFF_5L           EQU  H'FF'    ; Block 3 (006000-007FFFh) not code protected

;----- CONFIG5H Options --------------------------------------------------
;_CPB_ON_5H           EQU  H'BF'    ; Boot Block (000000-0001FFh) code protected
_CPB_OFF_5H           EQU  H'FF'    ; Boot Block (000000-0001FFh) not code protected

;_CPD_ON_5H           EQU  H'7F'    ; Data EEPROM code protected
_CPD_OFF_5H           EQU  H'FF'    ; Data EEPROM not code protected

;----- CONFIG6L Options --------------------------------------------------
;_WRT0_ON_6L          EQU  H'FE'    ; Block 0 (000200-001FFFh) write protected
_WRT0_OFF_6L          EQU  H'FF'    ; Block 0 (000200-001FFFh) not write protected

;_WRT1_ON_6L          EQU  H'FD'    ; Block 1 (002000-003FFFh) write protected
_WRT1_OFF_6L          EQU  H'FF'    ; Block 1 (002000-003FFFh) not write protected

;_WRT2_ON_6L          EQU  H'FB'    ; Block 2 (004000-005FFFh) write protected
_WRT2_OFF_6L          EQU  H'FF'    ; Block 2 (004000-005FFFh) not write protected

;_WRT3_ON_6L          EQU  H'F7'    ; Block 3 (006000-007FFFh) write protected
_WRT3_OFF_6L          EQU  H'FF'    ; Block 3 (006000-007FFFh) not write protected

;----- CONFIG6H Options --------------------------------------------------
;_WRTC_ON_6H          EQU  H'DF'    ; Configuration registers (300000-3000FFh) write protected
_WRTC_OFF_6H          EQU  H'FF'    ; Configuration registers (300000-3000FFh) not write protected

;_WRTB_ON_6H          EQU  H'BF'    ; Boot Block (000000-0001FFh) write protected
_WRTB_OFF_6H          EQU  H'FF'    ; Boot Block (000000-0001FFh) not write protected

;_WRTD_ON_6H          EQU  H'7F'    ; Data EEPROM write protected
_WRTD_OFF_6H          EQU  H'FF'    ; Data EEPROM not write protected

;----- CONFIG7L Options --------------------------------------------------
;_EBTR0_ON_7L         EQU  H'FE'    ; Block 0 (000200-001FFFh) protected from Table Reads executed in other blocks
_EBTR0_OFF_7L         EQU  H'FF'    ; Block 0 (000200-001FFFh) not protected from Table Reads executed in other blocks

;_EBTR1_ON_7L         EQU  H'FD'    ; Block 1 (002000-003FFFh) protected from Table Reads executed in other blocks
_EBTR1_OFF_7L         EQU  H'FF'    ; Block 1 (002000-003FFFh) not protected from Table Reads executed in other blocks

;_EBTR2_ON_7L         EQU  H'FB'    ; Block 2 (004000-005FFFh) protected from Table Reads executed in other blocks
_EBTR2_OFF_7L         EQU  H'FF'    ; Block 2 (004000-005FFFh) not protected from Table Reads executed in other blocks

;_EBTR3_ON_7L         EQU  H'F7'    ; Block 3 (006000-007FFFh) protected from Table Reads executed in other blocks
_EBTR3_OFF_7L         EQU  H'FF'    ; Block 3 (006000-007FFFh) not protected from Table Reads executed in other blocks

;----- CONFIG7H Options --------------------------------------------------
;_EBTRB_ON_7H         EQU  H'BF'    ; Boot Block (000000-0001FFh) protected from Table Reads executed in other blocks

_EBTRB_OFF_7H         EQU  H'FF'    ; Boot Block (000000-0001FFh) not protected from Table Reads executed in other blocks


3- Şimdi bu satırların pbp ve mcs üzerindeki karşılıklarına bakalım. Gördüğünüz gibi her config satırındaki bana lazım olanları asm  endasm arasına ekledim. Bütün 18f işlemciler için microchip 18f pdf dosyasını kullanarak fuse ayarlarınızı yapabilirsiniz. Dosya linki:

https://drive.google.com/file/d/0B9F3CyDwz-nISlgyWGhWcmpGUzg/view

Bu kodlar ile pic18f452 portb bütün bitler 1 ve 0 olmaktadır tam bir test kodu yani, 8mhz kristal kullandım. 4mhz için xt açmalısınız MPASM klasöründeki 18F452.INC dosyasından.

ÖRNEK PBP KODU:

asm    
__CONFIG _CONFIG1H, _HS_OSC_1H   
__CONFIG _CONFIG2L, _BOR_OFF_2L & _BORV_20_2L & _PWRT_ON_2L       
__CONFIG _CONFIG2H, _WDT_OFF_2H     
__CONFIG _CONFIG3H, _CCP2MX_OFF & _CCP2MX_OFF_3H     
__CONFIG _CONFIG4L, _STVR_OFF_4L & _LVP_OFF_4L & _DEBUG_OFF_4L   
__CONFIG _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L   
__CONFIG _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H   
__CONFIG _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L   
__CONFIG _CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H   
__CONFIG _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L   
__CONFIG _CONFIG7H, _EBTRB_OFF_7H
endasm

define OSC 8
ADCON1 = 7
TRISA=000000
'TRISB=000000
TRISB = $00
TRISC=000000
TRISD=000000
TRISE=000000
PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0
pause 500

BASLA:

PORTB=255
PAUSE 1000
PORTB=0
PAUSE 1000
GOTO BASLA


end


4- Şimdi bütün bu işlemleri yaptıysanız sıra mcs ayarı yapmaya geliyor:

Öncelikle view menüsünden compile and program options içindeki use PBPL seçiniz:




Daha sonra aynı menüden assembler seçilir ve proteus klasöründeki mpasm klasörü find manually ile mcsye gösterilir, use mpasm tiki şeçilip ok yapılır:





Şimdi mcs ile pic18f452 seçip yukarıdaki örnek kodu derlerseniz hex kodu oluşur. Ancak unutmayın 16f serisi için kod derleyeceğiniz zaman use pbpl ve use mpasm tiklerini kapatınız. 16f için bunlara gerek yoktur. Kolay gelsin.

NOT: Bilgisayarım 32 bit olduğu için 64 bit testi yapamadım. Ancak linkte mpasm ile 64 derleme yapılabileceği anlatılmış. Eğer bilgisayarınız 64 bit ise aşağıdaki linkteki bilgileri inceleyiniz:

http://etepic.com/index.php/topic,1687.0.html

Kaynak: http://www.elektroinfo.org/2017/10/pic-basic-pro-pic18f452-fuse-config.html

Powered by EzPortal