"Enter"a basıp içeriğe geçin

PIC18F4550 Mikrodenetleyicisi Konfigürasyon Ayarları

Merhaba sevgili ziyaretçiler, bu yazımın konusu PIC mikrodenetleyicilerinde konfigürasyon bitleri ve konfigürasyon ayarları ile ilgili olacak. Konfigürasyon bitleri mikrodenetleyicilerde farklı özellikleri kontrol etmek için kullanılan özel bitlerdir. Bunlar mikrodenetleyicinin başlangıcı veya reset işlemi sonrasında okunarak, bitlerin değerlerine göre farklı donanım özelliklerini açmak veya kapatmak için kullanılırlar. Bu bitleri kullanarak saat kaynağının nereden olacağını (dahili veya harici clock), watchdog zamanlayıcının kullanılıp kullanılmayacağını vs. belirleyebiliriz. Konfigürasyon bitleri yalnızca mikrodenetleyicinin programlanması sırasında değiştirilebilir. Bu bitler cihazın çeşitli özelliklerini seçmek için programlanabilirler. Bu bitler 0x300000 adresinden başlayan program hafızası konumuna adreslenirler.

Konfigürasyon bitleri, kullanıcı program belleği alanına değil konfigürasyon bellek alanında bulunduklarından kodun çalıştırılması sırasında erişilemez durumdadır. Dolayısıyla bu bitlere yalnızca tablo halinde erişilerek okuma veya yazma yapılabilmektedir.

Konfigürasyon bitleri yalnızca program içerisine yazılan “#pragma config” direktifleriyle ayarlanabilmektedir. MPLAB IDE içerisinde bu direktifleri oluşturabileceğiniz “Configuration Bits” penceresi mevcuttur. Bu pencere içerisinde oluşturduğunuz direktifleri doğrudan kopyala-yapıştır ile veya dosya olarak kaydederek kodunuza dahil edebilirsiniz.

PIC18F4550 için Konfigürasyon Bitleri

PIC 18F4550’de 14 konfigürasyon yazmacı vardır. Bunlar: CONFIG1L, CONFIG1H, CONFIG2L, CONFIG2H, CONFIG3H, CONFIG4L, CONFIG5L, CONFIG5H, CONFIG6L, CONFIG6H, CONFIG7L, CONFIG7H, DEVID1 ve DEVID2. Son iki yazmaç donanım kimlik numarasını barındıran salt okunur yazmaçlardır. Diğer 12 yazmaç PIC18F4550’nin konfigürasyon bitlerini ayarlamak için kullanılan yazmaçlardır.

PIC18F4550 için konfigürasyon bitleri
PIC18F4550 için konfigürasyon bitleri

Her bir konfigürasyon biti için detaylı açıklamasını PIC18F4550’nin datasheetinde bulabilirsiniz. PIC18F için konfigürasyon ayarları dokümanına da bakabilirsiniz.

XC8’de Konfigürasyon Bitlerini Tanımlama

Konfigürasyon bitlerini tanımlamak için aşağıdaki format ile birlikte pragma direktiflerini kullanıyoruz.

#pragma config CONFIG_BIT_NAME = CONFIG_VALUE

Örneğin, osilatör kaynağını harici HS osilatör olarak ayarlamak için

#pragma config FOSC = HS        // Osilatör tercihi (HS osilatör (HS))

Osilatör konfigürasyonları

PIC18F4550, 12 farklı osilatör modunda çalıştırılabilir. Proje ihtiyacına göre uygun modun seçilmesi gerekir. Bu konuda PIC mikrodenetleyicilerinin farklı osilatör seçenekleri ile ilgili kod örnekleri içeren kapsamlı bir dokümantasyon seçeneği mevcut. Aşağıdaki tabloda osilatör modları ile ilgili seçenekler listelenmiştir.

PIC18F4550 için Osilatör Konfigürasyon Bitleri
PIC18F4550 için Osilatör Konfigürasyon Bitleri

Hatalı Saat İzleyicisi (Failsafe Clock Monitor)

Hatalı Saat İzleyicisi, harici saat arızalandığında cihazın dahili osilatörlere geçmesini sağlar. Bu seçenek FCMEM yapılandırma biti ayarlanarak etkinleştirilebilir.

#pragma config FCMEM = OFF       // Failsafe izleyici kapalı
#pragma config FCMEM = ON       // Failsafe izleyici açık

Dahili / Harici Saat Geçişi

