MPLABX 'de XC8 ile 16F serisi kullanımı

Başlatan fryrmnd, 26 Temmuz 2012, 13:02:50

fryrmnd

Merhaba arkadaşlar. Bir türlü boş main fonksiyonunu derleyemedim. picc.ini de 16f628A nın başına pic ekledim olmadı. bir arkadaş bölgesel dil ayarlarından bahsetmiş. 2 . bir çözüm olarak da make file ların birinde bir değişiklik göstermişti sanırım onu da denedim bir sonuç alamadım. 16f seris için XC8 i mplab ile kullanan varsa yardım edebilir mi?

a.zorba

#1
herhangi bir sıkıntı yok pic tanımlamalaırnı aşagıdaki örnek yol gösterebılir.
ide olarak  mplabx ,  compıler    xc8  kullanıldı.

dil ayarları filan yanlış hatırlamıyorsam hitech i mplabx ile kullanmak istersen yapılıyordu .

#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include <pic16f876a.h>
#include "delay.h"


#define buton PORTAbits.RA1  // porta1 e buton ad? ver?ld?
#define led1  PORTCbits.RC0   // led lerle portlar e?le?t?r?ld?
#define led2  PORTCbits.RC1
#define led3  PORTCbits.RC2


void main (void)
{
    ADCON1 = 0x0F;	// ADC iptal.
TRISA=0xFF;
TRISC=0x00;
PORTA=0;
PORTC=0;

     if (buton==0)  // buton a basılmışsa
         led1=1;    // led1 i yak
         DelayMs(100);    // bekle
         led1=0;        // led1 i söndur

led2=1;    // program koşma sırasında davranışı gormek ıçın yazıldı led2 ve led3 yanar soner
DelayMs(100);  // 100 ms lik gec?kme
led2=0;
DelayMs(100);
led3=1;
DelayMs(100);  // 100 ms lik gec?kme
led3=0;
DelayMs(100);

return;  // programın daima koşması için

}


Bilenler bilir . Biz maraşlilar için şehir olarak şubat ay' i bayram ,kurtuluş ,yaz in gelmesiydi. Şimdi karalar in yas in ayı oldu.

fryrmnd

#2
hocam yazdığım şu
#include <xc.h>
#include <pic16f628a.h>
void main(void)
{
    
}


verdiği hata da bu

:: error: chip "PIC16F628A" not present in chipinfo file "C:\Program Files (x86)\Microchip\xc8\v1.01\dat\picc.ini"

Tagli

#include <pic16f628a.h> satırını kullanmana gerek yok. Hatta belki de hataya sebep olan odur. PIC seçimini MPLAB X'in proje ayarlarından yap.
Gökçe Tağlıoğlu

fryrmnd

#4
yok tagli hocam. ben de picin header ını eklemiyordum. zorba hocamın örnek koduna binaen deniyim dedim gene aynı. pic seçimini de dediğiniz gibi proje ayarlarından yapıyorum. ama gene aynı sonuç.

a.zorba

#5
bir sorun yok ,  programı kaldırıp  yenıden kurmayı dene .

#include <xc.h>
#include <pic16f628a.h>
void main(void)
{
    
}


