Mplabx Kurdum Osc frekansını nasıl belirtiliyor

Başlatan rree, 11 Temmuz 2013, 23:44:30

rree

      İki senedir CCs ile program yazıyorum. Bazı problemlerden dolayı Mplabx deneyeyim dedim.
  Bir tane proje oluşturdum.
Soru1-Window-Pic memory views-Confiration bits den ayarlar yapıp çıkan sonucu main.c e yapıştırdım.
          config ayarları bu şekildemi yapılmalı?
Soru 2- CCS de "#use delay(clock=12000000)  " böyle yazıp frekansı belirtiyordum mplabx de ne yapmalıyım
Soru 3  uart1 nasıl tanımlarız ccs de böyleydi "#use rs232(baud=9600, UART1,STREAM=Uart_1) "

Soru 4  CCs ye devammı dersiniz Mplabx nasıldır?

t2


Mplabx , CCs in muadili değildir. biri IDE  diğeri derleyici olsa gerek. ayrıca, Mplabx üzerinde CCS C derleyicisi de kullanılabiliyor.

gerçi  CCSin kendi IDEsi vardır. ben Mplabx kelimesiyle XC8, XC16 vs derleyicileri kastettiğinizi varsayıyorum.

Mplabx, XC derleyiciler, harikulade bir şeydir. Daha önce, yılardır  tırmaladığım  derleyicilerin proton, pbp vs nin çöp olduğunu anlamama vesile olmuştur.


bu kadar laf salatasından sonra
Mplabx  ile Osc frekansı nasıl ayarlanacak ?
bunu anlamak için Microchipin kendi örneklerini indirip içine bakmak veya XC derleyicilerin helpini incelemek yararlıdır.


Microchip Libraries for Applications

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=2680&dDocName=en547784



mesela şöyle demiş
   #define CLOCK_FREQ 48000000
..
 #define _XTAL_FREQ   48000000



bu yazıdığımız #define, kod tarafından yorumlanmadıktan sonra hiç işe yaramaz. yukarıdakileri kendi yazmış dosyaların fonksiyonların bir yerlerinde kullanılıyor olsa gerek.

şunu da biz diyebiliriz

#define klok_FR 48000000




hasankara

mplabx de ccs kullanabiliyorsunuz ama tanımlatması biraz zahmetli derleyiciler ile hiç uğraşmayayım dersen mplab x de hazır hi-tech kullanıyor. anladığım kadarıyla hi-tech geçiş için soruları sormuş oluyorsunuz direk kullandığım config i size atayım.

#include <htc.h>
__CONFIG(FOSC_INTOSC & WDTE_OFF & PWRTE_OFF 
& MCLRE_ON & CP_OFF & CPD_OFF & BOREN_OFF
& CLKOUTEN_OFF & IESO_OFF & FCMEN_OFF);

__CONFIG(PLLEN_ON & LVP_OFF);

 #define _XTAL_FREQ 16000000

bu konfigürasyonu pic16f1936 için böylece kullanabilirsiniz.
__CONFIG(0x09E4);

__CONFIG(0x1FFF);
dediğimizde de aynı şeyi yazmış oluyorsunuz.

htc.h tanımladığınız zaman delay komutu için bir daha kütüphane tanımlamanıza gerek kalmıyor.
__delay_ms(250);
__delay_us(250);
şeklinde gecikme komutlarını kullanabiliyorsunuz.

dilerseniz mplab x de ccs i kullanabilmeniz için arşivimi biraz kurcalayabilirim.

rree

Amacım ccs ile değil xc8 derleyicisini kullanmak. Yosksa mplabx de hi-tech  derleyicisimi kullanmalıyım.
  Sizlerin yönledirdiğiniz bilgiler ışığında kodlar şu şekilde oldu.
#include <p18f45k22.h>
#include <stdio.h>
#include <stdlib.h>

// PIC18F44K22 Configuration Bit Settings

// CONFIG1H
#pragma config FOSC = HSMP      // Oscillator Selection bits (HS oscillator (medium power 4-16 MHz))
#pragma config PLLCFG = ON      // 4X PLL Enable (Oscillator multiplied by 4)
#pragma config PRICLKEN = ON    // Primary clock enable bit (Primary clock is always enabled)
#pragma config FCMEN = OFF      // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled)
#pragma config IESO = OFF       // Internal/External Oscillator Switchover bit (Oscillator Switchover mode disabled)