Bu seçenek MCU’nun dahili ve harici saatler arasında geçiş yapmasına izin verir. Bu özelliğin avantajı MCU’nun daha hızlı başlamasını sağlamasıdır. Harici osilatör devresi normal çalışmasına başlamadan önce denge durumuna gelmesi için 1024 osilasyon gerektirmektedir. Bu stabilizasyon sürecinde MCU reset durumunda kalır ve başlangıç sırasında veya uyku modundan çıkışta istenmeyen gecikmelere neden olur. Bu özellik aktifleştirildiğinde MCU, başlangıç sırasındaki 1024 osilasyonluk gecikme süresi boyunca dahili osilatörle çalışır ve sonuçta cihaz daha hızlı şekilde hazır duruma gelir.

#pragma config IESO = OFF       // Saat değiştiricisi KAPALI, Açmak için IESO = ON yapın.

USB Saat Seçimi

Bu seçenek ile Tam Hızlı USB Saat Kaynağı seçilmektedir. Burada iki seçenek mevcuttur. OSC1 / OSC2 veya 96 MHz PLL / 2 seçeneklerinden birini seçebiliriz. USB sadece 48MHz (tam hızda) ve 6MHz (düşük hızda) saat frekanslarını kabul eder. Saat frekansı 6 MHz veya 48 MHz ise, doğrudan kullanılabilir. Aksi halde, saati işlemek için PLL ve son bölücü (postscalar) kullanmamız gerekir.

#pragma config USBDIV = 1       // USB Saat Kaynağı OSC1/OSC2
#pragma config USBDIV = 2       // USB Saat Kaynağı 96MHz PLL/2

96 MHz PLL Ön bölücü (Prescaler)

PLL, USB için saat frekansı üretmek amacıyla kullanılır. Saat girişini 24 ile çarpar. Ön bölücü, ana saat frekansı PLL’e girmeden önce onu belli bir işleme tabi tutar. Bu seçeneği kullanmak için önce saat seçimi yapılandırma bitini HSPLL olarak ayarlamamız gerekir.
PLL ön bölücü, PLL’e 4MHz’lik saat girişi almak için ana saat frekansını belli bir değere böler. Bu bölme değeri osilatörün saat frekansına bağlıdır. Örneğin 20 MHz osilatör için bölme değeri 5’tir.
#pragma config PLLDIV = 1       // Bölme yok (4MHz saat girişi)
#pragma config PLLDIV = 2       // 2'ye Böl (8MHz saat girişi)
#pragma config PLLDIV = 3       // 3'e Böl (12MHz saat girişi)
#pragma config PLLDIV = 4       // 4'e Böl (16MHz saat girişi)
#pragma config PLLDIV = 5       // 5'e Böl (20MHz saat girişi)
#pragma config PLLDIV = 6       // 6'ya Böl (24MHz saat girişi)
#pragma config PLLDIV = 10      // 10'a Böl (40MHz saat girişi)
#pragma config PLLDIV = 12      // 12'ye Böl (48MHz saat girişi)

MCU Sistem Saati Son Bölücüsü (Postscaler)

Saatin tekrar sisteme devredilmesinden önce frekansın ölçeklendirilmesi için sistem saati son bölücüsü kullanılır. Örneğin bu şekilde, OSC1_PLL2 seçeneğini kullanarak PLL’den 48MHz’lik saat frekansı elde edilebilir.

#pragma config CPUDIV = OSC1_PLL2       // [OSC1/OSC2 Src: /1][96MHz PLL Src: /2]
#pragma config CPUDIV = OSC2_PLL3       // [OSC1/OSC2 Src: /2][96MHz PLL Src: /3]
#pragma config CPUDIV = OSC3_PLL4       // [OSC1/OSC2 Src: /3][96MHz PLL Src: /4]
#pragma config CPUDIV = OSC4_PLL6       // [OSC1/OSC2 Src: /4][96MHz PLL Src: /6]

Power up Timer

Power Up zamanlayıcısı, program başlamadan önce MCU’nun tam çalışma voltajına ulaşana kadar gecikme yaparak beklemesini sağlar.  Power-up reset veya brown-out reset işleminden sonra küçük bir gecikme sağlar. Zaman kritik uygulamalar için kullanışlıdır. Bu ayarlar aşağıdaki seçeneklerle kontrol edilebilir.

#pragma config PWRT = ON       // Power up zamanlayıcı aktif
#pragma config PWRT = OFF      // Power up zamanlayıcı pasif

Brown out Reset

Brown out reset, besleme voltajı belirli bir voltajın altına düştüğünde mikrodenetleyicinin sıfırlanmasını sağlar. Brown out voltajı konfigürasyon ayarları ile bu eşik voltajı belirlenebilir. Aşağıda listelendiği gibi dört konfigürasyon seçeneği vardır. Sıfırlamanın yazılım aracılığıyla kontrol edilmesi için bir seçenek de bulunmaktadır.

