Hi-Tech gecikme sorunu /Düzeldi.(Mplab ile)

Başlatan NaMcHo, 09 Ağustos 2010, 14:28:53

NaMcHo

for(y=0;y<8;y++)
		{
			PORTB=led;
			DelayMs(50);
			led=led<<1;
		}

Burda 8 tane ledi yakıp sondurcek her biri arası 50 ms olması lazım normalde ama 8. lede gelmesi 1.75 sn suruyo normalde
8.50=400 milisaniye oda 0.4 saniye olmalı,sorunu nasıl halledebilirim?

sigmoid

delay.h dosyasını açıp

#define   XTAL_FREQ  ifadesine kullandığın kristal frekansını girmen gerekiyor. normalde burada yazan ifade senin kristal frekansından daha büyük olduğu için geçikme normalden daha uzun sürüyor.

kolay gelsin.

NaMcHo

#2
Alıntı yapılan: abdullaho - 09 Ağustos 2010, 15:10:56
delay.h dosyasını açıp

#define   XTAL_FREQ  ifadesine kullandığın kristal frekansını girmen gerekiyor. normalde burada yazan ifade senin kristal frekansından daha büyük olduğu için geçikme normalden daha uzun sürüyor.

kolay gelsin.

Isis,hex,C  dosyaları : http://hotfile.com/dl/60941472/f539f3f/Dnm1.rar.html

delay.h daki kod:
/*
 *	Delay functions for HI-TECH C on the PIC18
 *
 *	Functions available:
 *		DelayUs(x)	Delay specified number of microseconds
 *		DelayMs(x)	Delay specified number of milliseconds
 *
 *	Note that there are range limits: 
 *	- on small values of x (i.e. x<10), the delay becomes less
 *	accurate. DelayUs is accurate with xtal frequencies in the
 * 	range of 4-16MHZ, where x must not exceed 255. 
 *	For xtal frequencies > 16MHz the valid range for DelayUs
 *	is even smaller - hence affecting DelayMs.
 *	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
 *	on the PICC-18 commmand line, e.g.
 *	picc18 -DXTAL_FREQ=4MHZ
 *
 *	or
 *	picc18 -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!!!
*/

#define	MHZ	*1

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

#if	XTAL_FREQ < 8MHZ
#define	uS_CNT 	238			/* 4x to make 1 mSec */
#endif

#if	XTAL_FREQ == 8MHZ
#define uS_CNT  244
#endif

#if	XTAL_FREQ > 8MHZ
#define uS_CNT  246
#endif

#define FREQ_MULT	(XTAL_FREQ)/(4MHZ)

#define	DelayUs(x)	{ unsigned char _dcnt; \
			  if(x>=4) _dcnt=(x*(FREQ_MULT)/2); \
			  else _dcnt=1; \
			  while(--_dcnt > 0) \
				{\
				asm("nop");\
				asm("nop");\
				continue; }\
		} 

extern void DelayMs(unsigned char);


*   Delay functions for HI-TECH C on the PIC18 Su en üstteki yazı dikkatimi cekti 18 serisi icin olan delay.h dosyasımı bu aceba?

Birde bende 16f serisi icin su kısım var : C:\Program Files (x86)\HI-TECH Software\PICC\9.70\samples\delay
Burda ise main diye bi C source file var ne yapmam gerekiyor bu delay olayını duzeltmek icin?

Bir şey daha sormak istiyorum Protues Isis de denerken Debug özelligi calısmıyo ekran goruntusu ekliyorum kodları goremiyorum.
http://hotfile.com/dl/60940809/0757b0c/Adsz.jpg.html

JKramer

.cof uzantılı dosyayı ekliyorsunuz değil mi? Bir de kaynak kod, .cof, isis dosyaları,vs. hepsi aynı klasörde mi?

NaMcHo

Alıntı yapılan: JKramer - 09 Ağustos 2010, 15:55:12
.cof uzantılı dosyayı ekliyorsunuz değil mi? Bir de kaynak kod, .cof, isis dosyaları,vs. hepsi aynı klasörde mi?

Evet 2 tane dosya var : DNM1.cof ve DNM1.hex diye  cof olanı atıyorum Isis e ama debug calısmıyo CCS de bole sorunlar yasamıyodum... :)