// CONFIG2L
#pragma config PWRTEN = OFF     // Power-up Timer Enable bit (Power up timer disabled)
#pragma config BOREN = SBORDIS  // Brown-out Reset Enable bits (Brown-out Reset enabled in hardware only (SBOREN is disabled))
#pragma config BORV = 190       // Brown Out Reset Voltage bits (VBOR set to 1.90 V nominal)

// CONFIG2H
#pragma config WDTEN = ON       // Watchdog Timer Enable bits (WDT is always enabled. SWDTEN bit has no effect)
#pragma config WDTPS = 32768    // Watchdog Timer Postscale Select bits (1:32768)

// CONFIG3H
#pragma config CCP2MX = PORTC1  // CCP2 MUX bit (CCP2 input/output is multiplexed with RC1)
#pragma config PBADEN = OFF     // PORTB A/D Enable bit (PORTB<5:0> pins are configured as digital I/O on Reset)
#pragma config CCP3MX = PORTB5  // P3A/CCP3 Mux bit (P3A/CCP3 input/output is multiplexed with RB5)
#pragma config HFOFST = ON      // HFINTOSC Fast Start-up (HFINTOSC output and ready status are not delayed by the oscillator stable status)
#pragma config T3CMX = PORTC0   // Timer3 Clock input mux bit (T3CKI is on RC0)
#pragma config P2BMX = PORTD2   // ECCP2 B output mux bit (P2B is on RD2)
#pragma config MCLRE = EXTMCLR  // MCLR Pin Enable bit (MCLR pin enabled, RE3 input pin disabled)

// CONFIG4L
#pragma config STVREN = ON      // Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset)
#pragma config LVP = ON         // Single-Supply ICSP Enable bit (Single-Supply ICSP enabled if MCLRE is also 1)
#pragma config XINST = OFF      // Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode disabled (Legacy mode))

// CONFIG5L
#pragma config CP0 = OFF        // Code Protection Block 0 (Block 0 (000800-001FFFh) not code-protected)
#pragma config CP1 = OFF        // Code Protection Block 1 (Block 1 (002000-003FFFh) not code-protected)

// CONFIG5H
#pragma config CPB = OFF        // Boot Block Code Protection bit (Boot block (000000-0007FFh) not code-protected)
#pragma config CPD = OFF        // Data EEPROM Code Protection bit (Data EEPROM not code-protected)

// CONFIG6L
#pragma config WRT0 = OFF       // Write Protection Block 0 (Block 0 (000800-001FFFh) not write-protected)
#pragma config WRT1 = OFF       // Write Protection Block 1 (Block 1 (002000-003FFFh) not write-protected)

// CONFIG6H
#pragma config WRTC = OFF       // Configuration Register Write Protection bit (Configuration registers (300000-3000FFh) not write-protected)
#pragma config WRTB = OFF       // Boot Block Write Protection bit (Boot Block (000000-0007FFh) not write-protected)
#pragma config WRTD = OFF       // Data EEPROM Write Protection bit (Data EEPROM not write-protected)

// CONFIG7L
#pragma config EBTR0 = OFF      // Table Read Protection Block 0 (Block 0 (000800-001FFFh) not protected from table reads executed in other blocks)
#pragma config EBTR1 = OFF      // Table Read Protection Block 1 (Block 1 (002000-003FFFh) not protected from table reads executed in other blocks)

// CONFIG7H
#pragma config EBTRB = OFF      // Boot Block Table Read Protection bit (Boot Block (000000-0007FFh) not protected from table reads executed in other blocks)

#define _XTAL_FREQ  16000000    // this is used by the __delay_ms(xx) and __delay_us(xx) functions
#define IncomingData_LED   LATDbits.LATD4

/*
 * 
 */
int main(int argc, char** argv) {

    
}



Tagli

#4
Gözüme çarpan birkaç şey:

LATDbits.LATD4 yazmana gerek yok. C18'de böyle idi ama XC8'de sadece LATD4 yazman yeterli.

#include <p18f45k22.h> ifadesi pek doğru değil. XC8 ile yazılmış her kod parçasında (kaynak dosyasında) #include <xc.h> yazılması gerekir. İşlemci modeli zaten MPLAB X tarafından otomatik olarak (dahili olarak) #define ediliyor ve xc.h bu tanımlamaya göre ilgili header dosyasını kendisi ekliyor.

Hazır taslak dosyasının içinde int main(int argc, char** argv) yazıyor ama bunun içindeki argümanlara gerek yok. void main(void) olarak yazılarak birkaç byte tasarruf edilebilir.

MPLAB X'te bazı hatalar var, doğru olan kod parçalarının hatalı olduğunu iddea ederek altını kırmızı ile çizebiliyor. Derleme işlemi sorunsuz yapılıyorsa, bu yanlış alarmları umursamamak lazım.