#pragma config BOR = OFF        // Brown out reset etkin değil
#pragma config BOR = SOFT       // Brown out reset SBOREN (yazılımsal) tarafından kontrol edilir
#pragma config BOR = ON_ACTIVE  // MCU SLEEP modda değilse BOR etkindir, SBOREN etkin değildir.
#pragma config BOR = ON         // Brown out reset etkin, SBOREN biti etkin değildir.

Brown out Gerilimi

Bu konfigürasyon bitini kullanarak, brown out reset voltajı için bir eşik değer ayarlanır.

#pragma config BORV = 46        // Brown out eşik gerilimi = 4.6V
#pragma config BORV = 43        // Brown out eşik gerilimi = 4.3V
#pragma config BORV = 28        // Brown out eşik gerilimi = 2.8V
#pragma config BORV = 21        // Brown out eşik gerilimi = 2.1V

USB Gerilim Regülatörünü Etkinleştirme

VREGEN dahili USB voltaj regülatörünü etkinleştirmek veya devre dışı bırakmak için kullanılır. USB voltaj regülatörünü harici olarak beslemek için VREGEN değeri sıfır yaparak devre dışı bırakılır.

#pragma config VREGEN = OFF       // USB gerilim regülatörü etkin değil
#pragma config VREGEN = ON       // USB gerilim regülatörü etkin

Watchdog Zamanlayıcı

Mikrodenetleyici herhangi bir işlem sırasında bir sonsuz döngüde takıldığında, watchdog zamanlayıcı bu durumu algılayabilir. Bu zamanlayıcı belli bir eşik değerine ayarlanarak, çalışma süresi bu eşik değerini aştığında watchdog zamanlayıcının mikrodenetleyiciyi resetlemesi sağlanabilir.

#pragma config WDT = OFF       // Donanımsal watchdog etkin değil - yazılımsal kontrol etkin
#pragma config WDT = ON       // Donanımsal watchdog kontrol etkin

Watchdog Ön Bölücüsü (Watchdog Prescaler)

Watchdog zamanlayıcı için ön bölücü değeri WDTPS biti ile ayarlanır. Watchdog periyodu 4 ms’den 131.072 saniyeye kadar ayarlanabilir. 1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384 ve 32768 değerlerinden uygun olan bir ön bölücü değeri seçilerek Watchdog periyodu ayarlanabilir.

#pragma config WDTPS = 128       // 1:128 prescalar selected

MCLR Etkinleştir

MCLR pini, MCU’ya harici reset sinyali sağlar. Bu pin LOW’a çekildiğinde reset sinyali üretilir ve MCU resetlenir. MCLR pinini dijital giriş pini (RE3) olarak kullanmak için MCLR devre dışı bırakılabilir. MCLR pinini devre dışı bırakmak için MCLRE = OFF yapılmalıdır.

#pragma config MCLRE = OFF       // MCLR devre dışı
#pragma config MCLRE = ON        // MCLR etkin

Düşük Güç Timer1 Osilatörünü Etkinleştir

Timer1 osilatörü düşük güç ve yüksek güç olmak üzere iki güç tüketimi modunda çalışabilir. LPT1OSC yapılandırma biti, güç modunu kontrol eder. Varsayılan konfigürasyon yüksek güç modudur.

#pragma config LPT1OSC = OFF       // Timer1 osilatörü yüksek güç için konfigüre edilir
#pragma config LPT1OSC = ON        // Timer1 osilatörü düşük güç için konfigüre edilir

Port B Analog/Dijital Etkinleştir

PIC18F4550’nin Analog/Dijital dönüştürücü için 13 kanalı vardır. Beş kanal PortB <4:0> bitinde bulunur. Bu bitleri Analog/Dijital dönüştürücü olarak kullanabilmek için, PBADEN bitini ON olarak ayarlamalıyız. Böylece, bu bitler RESET sırasında analog giriş olarak yapılandıracaktır.

#pragma config PBADEN = OFF       // PortB<4:0> pinleri reset aşamasında dijital giriş/çıkış olarak konfigüre edilir
#pragma config PBADEN = ON        // PortB<4:0> pinleri reset aşamasında analog giriş/çıkış olarak konfigüre edilir

CCP2 Mux (Multiplexing) Biti

CCP2 (Capture/Compare/PWM) için pin ataması, CCP2MX konfigürasyon biti esas alınarak değiştirilebilir. Varsayılan seçenek RC2’dir (CCP2MX = 1). Eğer bu bit 0 ise, CCP2 RB3 ile çoğullanır.

Stack Overflow Reset

PIC18F4550, yığın taşması (stack overflow) durumlarında kendini RESET’leyecek şekilde yapılandırılabilir. Bu seçeneği etkinleştirmek için STVREN konfigürasyon biti etkinleştirilmelidir.