JKramer


NaMcHo

#6
Alıntı yapılan: JKramer - 09 Ağustos 2010, 16:05:15
Muhtemelen klasörle ilgili bir sorundur: https://www.picproje.org/index.php/topic,28759.msg196347.html#msg196347
50cal Kullanıcısının dedigini yaptım,derleme sonucudan olusan tum dosyaları bi dosyada birlestirip debug ı acmayı denedim bu seferde sanırım assmebly kod tarzında birseyler cıktı ... benim yazdıgım kodlarla alakası olmayan seyler.



Bu arada gecikme olayınıda halen düzeltemedim
:-\


NaMcHo

#8
Alıntı yapılan: JKramer - 09 Ağustos 2010, 16:41:39
[IMG]http://img833.imageshack.us/img833/4351/clipboard2.th.png[/img]
Evet düzeldi :)
Teşekkür ettim.


-ilk sorum olan,gecikme olayını halen düzeltebilmiş değilim.

NaMcHo

#9
HI-TECH PICC STD Sanırım bana bu lazım,  Bunun icin söyle bi link buldum fakat download edemedim burdan : http://www.pickled-onion.com/download/93373/hi%20tech_picc_std_9%206.html


Bende sunlar var :         
HI-TECH PICC PRO 9.70  HI-TECH PIC18-pro-9.64.5502       
HI-TECH for dsPIC-PIC24 v9.60.3.4951                                            
HCPIC32-pro-9.60PL1.3453_release_candidate                              
HCPSOC-pro-9.61PL5.3451_release_candidate         
HI-TECH ARM-C v9.12 + HI-TIDE_2.12PL3       
HI-TECH C for 8051 9.01 + HI-TIDE_2.13         
HI-TECH MSP430-C         
HI-TECH for HOLTEK C         
HI-TECH Z80 7.80PL2 C Compiler         
HI-TECH for XA v7.73PL1   


Ayrıca bidaha belirteyim benim Hi-Tech Software klasörü altında olan dosyaları :
-DSPICC , HI-TIDE , PICC , PICC-18 , PICC32

Burdaki lerde sadece PICC-18 icersindeki : C:\Program Files (x86)\HI-TECH Software\PICC-18\PRO\9.64\samples\std\delay    delay klasöründe 2 tane dosya var delay.h ve delay.c

C:\Program Files (x86)\HI-TECH Software\PICC\9.70\samples\delay           Burda 1 tane main C Source file var.
C:\Program Files (x86)\HI-TECH Software\DSPICC\STD\9.60\samples\delay        Burda ise 1 tane delay C source file var.
C:\Program Files (x86)\HI-TECH Software\PICC32\PRO\9.60\samples\plibs         Burda ise plibs klasörü altında bir sürü C Source file var.

Ben suan PICC-18 altındaki delay h ve c dosyalarını kullanıyorum ancak 4 sn de bitmesi gereken bir iş 20 sn de bitiyor.(Isis de yapmış oldugum ölcüm.)
Sorunu düzeltmem için ne yapmalıyım denemediğim kombinasyon kalmadı :)

Ayrıca Pic C Pro 9.71a yı yuklememe rağmen Yeni proje oluşturduğumda şu seçenekler geliyor :

-HI-TECH C PRO for the PIC32(v9.60PL2)
-HI-TECH C for dsPIC/PIC24 (9_60PL3)
-HI-TECH C PRO for PIC10/12/16 MCU (9.70)

fatihinanc

Eğer dahili osilatör kullanıyorsanız. PIC in dahili osilatörü default olarak 4MHz den daha düşük bir değere ayarlanmış olabilir(2MHz,1MHz,31KHz).

OSCCON kaydedicisi ile bu ayarlanabiliyor.

Kainat dediğimiz kitap, yazıldığı dil ve harfler öğrenilmedikçe anlaşılamaz.  (Galileo Galilei)

NaMcHo

#11
@fatihinanc
Harici kullanıyorum. OSC1CLKIN ve OSC2CLKOUT a baglıyorum osilatörümü 4MHz lik ve kondansatörlerde 22pF'lık.