buda cıkdısı
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory `C:/New Folder/628deneme.X'
make  -f nbproject/Makefile-default.mk dist/default/production/628deneme.X.production.hex
make[2]: Entering directory `C:/New Folder/628deneme.X'
"C:\Program Files\Microchip\xc8\v1.01\bin\xc8.exe" --pass1  --chip=16F628A -Q -G --asmlist  --double=24 --float=24 --emi=wordwrite --opt=default,+asm,-asmfile,+speed,-space,-debug,9 --addrqual=ignore -P -N255 --warn=0 --summary=default,-psect,-class,+mem,-hex,-file --runtime=default,+clear,+init,-keep,-no_startup,+osccal,-resetbits,-download,-stackcall,+config,+clib,+plib "--errformat=%%f:%%l: error: %%s" "--warnformat=%%f:%%l: warning: %%s" "--msgformat=%%f:%%l: advisory: %%s"  -obuild/default/production/_ext/1697874529/newmain.p1  "C:/New Folder/628deneme.X/newmain.c" 
"C:\Program Files\Microchip\xc8\v1.01\bin\xc8.exe"  --chip=16F628A -G --asmlist -mdist/default/production/628deneme.X.production.map  --double=24 --float=24 --emi=wordwrite --opt=default,+asm,-asmfile,+speed,-space,-debug,9 --addrqual=ignore -P -N255 --warn=0 --summary=default,-psect,-class,+mem,-hex,-file --runtime=default,+clear,+init,-keep,-no_startup,+osccal,-resetbits,-download,-stackcall,+config,+clib,+plib "--errformat=%%f:%%l: error: %%s" "--warnformat=%%f:%%l: warning: %%s" "--msgformat=%%f:%%l: advisory: %%s"   -odist/default/production/628deneme.X.production.cof  build/default/production/_ext/1697874529/newmain.p1     
Microchip MPLAB XC8 C Compiler (Free Mode)  V1.01
Copyright (C) 2012 Microchip Technology Inc.
(1273) Omniscient Code Generation not available in Free mode (warning)

Memory Summary:
    Program space        used     4h (     4) of   800h words   (  0.2%)
    Data space           used     2h (     2) of    E0h bytes   (  0.9%)
    EEPROM space         used     0h (     0) of    80h bytes   (  0.0%)
    Configuration bits   used     0h (     0) of     1h word    (  0.0%)
    ID Location space    used     0h (     0) of     4h bytes   (  0.0%)


Running this compiler in PRO mode, with Omniscient Code Generation enabled,
produces code which is typically 40% smaller than in Free mode.
See http://microchip.com for more information.

make[2]: Leaving directory `C:/New Folder/628deneme.X'
make[1]: Leaving directory `C:/New Folder/628deneme.X'

BUİLD SUCCESSFUL (total time: 6s)
Loading code from C:/New Folder/628deneme.X/dist/default/production/628deneme.X.production.hex...
Loading symbols from C:/New Folder/628deneme.X/dist/default/production/628deneme.X.production.cof...
Loading completed
Bilenler bilir . Biz maraşlilar için şehir olarak şubat ay' i bayram ,kurtuluş ,yaz in gelmesiydi. Şimdi karalar in yas in ayı oldu.

fryrmnd

acaba derleyiciden mi mplabx den mi. C18 de 18F serisi ile sıkıntı yok. şimdi baktım. XC8 18 serisini de derlemesi gerkmiyor mu. 18 serisi için proje oluşturdum. C18 derleyicisini görüyor sadece.

a.zorba

kullandıgın XC8 versiyonu nedir 1,0,0  ise 1,0,1 e yukseltıp denermısın 
Bilenler bilir . Biz maraşlilar için şehir olarak şubat ay' i bayram ,kurtuluş ,yaz in gelmesiydi. Şimdi karalar in yas in ayı oldu.

Tagli

Gökçe Tağlıoğlu

fryrmnd

#9
versiyon 1.01 ama plugin yüklü değil. aslında plugin i olduğundan hbaerim bile yok. bir de plugin yükleyip deneyeyim. teşekkürler arkadaşlar.

mesaj birleştirme:: 27 Temmuz 2012, 16:39:53

mplabx 1.3 yükledim. kurulum başlangıcında xc8 ile ilgili tüm ayar kutucuklarını da tik ledim. şuan derleyebiliyorum.

http://www.microchip.com/forums/m647154.aspx

şurda yazdığına göre de 1.2 sonrası plugin mplabx ile beraber geliyormuş.  tekrardan teşekkürler arkadaşlar.

a_a_sezen

Alıntı yapılan: Tagli - 26 Temmuz 2012, 14:47:00
#include <pic16f628a.h> satırını kullanmana gerek yok. Hatta belki de hataya sebep olan odur. PIC seçimini MPLAB X'in proje ayarlarından yap.

Hocam, satırı çıkarınca ilgili header da define edilmiş hiç bir şeyi tanımıyor.
Dediğiniz gibi proje oluştururken pic seçimini zaten yapıyorum.

Bir de XC8 ile delay_ms() gibi içinde delay geçen hiç bir makro yok galiba.
delay.h diye bir kütüphane yok. delays.h var onda da tanımlı bir şey göremedim. İşe de yaramadı zaten.
Help dosyasında xc8 için görünmüyor.
XC8 ile hemen her şey programcının sırtında mı yoksa? Herkes kendi kütüphanesini mi yazacak. "otursun yazsın makro nesine" mi demişler.
Ya da siz yorumlarmısınız.
Yazdıklarımı "giriş seviyesinden" değerlendirirseniz memnun olurum.
Güce ve Geleceğe Güvenle...

fryrmnd

ben işlemciyi sadece project oluştururken seçtim ve sadece "xc.h" dosyasını include ettim. mplabx 1.3, xc8 1.01. isterseniz tekrar kurulum yapın.
delay kütüphanesi 16F serisi için bildiğim benim de yok. hitech in delay kütüphanelerini kullanabilirsin. pek iyi değil diyorlar ama. 18F serisi için C18 in kütüphaneleri kullanılıyor bildiğim. 16F serisi için ya netten bulucaksınız yada kendiniz yazıcaksınız.

a_a_sezen

En yukarıdaki kodu kopyala yapıştır yapıp denemiştim.
PORTAbits tanımınıda çözemedim uyarısı verince yazdım.
1.30 versiyonu indirip öncekini kaldırıp kurunca şimdi sadece DelayMs kaldı tanımsız olarak.
İşin başında MicroC kullandığım Ansi C string fonksiyonlarında saçmalayınca (strcmp, strtok) güvenli bir derleyiciye alışayım alışmışken diye düşünmüştüm.
Güce ve Geleceğe Güvenle...

fryrmnd

Delay ms için

delay.h
/*
 *	Delay functions for HI-TECH C on the PIC
 *
 *	Functions available:
 *		DelayUs(x)	Delay specified number of microseconds
 *		DelayMs(x)	Delay specified number of milliseconds
 *
 *	Note that there are range limits: x must not exceed 255 - for xtal
 *	frequencies > 12MHz the range for DelayUs is even smaller.
 *	To use DelayUs it is only necessary to include this file; to use
 *	DelayMs you must include delay.c in your project.
 *
 */

/*	Set the crystal frequency in the CPP predefined symbols list in
	HPDPIC, or on the PICC commmand line, e.g.
	picc -DXTAL_FREQ=4MHZ
	
	or
	picc -DXTAL_FREQ=100KHZ
	
	Note that this is the crystal frequency, the CPU clock is
	divided by 4.

 *	MAKE SURE this code is compiled with full optimization!!!
	
 */

#ifndef	XTAL_FREQ
#define	XTAL_FREQ	4MHZ		/* Crystal frequency in MHz */
#endif

#define	MHZ	*1000L			/* number of kHz in a MHz */
#define	KHZ	*1			/* number of kHz in a kHz */

#if	XTAL_FREQ >= 12MHZ

#define	DelayUs(x)	{ unsigned char _dcnt; \
			  _dcnt = (x)*((XTAL_FREQ)/(12MHZ)); \
			  while(--_dcnt != 0) \
				  continue; }
#else

#define	DelayUs(x)	{ unsigned char _dcnt; \
			  _dcnt = (x)/((12MHZ)/(XTAL_FREQ))|1; \
			  while(--_dcnt != 0) \
				  continue; }
#endif

extern void DelayMs(unsigned char);


delay.c
/*
 *	Delay functions
 *	See delay.h for details
 *
 *	Make sure this code is compiled with full optimization!!!
 */

#include	"delay.h"

void
DelayMs(unsigned char cnt)
{
#if	XTAL_FREQ <= 2MHZ
	do {
		DelayUs(996);
	} while(--cnt);
#endif

#if    XTAL_FREQ > 2MHZ	
	unsigned char	i;
	do {
		i = 4;
		do {
			DelayUs(250);
		} while(--i);
	} while(--cnt);
#endif
}


dosyalarını kullanın.

Tagli

MPLAB X'i vd XC derleyicilerini tam oturtamadılar henüz. Çeşitli sorunlar çıkabiliyor. Oturması biraz zaman alacaktır, sabretmek lazım.
Gökçe Tağlıoğlu