__delay_ms() gibi bekleme makroları bir ara sorunluydu, içine mesela 20'den büyük bir değer (değeri örnek olarak salladım) girince derleme hatası veriyordu. Bu durumu çözmek için kendim bir döngülü fonksiyon yazıp içine __delay_ms(1) koymuştum.
Gökçe Tağlıoğlu

rree


hasankara

Alıntı YapYosksa mplabx de hi-tech  derleyicisimi kullanmalıyım.
bunu kast etmemiştim. siz mplabx ile ccs karşılaştırınca aklıma ilk olarak hi-tech geldi yoksa mplabx de dediğiniz gibi xc8 gibi başka derleyicilerde hazır yüklü geliyor. ben kullanmış olduklarımdan bahsettim yalnızca.

6-7 ay kadar önce mplabx de yeni proje oluşturmaya bir kaç saat uğraşınca mplab a geri dönüş yapmıştım. tabi üzerine bir çok güncelleme gelmiştir.

Tagli

Bildiğim kadarıyla Türkçe kitap yok. Hatta İngilizce kitap da yok. Derleyicinin resmi rehberi var, son versiyonu kurulum klasörünün içindeki doc klasöründe manual.pdf adıyla bulunuyor ama internetten de erişmek mümkün [buradan]. Genel olarak bu rehber ve datasheet yeterli oluyor. Rehber biraz karışık ama içindeki çoğu bilgi günlük kullanımda çok gerekmeyen ayrıntılar. PIC18 için peripheral library de mevcut ama dokümantasyonu berbat durumda. O fonksiyonlarla uğraşmaktansa datasheet'e bakıp sıfırdan yazmak daha kolay, ben öyle yapıyorum genelde.
Gökçe Tağlıoğlu

strom

Hocam CCS'de osilatör frekansını belirtmenizin nedeni; kendi kütüphanelerinde o değere ihtiyaç duymasıdır. CCS'ninde görünürde avantajlı olmasının sebebi bu kütüphane kolaylığıdır ztn.
XC8 için microchip'in hazır kütüphaneleri varsa, içlerinde frekansın nasıl tanımlanması gerektiği yazar. Başka kütüphane kullandığındığın zaman yine tanımlamalarda nasıl frekans belirtmen gerektiği yazar. Kısaca hiçbir kütüphane kullanmadığında böyle bir tanımlamayada ihtiyaç duymazsın, zorunlu değildir

rree

Bilgileriniz için tşkr.Bir kaçtane örnek baktım  diyelim usart mödülünün bütün bitlerini tek tek yazmışlar.
  CCS "#use rs232(baud=9600, UART1,STREAM=Uart_1)  iş bitiyordu.
  Debug nasıl  yapmalıyım pickit3  alsak yeterlimi.
 

Tagli

PicKit3 debug için yeterli ancak debug olanakları PIC modeline göre değişiyor. Eski veya düşük model PIC'lerde debug imkanları oldukça sınırlı.
Gökçe Tağlıoğlu

Mr.Java

Ben pickit 3 ile ne yaptıysam yapamadım debug.18F4550 kullanıyorum.Fuse ayarlarından debug pinini aktif edeyim mi diye sorduğunda evet diyorum yine hata veriyor sürekli.

Tagli

Sağlıklı bir debug işlemi için o iki bacağa (RB7 ve RB6) hiçbir şey bağlı olmaması gerekiyor. Ayrıca emin değilim ama debug işlemi için harici osilatör ile çalışma gerekiyor olabilir, sanki bir yerde öyle okumuştum ama yanlış anlamış olabilirim. Config'deki debug ayarını zaten MPLAB X kendisi hallediyor, koda onunla ilgili birşey yazmamak daha iyi olur. MPLAB X'teki debug düğmesine basıldığında programı debug için uygun şekilde derleyerek cihaza atıyor.
Gökçe Tağlıoğlu

Mr.Java

@Tagli

Hocam sıkıntı olmaması lazım.Debug bacağının diğer pinlere bağlantısında.Yarın veya öbürgün kompleks iş yaptığımızda tüm bacakları kullandık diyelim.Bu sistemde debug nasıl yapacağız.Ben yaptığımda sürekli fuse ayarlarınızı kontrol edin diyor.Ne kadar denediysek boş.

rree

Donanımsal debug benim için kaçınılmaz oldu. Önceliklerim Pic18f45k22  ve  DsPic33FJ128GP802  breakboard da debug işlemini gerçekleştireceğim. Pickit3 deneyen oldumu.