Dediğiniz gibi dahili kullanıcaksamda şöyle bir komut yazmam gerekiyor değilmi ayarı yapmak icin
4Mhz icin OSCCON=0b01100000;
Birde dahili osilatör kullanıp 4Mhz olarak ayarlamakla Harici kullanıp 4Mhz kullanmak arasında fark varmı?

fatihinanc

Dahili osilatörün hassas zamanlama uygulamalarda tercih edilmemesi gerektiğini duymuştum.
Harici 4Mhz daha sağlıklı oluyor yani.
Ama normal zamanlama gerektirmeyen uygulamalarda gözle görülür bir fark yok.

Evet OSCCON kaydedicisini öyle ayarlayacağınız gibi Hi-Tech de ilgili kaydedicinin bitlerine verilen isimleri kullanarak da bu işleri yapabilirsiniz. Mesela ;

IRCF2=1;
IRCF1=1;
IRCF0=0; //Zaten default olarak 0 dır.


Bu arada kullandığınız mikrodenetleyici nedir?
Kainat dediğimiz kitap, yazıldığı dil ve harfler öğrenilmedikçe anlaşılamaz.  (Galileo Galilei)

NaMcHo

Alıntı yapılan: fatihinanc - 11 Ağustos 2010, 00:12:57
Dahili osilatörün hassas zamanlama uygulamalarda tercih edilmemesi gerektiğini duymuştum.
Harici 4Mhz daha sağlıklı oluyor yani.
Ama normal zamanlama gerektirmeyen uygulamalarda gözle görülür bir fark yok.

Evet OSCCON kaydedicisini öyle ayarlayacağınız gibi Hi-Tech de ilgili kaydedicinin bitlerine verilen isimleri kullanarak da bu işleri yapabilirsiniz. Mesela ;

IRCF2=1;
IRCF1=1;
IRCF0=0; //Zaten default olarak 0 dır.


Bu arada kullandığınız mikrodenetleyici nedir?

16f877 ile yapıyorum pratik aşamasındayım henüz,
Benim sorun ise ilk bastata belirttiğim gibi 4sn de olması gereken işlem 20 sn de oluyor.
DelayMs(1000); yazıyorum ama 4 sn oluyor bu gecikme.
Suanda C:\Program Files (x86)\HI-TECH Software\PICC-18\PRO\9.64\samples\std\delay  burdaki delay fonksiyonlarını kullanıyorum,cunki baska bi yerde delay C Source File ve Header dosyası hic bi yerde yok
sadece bazılarında C source file var
mesela benim 16f877 ile calıstıgım icin surdaki C:\Program Files (x86)\HI-TECH Software\PICC\9.70\samples\delay  delay header ve C dosyalarını almam gerekiyor ama burda sadece bir tane main dosyası var icinde ise su var
#include <htc.h>   // Required to interface with delay routines

#ifndef _XTAL_FREQ
 // Unless already defined assume 4MHz system frequency
 // This definition is required to calibrate __delay_us() and __delay_ms()
 #define _XTAL_FREQ 4000000
#endif

/** demonstration of various built-in delay mechanisms */
void main(void){
   while(1){
      NOP();
      _delay(1000);      // delay for 1000 instruction cycles
      CLRWDT();
      __delay_us(400);   // delay for 400 microseconds
      CLRWDT();
      __delay_ms(2);      // delay for 2 milliseconds
      CLRWDT();
   }
}


Bunu ekleyipdede calıstırmayı denemistim ama derlemede hata veriyordu.
Bende eksik dosyalar var sanırım 16 serisi icin delay dosyalarım yok.

fatihinanc

bir de şunu dene ;
main.h dosyanız bu olsun.

#include <htc.h>

#ifndef _XTAL_FREQ
 // Unless already defined assume 4MHz system frequency
 // This definition is required to calibrate __delay_us() and __delay_ms()
 #define _XTAL_FREQ 4000000
#endif

void main()
{
TRISB=0X00;
PORTB=0X00;
ADCON1=0X07;
while(1)
{
__delay_ms(250);
RB0=~RB0;
__delay_ms(250);
}
}

Kainat dediğimiz kitap, yazıldığı dil ve harfler öğrenilmedikçe anlaşılamaz.  (Galileo Galilei)