#pragma config STVREN = OFF       // Stack overflow reset
#pragma config STVREN = ON        // Stack overflow reset OFF

Düşük Gerilim ICSP

LVP biti düşük voltaj programlama modunu etkinleştirmek içindir. Düşük voltaj programlamasının avantajı, cihazın yüksek voltaj programlama modunda  MCLR pininin Vdd’den daha yüksek voltaj seviyesine bağlanması gerekirken, düşük voltaj programlama modunda sıradan lojik seviyelerle programlanabilmesidir. Düşük voltajlı programlama modunda, sadece tek kaynak kullanır. Programlama moduna girmek için, PGM biti Vdd’ye bağlanmalıdır, bu yüzden PGM (RB5) biti G/Ç işlemi için kullanılamaz olur.

#pragma config LVP = OFF       // düşük gerilim programlama modu kapalı
#pragma config LVP = ON        // düşük gerilim programlama modu açık

In-Circuit Hata Ayıklama/Programlamayı Etkinleştirme

44 pinli TQFP cihazlar, NC (Bağlantısız) pinlerini, özel In-Circuit Debug ve In-Circuit Seri Programlama pinleri olarak kullanabilir. Böylece RB5, RB6, RB7 pinleri dijital G/Ç işlemleri için kullanılabilir. Bu özellik 40 pinli DIP cihazlarda mevcut değildir. Bu özelliği kullanmak için ICPRT = ON yapılması gerekir.

#pragma config ICPRT = OFF       // Özel ICD/ICSP pinleri aktif
#pragma config ICPRT = OFF       // Özel ICD/ICSP pinleri aktif değil

Genişletilmiş Komut Setini Etkinleştir

PIC18F4550’nin varsayılan olarak 75 komutu vardır, ancak  çekirdek CPU komutlarına ek olarak 8 komut daha vardır. Bunları etkinleştirmek için, XINST yapılandırma bitini ayarlamamız gerekiyor.

#pragma config XINST = OFF       // Genişletilmiş komut seti aktif
#pragma config XINST = ON        // Genişletilmiş komut seti aktif değil

Arka Plan Hata Ayıklayıcısını Etkinleştir

Arkaplan Hata ayıklama kontrol arayüzü, programınız çalışırken veya hatta uyurken RAM belleğe, SFR’lere ve emülasyon yazmaçlarına okuma / yazma erişimi sağlar. Özelliği etkinleştirmek için, DEBUG konfigürasyon biti ayarını ON yapın.

#pragma config DEBUG = OFF       // Arkaplan Hata Ayıklayıcı kapalı
#pragma config DEBUG = ON        // Arkaplan Hata Ayıklayıcı açık

Code Protection

Kullanıcı program belleği, biri 2Kbyte’lık önyükleme bloğu olan beş bloğa bölünmüştür. Bu blokların her biri, bunlarla ilişkili üç kod koruma biti içerir. Bunlar

  • Kod koruma biti (CPn)
  • Yazma koruma biti (WRTn)
  • Harici Blok Tablosu Okuma biti (EBTRn)
PIC18F4550 için Kod Koruma Bitleri (Kaynak: https://openlabpro.com)
PIC18F4550 için Kod Koruma Bitleri (Kaynak: https://openlabpro.com)

Program Belleği Kod koruması

CPn bitleri harici okuma ve yazma işlemlerini kontrol eder, WRTn bitleri blok hafızasını tablo yazımlarından korur ve EBTRn bit kontrol tablosunu okur. Bit’in sıfırlanması, örneğin, Blok 0’ı harici okumalardan ve yazmalardan korumak için etkinleştirilecektir, CP0’ı 0 olarak ayarlayın. XC8 için, CP0 = ON.

Veri EEPROM Kod Koruması

EEPROM verileri harici okuma ve yazmalardan iki yapılandırma biti, CPD ve WRTD kullanılarak korunur. CPD iç ve dış okumaları kontrol eder ve WRTD iç okumaları ve yazmaları denetler.

#pragma config CPD = ON        // Veri EEPROM Kod koruması ON
#pragma config WRTD = OFF      // Veri EEPROM Kod koruması OFF

Konfigürasyon Yazmaç Koruması

WRTC konfigürasyon biti, konfigürasyon yazmacının korunmasını kontrol eder. Yapılandırma yazmacı yazmaya karşı korumalı olarak yapılandırılabilir. WRTC biti sadece ICSP veya harici programlayıcılar tarafından değiştirilebilir.

#pragma config WRTC = ON        // Konfigürasyon yazmaç koruması ON

 

Şimdilik bu kadar. Başka yazılarda görüşmek dileğiyle..

 

Haruncetin.com.tr

İlk Yorumu Siz Yapın

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir