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?
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
}
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"
#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.
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ç.
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
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.
kullandıgın XC8 versiyonu nedir 1,0,0 ise 1,0,1 e yukseltıp denermısın
MPLAB X'in XC plugin'i yüklü mü?
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 (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.
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.
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.
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.
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.
MPLAB X'i vd XC derleyicilerini tam oturtamadılar henüz. Çeşitli sorunlar çıkabiliyor. Oturması biraz zaman alacaktır, sabretmek lazım.
fryrmnd hocam, mahçup oldum. İlginiz için teşekkür ederim.
............
Hocam xc8 in helpinde açıklanan xc.h de şöyle bir kullanım daha varmış.
_delay() ve _delay3()
Ancak fonksiyon prototipini eklemeden çalışmıyor.
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
void _delay(unsigned long cycles);
void _delay3(unsigned char cycles);
int main(int argc, char** argv) {
char i,j,c;
TRISD = 0;
PORTD = 0;
TRISB = 0;
PORTB = 0;
_delay(100);
while(1){
for(i = 128, j = 1; i > 0; i /= 2, j *= 2){
PORTD = i;
PORTB = j;
PORTB = ~PORTB;
for(c = 0; c < 3; c++)
_delay3(100000);
}
}
return (EXIT_SUCCESS);
}
ben pek aramamıştım direk işimi gördüğü için hitech in delay fonksiyonlarını kullandım. çalıştırabildiğinize sevindim.
Buraya örneği kopyaladığımda isis denemesini de yapmıştım.
Kod üzerinde hiç bir şeyi değiştirmediğim halde derlemeye kalktığımda _delay3() için hata vermeye başladı. Satırı iptal ettim _delay() için çalışıyor.
Çok ilginç bir durum. MicroC de benzeri davranışları sıkça sergiliyordu. Kapatıp açınca sorun gideriliyordu. Olur ya.. deyip denedim ama olmadı.
İlerde kodlardan yararlanacak arkadaşlara bilgi olsun diye yazdım.
aynen dediğiniz gibi. tam oturmadığı için hata olmadığını bildiğiniz bir kodda hata veriyor. kapayıp açıp yada yeni projeye kopyalayıp derlediğinizde hata vermiyor. hala sıkıntısı var.
Arkadaşlar 16f628A projesi oluşturup, "Source Files" a main.c dosyası ekliyorum
Dosya içinde aşağıdaki kodlar var.
#include "pic.h"
int main(void) {
return 0;
}
Derlemeye çalışınca
[jstex]BUİLD FAILED (exit value 2, total time: 870ms)[/jstex]
bu hatayı veriyor.
Bir de alakası var mı bilmiyorum ama derleyicilerin seçildiği kısımda
derleyicilerin yanında küçük yeşil yuvarlaklar oluyor ya, XC8'in yanında o çıkmıyor.
Uğraşmadan önce XC8 i yeniden kurup deneyin isterseniz.
Yukarıda yazmıştım ama tekrarlayayım: XC Plugin yüklü olmalı. MPLAB'in son versiyonunda yüklü olarak geliyormuş ama senin elinde daha eski bir versiyon varsa plugin yüklü olmayabilir.
Yok hocam son sürümleri.Yine de kontrol ettim plugini yüklü görünüyor.
Antivirusu kapattım, firewall'ı kapattım.Dosyayı yeniden indirdim.
Admin olarak çalıştırdım.Artık kurulmuyor.
"Licensing Error" veriyor.
Aynen aşağıdaki...
http://www.microchip.com/forums/m671517.aspx (http://www.microchip.com/forums/m671517.aspx)
mesaj birleştirme:: 28 Ağustos 2012, 10:41:03
Sonunda kuruldu ama değişik bir şey yapmadım.
Yaptıysamda farketmedim.Kur-sil kur-sil dün geceden beri
farklı bişey yapmadım.Sonunda çalıştı.
Ama şunu söyleyebilirim; derleyici seçme aşamasında derleyicinin yanındaki
yeşil küçük daire yoksa problem var.Önceden çıkmıyordu.Şimdi çıkıyor ve derledi.
Buna kıyas edersek lek yak söndür örneği bir ay sürer herhalde >:(
Arkadaşlar bütün problem Comodo Firewall'dan kaynaklanıyordu herhalde..
Silince hiç bir problem kalmadı.
Bir sorum var.Pro versiyonda %40 daha küçük kod oluşur diyor.
Bu durum sadece daha çok kod yazılabilinmesi ile mi ilgili,
yoksa programın performansı da artıyor mu?
XC8 ile 16F demo kodunu derliyorum. Bu kodların hex e dönüşmeden önceki nihai halini ifade eden dosya nedir acaba? asm olarak veya buna en yakın halini bulabilir miyim?
IDE icinde disassembly listing gosteren bi yer var, C kodlarinin hangi asm kodlarina donustugunu gosteriyor. Bu bilginin ayri bir dosya olarak da saklandigini saniyorum ama nerede oldugunu bilmiyorum, merak edip bakmadim hic, hep IDE icinden eristim.
Tamam bunu gördüm. acaba bu asm kodu alsak assembler ile derlesek olur mu? Daha sonra asm bazında rütüş yapmak veya Proton derleyicisinde oluşturduğum asm koddan buna ekleme yapmak istiyorum. veya tersi de olabilir. bundan alıp onun asm koduna yapıştırmak asm olarak derlemek. deneme yapsam iyi olacak.
Sanırım olur. Ancak farklı derleyiciler tarafından derlenmiş kodları birleştirmek sıkıntı yaratır. Hatta XC8'i derlediği iki farklı programın asm kodlarını bile birbirine karıştırmak doğru değil. Derleyiciler yaptıkları neredeyse tüm işlemler için, dahili durumlarını ve bazı diğer değişkenleri sakladıkları yazılımsal bir yığın kullanıyorlar. İki farklı asm kodunu birleştirmeye çalışırsan bu yığınları bütünlüğünü bozarsın büyük ihtimalle.
Konuyu hortlatıyorum biraz ama.Başlık uygun olduğu için bu konunun altına yazmak istedim.
Bendeki ilaçlı XC8 de derleyici çıktıları mesela hex dosyası "projeismi.X.production.hex" tarzında oluyor.Arada bir nokta daha olmasını kaldıramayan proteus da bunu kabul etmiyor.Nette araştırınca da bununla alakalı birşey bulamadım.
yardımlarınızı bekliyorum.
Alıntı yapılan: metaltrrocker - 02 Ağustos 2013, 05:58:22
Konuyu hortlatıyorum biraz ama.Başlık uygun olduğu için bu konunun altına yazmak istedim.
Bendeki ilaçlı XC8 de derleyici çıktıları mesela hex dosyası "projeismi.X.production.hex" tarzında oluyor.Arada bir nokta daha olmasını kaldıramayan proteus da bunu kabul etmiyor.Nette araştırınca da bununla alakalı birşey bulamadım.
yardımlarınızı bekliyorum.
Project Properties -> Building altında ImageName olarak tanımlı gördüm ancak düzenleme seçeneği sunmamış...
Proteus versiyonundan kaynaklı bir sorun olabilir çünkü ben sorusuz kullanıyorum.
Proteus 7.1 sp0 vardı.Sildim proteus 7.7 sp2 yükleyecektim ki yalnışlıkla portable indirmişim.denedim bu sürümde sorun çıkmıyor.Kurulumlu versiyonunu indirip deneyecem.Teşekkür ederim
bende proteus 7.10 var wdt ve 18flerdeki simultane adc düzgün çalışmıyor(gerçekte denedim hiç sıkıntı yok)
Şimdi printf komutundan hiç cevap alamıyorum.Kendim ayar yapıp txrege yükleyince sıkıntı yok ama printf ile birşey yazınca hiçbirşey yollamıyor hatada vermiyor(stdlib.h yüklü)
Benim sorunumla ilgili olarak, proteus 7.7 sp2 yi yükledim simulasyon sorunsuz çalıştı.Neden biranda sapıttı onu anlamış değilim.Teşekkür ederim yardımlar için.
Alıntı yapılan: skara1214 - 03 Ağustos 2013, 23:50:07
Şimdi printf komutundan hiç cevap alamıyorum.Kendim ayar yapıp txrege yükleyince sıkıntı yok ama printf ile birşey yazınca hiçbirşey yollamıyor hatada vermiyor(stdlib.h yüklü)
Her hangi biryerde yada main programda putc fonksiyonu tanımla.
nasıl yani? örnek satır verebilirmisiniz
void putch(char x){
while(!TRMT);
TXREG = x;
}
unsigned char getch(){
/* retrieve one byte */
while(!RCIF) /* set when register is not empty */
continue;
return RCREG;
}
bunda sıkıntı yok ben printf komutunu arıyorum mesela 16 bitlik bir sayı nasıl yollanır? printf("sss %lu",x); böyle kullanım için
Alıntı yapılan: skara1214 - 04 Ağustos 2013, 01:41:58
bunda sıkıntı yok ben printf komutunu arıyorum mesela 16 bitlik bir sayı nasıl yollanır? printf("sss %lu",x); böyle kullanım için
printf fonksiyonu putch'ye çağrı yapar putch tanımlayın printf ile kullanın :)
ok sağolun
XC8 de ilk programi yazmak uzere kollari sivadim. Bir an once kodu yazip kurtulmak istiyorum.
Bunun icin 16F628A icin interrupt kullanan basit bir programinizi sablon olarak kullanip uzerinden devam etmek istiyorum.
Boyle bir sablon verebilirmisiniz?
Elimde 16F887 icin olan bir kod var sadece. Henuz tamamlanmamis (ve yarim haliyle dsPIC30F'e gecirip oradan devam edecegim) bir BLDC surucu kodunun ana .c dosyasi. Belki fikir verir.
/*
* File: bldcMain.c
* Author: tagli
*
* Created on July 3, 2013, 5:26 PM
*/
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "utils.h"
#include "lcd.h"
#include "lcdMsgs.h"
#include "params.h"
#include "usart.h"
#include "status.h"
#include "protocol.h"
#include "cmd.h"
//Configuration Bits
#pragma config CPD = OFF
#pragma config BOREN = OFF
#pragma config IESO = OFF
#pragma config FOSC = HS
#pragma config FCMEN = OFF
#pragma config MCLRE = ON
#pragma config WDTE = OFF
#pragma config CP = OFF
#pragma config LVP = OFF
#pragma config PWRTE = ON
#pragma config CP = OFF
#define LCD_ENABLED
//Other Constants
const float RPM_RANGE = 4000.0;
//Allien Functions
char getCW(char hall);
char getCCW(char hall);
//Local Function Prototypes
void initialize(void);
void initPWM(void);
void interrupt isr(void);
//Variables
//None yet...
void interrupt isr(void){
if (RBIE == 1 && RBIF == 1){
char hall = updateHall();
if (s.direction == 0) PORTA = getCW(hall);
else if (s.direction == 1) PORTA = getCCW(hall);
RBIF = 0;
}
else if (TMR1IE == 1 && TMR1IF == 1){
++sysTick;
TMR1IF = 0;
}
else if (TXIE == 1 && TXIF == 1) txInt();
else if (RCIE == 1 && RCIF == 1) rxInt();
}
int main(void) {
initialize();
printGreatings();
lcdClear();
p.ki_s = 0.0005;
float duty = 0.0;
//Main Loop
while(1){
updateStatus();
if (proReceive() == 1){
processCommands(inProBuf);
}
//Calculating the reference (to be moved into updateStatus)
int pot = readADC(7);
float ref = (pot - 512) * (RPM_RANGE / 512.0);
ref = fabs(ref);
float err = ref - abs(s.spdNow);
duty += err * p.ki_s * s.dt;
duty = limit(duty, 0, 0.90);
#ifdef LCD_ENABLED
//LCD Update
lcdClear();
printRef((int)ref);
printRpm(s.spdNow);
printPwm((int)(duty*100));
printErr();
#endif
//PWM Update
setDuty(duty);
delayMs(100);
}
panic();
return (EXIT_SUCCESS);
}
void initialize(void){
//Pin Settings
PORTA = 0;
PORTB = 0;
PORTC = 0;
PORTD = 0;
PORTE = 0;
TRISA = 0b11000000;
TRISB = 0b11111111;
TRISC = 0b11001000;
TRISD = 0b00000111;
TRISE = 0b11111111;
//ADC Settings
ANSEL = 0b10000000; //RE2 -> Analog input
ANSELH = 0;
ADCON0 = 0b10011101;
ADCON1 = 0b10000000;
//PWM Settings
T2CON = 0b00000101; //TMR2 on, prescaler 1:4
PR2 = (PWM_PERIOD - 1);
CCP2CON = 0b00001100;
setDuty(0.0);
//Timer1 Initialization
TMR1H = 0;
TMR1L = 0;
T1CON = 0b00110101; //Prescaler -> 1:8
//USART initialization
usartInit(B115200);
//Variable initializations
sysTick = 0;
phaseCounter = 0;
//Module Initializations
initStatus();
initParameters();
#ifdef LCD_ENABLED
lcdInit();
lcdHome();
#endif
//Interrupt Settings
IOCB = 0b00010101;
INTCON = 0b11001000; //PORTB int. is enabled
TMR1IF = 0;
TMR1IE = 1; //Timer1 interrupt is enabled
//Initilization Done Signal
DEBUG_LED = 1;
delayMs(50);
DEBUG_LED = 0;
delayMs(50);
}
Yeni bir proje olustur demistim ve kullanacagim cip olarak da 16F628A yi secmistim.
Bu durumda senin programina daha baska bir sey ilave etmeme gerek kalacakmi?
Dogrudan register isimleri ile donanima erismeyi dusunuyorum. Bunun icin 16F628 ile ayri bir tanim (include vs) yapmam gerekecekmi?
Hayir. MPLABX projede secilen modele gore bir #define olusturuyor kendi icinde sanirim. xc.h, bu tanimlamaya gore ilgili header dosyasini include ediyor. Bu sebeple sadece xc.h'in include edilmesi yeterli. Ancak yanlis hatirlamiyorsam bunun tum diger .c dosyalarinda da (veya baska header dosyalari uzerinden dolayli olarak) yapilmasi tavsiye ediliyordu.
Bu arada, stdlib ve stdio'ya gerek olmayabilir. Kendi genel template'i ile gelmislerdi bende belki ise yararlar diye silmemistim galiba. Ancak hazir genel template'deki main'in argumanlarini silersen birkac byte kazanabilirsin. Donusunu void yapmak da 1 byte kazandirabilir belki, her nedense onu yapmamisim.
16F628'i 16 Mhz Kristal ile calistiracagim. Reset pini lazim oldugu icin Input pini olarak kullanacagim.
Watch Dog'a ihtiyacim yok. Brown Out dedektorle de isim olmayacak.
Kod koruma da istemiyorum.
Bu sartlarda asagidaki ayarlamalar dogrumudur?
Brenner programlayici bu ayarlamalari uretilen hex Koddan ogrenebiliyormu? Daha onceleri aklimda kaldigi kadariyla konfig ayarlarini haricten Brenner'e ayrica tanimliyordum.
MPLAB + XC8 ile Brenner entegrelestirilebiliyormu?
#pragma config CPD = OFF
#pragma config BOREN = OFF
#pragma config FOSC = HS
#pragma config MCLRE = OFF
#pragma config WDTE = OFF
#pragma config CP = OFF
#pragma config LVP = OFF
#pragma config PWRTE = ON
#pragma config CP = OFF
programi derledikten sonra Programlayiciya dosya yolunu asagidaki sekilde veriyorum.
Proje klasoru\Dist\Default\Production\Projedosyam.hex
Dogru dosyayimi aliyorum.
Config from hex file seçerseniz usburn bu ayarlamaları yapmanızı sağlar. Seçmezseniz kodlamanızdaki ayarları değiştirmez sizde değiştiremezsiniz. Usburb için basit bir kılavuz hazırlamıştım. Linki;
http://elektroinfo.blogspot.com/2010/03/brenner8-9-usb-programlayici-arayuz.html?m=1 (http://elektroinfo.blogspot.com/2010/03/brenner8-9-usb-programlayici-arayuz.html?m=1)
Kolaygelsin.
@z hocam config bitlerini MPLAB X de bir tool yardımıyla otomatik kod üretimiyle yapabilirsiniz aşağıda ki linkte arkadaş anlatıyor:http://ramazansubasi.net/mplab-x-baslamadan-pratik-bilgiler/ (http://ramazansubasi.net/mplab-x-baslamadan-pratik-bilgiler/)
Tool içerisinde açıklamalarda mevcut.
XP de kullandigim program dnacikayanin sitesindeki ekran gorunumune sahipti ve onda bir sekilde programlama yapabiliyordum.
Simdi MAC icin yeni bir program kullaniyorum. Ekran goruntusu XP dekinden biraz farkli.
(http://bit.ly/c25MCx)
mesaj birleştirme:: 19 Ekim 2013, 23:48:40
Yazdigim deneme programini cipe yukleyip voltajini verip xtal pinlerine scopla bakinca sinyal goremeyince brennerin config ayarlarini dogru yapip yapmadigindan killandim.
Yukarida verdigim ayar kodlari amacima uygun degilmi?
mesaj birleştirme:: 20 Ekim 2013, 00:10:25
Proglamlayiciyi XP PC'ye takip cipi programladim ve cip devre uzerinde calisti.
Demekki ya MAC'de bir seyleri yanlis yapiyorum yada indirdigim MAC programda sorun var.
Zurna = Zurna XOR 1 islemini yapmak icin
Zurna^1=1 dan suphelendim sonra da Zurna=Zurna^1;
komutlarini yazip asm ciktisina baktim.
375 ;main.c: 55: Zurna = Zurna ^ 1;
376 0035 0879 movf _Zurna,w
377 0036 3A01 xorlw 1
378 0037 00F0 movwf ??_isr
379 0038 0870 movf ??_isr,w
380 0039 00F9 movwf _Zurna
Buradaki;
378 0037 00F0 movwf ??_isr
379 0038 0870 movf ??_isr,w
satirlarina neden ihtiyac duymus anlamadim.
Kufredecem de acaba ben mi yanlis dusunuyorum. XC8 de optimizasyon ayari yokmu? Goya 60 gun profosyonel ozelliklerde kullanacaktim. Acaip optimizasyon yapiyor falan diyorlardi tanitim sayfasinda.
Belki de ben PIC asm yi unuttum.
Zurna ^=1;
i=Zurna & 0xF0;
islemine bakin.
375 ;main.c: 55: Zurna = Zurna ^ 1;
376 0035 0879 movf _Zurna,w
377 0036 3A01 xorlw 1
378 0037 00F0 movwf ??_isr
379 0038 0870 movf ??_isr,w
380 0039 00F9 movwf _Zurna
381
382 ;main.c: 57: i=Zurna & 0xF0;
383 003A 0879 movf _Zurna,w
384 003B 39F0 andlw 240
385 003C 00F0 movwf ??_isr
386 003D 0870 movf ??_isr,w
387 003E 00F6 movwf isr@i
Kufredecem. Bu C derleyicisini yazan gerizekali galiba.
Birisi yanlis dusundugumu soylesin.
File->Project Properties->XC8 Global options->XC8 compiler->Option categories->Optimizations
Buraya girdikten sonra en altta Operation mode bulunur burada Free, Standart, PRO bulunur. PRO yu kullanmanız halinde maksimum optimizasyonu alırsınız.
Edit:Proje başlangıcında Free olarak açılıyor bu seçenek haberiniz olsun hocam.
Hemen deneyecegim de bu adamlarin isi asagidaki deyise benziyor o zaman;
Allah fakiri sevindirmek icin once esegini kaybettirirmis sonra da buldururmus.
Eger optimizasyon diye bu fazlaliklari kaldiracaksa bu is esek isine donecek.
Hic optimizasyona kafa yormadan kod uret araya da fazladan kodlar ekle. Bak simdi nasil optimizasyon yapacam diye sonra o fazla kodlari cikart.
Eger bunu yapiyorsa cok ayip.
Derleme islemi sonunda su mesaji veriyor XC8
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 (http://microchip.com) for more information.
23: x^=1;
002D 3001 MOVLW 0x1
002E 06A4 XORWF x, F
24: y=x&0xF0;
002F 0824 MOVF x, W
0030 00A3 MOVWF y
0031 30F0 MOVLW 0xF0
0032 05A3 ANDWF y, F
Hocam optimize halinde bu şekilde oluyor sizin yazdığınız kod.
Operation modu Free den Pro'ya aldim. Speed optimizasyonunu actim ayni kodlari uretti.
Eger bu derleyici bu sekilde kod uretecekse kafamdaki projeyi mumkun degil 16F628 icine yerlestiremem.
Alıntı yapılan: AsHeS - 20 Ekim 2013, 01:18:53
23: x^=1;
002D 3001 MOVLW 0x1
002E 06A4 XORWF x, F
24: y=x&0xF0;
002F 0824 MOVF x, W
0030 00A3 MOVWF y
0031 30F0 MOVLW 0xF0
0032 05A3 ANDWF y, F
Hocam size üretilen kod bu şekilde mi ?
Hayir hala ilk verdigim sekilde uretiliyor.
Bu senin verdigin kod tami tamina esek hikayesine uydu.
Siradan bir asm yazimda bu kod yazilir. Fakat hala optimizasyon yapilacak durumda. 1 satir fazla gorundu gozume ama iddia edemeyecegim PIC'e asm yazmayali belki 10 sene oldu.
Adamlarin bir amaci var ama ne? Araya fazla fazla kod koyup sonra onlari kaldirinca optimizasyon yapiyorlarmis durumu var.
Debug yapmak icin boyle yaptik deseler mevcut degiskenlerle de debug yapilir.
Acaba XC8'in MAC versiyonu mu boyle?
Bir de sen derleyiciyi PRO moddan free moda alsan nasil kod uretecek acaba?
23: x^=1;
003D 3001 MOVLW 0x1
003E 00A5 MOVWF 0x25
003F 0825 MOVF 0x25, W
0040 06A9 XORWF x, F
24: y=x&0xF0;
0041 0829 MOVF x, W
0042 39F0 ANDLW 0xF0
0043 00A5 MOVWF 0x25
0044 0825 MOVF 0x25, W
0045 00AA MOVWF y
Bu da Free Mode üretimi.
Hocam Apply yaptıktan sonra OK tuşuna basın belki sorun ondandır ?
MPLAB X'e HI-TECH C PRO yükleyip deneyin bir.XC8 MAC sistemde belki tam oturmamış olabilir.
Hocam apply da denedim Ok de denedim, programi kapatip actim proje ciktilarini sildim yeniden derledim.
Degisen bir sey yok.
Yarin MPLAP+XC8'i birde PC'ye yukleyeyim ama installation icin gene sizlerden destek almam gerekecek.
Alıntı yapılan: z - 20 Ekim 2013, 01:36:45
Hocam apply da denedim Ok de denedim, programi kapatip actim proje ciktilarini sildim yeniden derledim.
Degisen bir sey yok.
Yarin MPLAP+XC8'i birde PC'ye yukleyeyim ama instalation icin gene sizlerden destek almam gerekecek.
Hocam burada bir arkadaşımız resimlerle anlatmış kurulumu, optimizasyon ayarlarını ve gerekli bazı yapıları
http://ramazansubasi.net/xc8-kurulumu/#.UmMJ8hCbyOo (http://ramazansubasi.net/xc8-kurulumu/#.UmMJ8hCbyOo)
http://ramazansubasi.net/mplab-x-baslamadan-pratik-bilgiler/#.UmMJ9hCbyOo (http://ramazansubasi.net/mplab-x-baslamadan-pratik-bilgiler/#.UmMJ9hCbyOo)
Bu kod en optimize su sekilde yazilir.
;main.c: 55: Zurna = Zurna ^ 1;
movf _Zurna,w
xorlw 1
movwf _Zurna
;main.c: 57: i=Zurna & 0xF0;
andlw 240
movwf isr@i
Hatali dusunmuyorsam 5 satirda biter is.
Hocam hatta kürek lazımsa şu işinizi görür.
Alıntı yapılan: files - 02 Ağustos 2013, 02:41:50
sonsivrideki ekli dosyanın içeriği;
Fix for MPLAB® XC v1.10 Compilers
=================================
Windows, Linux & Mac OS X
August 13, 2012 Updated for v1.10 compilers.
August 14, 2012 MPLAB XC32 C++ license activated.
http://filesmelt.com/dl/MXCF11011.7z
http://mir.cr/0XGTYNWW
http://www.multiupload.com/Y7RGAZP2C2
Password: sonsivri
XC8'in asm ciktisinda bana da cok gereksiz satirlar var gibi gelmisti. Ozellikle arka arkaya gelen 3-4 tane goto komutu surekli tekrarlaniyor. Benzer yapilar goto tablosu icin kullanilir normalde ama bu komutlarin ustunde PC'yi degistiren bir komut da gozukmuyor, bu durumda birkac tanesi cop gibi.
z'nin de dedigi gibi, sanki ucretsiz versiyonda kodu sisirmek icin araya rasgele gereksiz kodlar atiyor gibi.
Ama z'nin verdigi ornekteki fazladan birkac tasima isleminde art niyet olmayabilir. Derleyici tasarimi konusunda pek bilgili degilim ama bildigim kadariyla derleyiciler her islemin sonucunu bir yerlerde (muhtemelen stack'ta) saklamak ister, belki sonradan kullanilir diye. Optimizasyonlar acik olmayinca, daha sonradan kullanilmadigini da farketmedigi icin o kisimlari silmiyor tahminimce.
Tek basina yazilan ++i; ve i++; satirlari arasindaki farki duymussunuzdur belki. Optimizasyon yapilmazsa, ++i; ifadesinin daha iyi oldugu soylenir. Cunku i++; ifadesinde i'nin eski degeri isleme girecegi icin oncelikle o bir yerde saklanir, daha sonda i arttirilir. Elbette ki tek basina kullanildigi zaman i'nin eski degeri kullanilmadigi icin bu eskiyi saklama isi gereksiz bir yuk oluyor. Optimizasyon bu gibi durumlari farkedip siliyor.
Belki XC8'de de buna benzer bir durum vardir. Gunahini aliyor olabiliriz yani.
Aynı işlemi ccs de test edeyim dedim
char i,zurna;
zurna^=1;
i=Zurna & 0xF0;
çıkan asm:
0026: MOVLW 01
0027: XORWF 22,F
.................... i=Zurna & 0xF0;
0028: MOVF 22,W
0029: ANDLW F0
002A: MOVWF 21
002B: GOTO 026
XC8 daha bebek. Biraz daha buyumesi lazim.
Benzer tartismalar microchipn sitesinde de yapiliyormus.
http://www.microchip.com/forums/m707047.aspx (http://www.microchip.com/forums/m707047.aspx)
Maksimum optimizasyonu ayarlayınca XC8 canavar gibi oldu.
Bedava modu çok pis uzun kod üretir işe yaramaz. mutlaka optimizasyonlu kullanılmalıdır.
Sorun bundan kaynaklanıyor olsa gerek. Belki de bilmeden sallamışlar.
Tesekkurler z. O fazlalik goto'lardan nasil kurtulacagimi ogrenmis oldum.