Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

HI-TECH ÇALIŞMA 2

Başlatan F493, 15 Aralık 2007, 12:27:45

F493

//////////////////////////////F493///////////////////////////////
//14-aralık-2007 02:30
//4 ADET SEVEN SEGMENT DİSP. KONTROL UYGULAMASI 0-9999 SAYICI
//uygulama kartı TEKOPIC V2.2
//yararlanılan kaynaklar:ileri pic 16f84 uygulamaları 1 asm örnekleri altaş yayınları
// bu uygulama disp tarama örnegi,kesme kullanımı,makro kullanım avantajları,pointer kullanımı
//en önemlisi kesme alt programındayken,uzun olan işlemleri dışarıdai fonksiyonlara paslamak
//bu şekilde yaparsak kesme alt prog.meşgul etmemiş oluruz.çünkü bu sırada başka kesme gelebilir
/////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
#include<htc.h>//18f452
#include<string.h>
#include<stdio.h>
#include<math.h>
#include"delay.h"
///////////////////////////////////////////////////////

__CONFIG(1, XT);
__CONFIG(2, BORDIS & PWRTEN & WDTDIS);
__CONFIG(4, LVPDIS & STVREN);
__CONFIG(5, UNPROTECT);
__CONFIG(6, WRTEN);
__CONFIG(7, TRU);


//////////////////////////////////////////////////////////
//MAROLAR
#define _MS_TARAMA_SURESI();   DelayMs(200);
#define _US_TARAMA_SURESI();   DelayUs(100);

/////////////////////////////////////////////////////////////
//FONKSİYON PROTOTİP BİLDİRİMLERİ
void DSP_INIT(void);
void Startup(void);
void DispTara(void);
/////////////////////////////////////////////////////////////
//GLOBAL TANIMLAMLAR
static const char Data[]= {~0x3f,~0x06,~0x5b,~0X4F,~0X66,~0X6D,~0X7D,~0X07,~0X7F,~0X6F,'\0'};
static  const char  *p,*p1,*p2,*p3;
unsigned char sec;
////////////////////////////////////////////////////////////
void main(void)
{	
	Startup();	
	while(1){
	DispTara();
	}
}
///////////////////////////////////////////////////////////////////////
///BU FONK : :DSPLAYde DIJITLERE YERLEŞTIRILECEK RAKAMLARI  AYARLAR
void DSP_INIT(void)
{	
	if(*p == '\0'){				
		p=Data;	
		*p1++;			
		if (*p1 == '\0'){	
				p1=Data;
				*p2++;
			if(*p2== '\0'){		
					p2=Data;		
					*p3++;
				if(*p3== '\0'){	
						p3 = Data;	
						p=Data;
				}
			}
		}		
	}
}
///////////////////////////////////////////////////////////////////////
////////KESME ALT PROGRAMI
void interrupt ISR(void)
{
	static char Counter;
	
	if(TMR0IE && T0IF){
		if(Counter++ == 15){
				Counter=0;
		//if(sec++ == 60){
		//		sec=0;
			 	*p++;
				}
		else 
				DSP_INIT();
		}
	TMR0IF=0;	
	}
///////////////////////////////////////////////////////////////////////
///İŞLEMCİ PORT AYARLARI VE TIMER AYARLARI
void Startup(void)
{
	PORTD = 0XFF;
	 TRISD = 0X00;
	  PORTA = 0XFF;
    	TRISA = 0X00;
	      ADCON1 = 0X07;
        	PORTA = 0XFF;//tüm dijitler kapalı

	///////////////////////////
	// TMR0 Setup
	T0CON = 0b10011111;		// TMR0 on, timer mode, 1:1, 16-bit
	INTCON = 0b10100000;	// GIE = 1, TMR0IE = 1;
	
	p = Data;	//dijitlerde görüntülenecek sayılar için dizinin başlangıç adresleri
	p1=Data;	//pointerlara atanıyor
	p2=Data;
	p3=Data;
}
//////////////////////////////////////////////////////
////DISPLAYI TARAYARAK SAYILARI EKRANDA GÖSTERIYORUZ:
void DispTara(void)
{
	while(1){
		RA0 = 0;		
		PORTD = *p3;
		_US_TARAMA_SURESI();
		RA0 = 1;
///////////////////////////
		RA1 = 0;
		PORTD = *p2;
		_US_TARAMA_SURESI();
		RA1 = 1;
///////////////////////////
		RA2 = 0;
		PORTD = *p1;
		_US_TARAMA_SURESI();
		RA2 = 1;
///////////////////////////		
		RA3 = 0;
		PORTD = *p;
		_US_TARAMA_SURESI();
		RA3 = 1;
	}
}
///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////

delay.c ve delay.h önceki günlerde eklemiştim oradan bulabilirsiniz.

başlıgı da HI-TECH  ÇALIŞMA 2 olarak koydum ,bir sıra izlemek dogru olur diye düşündüm ,konu konu olarak toparlanmış olur ...
soru ve youmlarınızı bekliyorum.

iyi çalışmalar

arslan74

Merhaba,

Cok karışık ve anlaşılması zor kodlar yaziyorsun. Bu işlemi için pointerle ihtiyac duymadan cok daha basit bir şekildde yapabilirsin.

Kendi kaatimce verimsiz kod. Display işlemini main işlemi altında yapmanız bence tarasım hatası.

Nedenine gelice, Main 'de sadece display yapılacaksa sorun olmaz. Ama Main içinde yapılan işlemler cok uzunsa bu sefer tarama hızını etkilecek, program kapasitesi şiştikce tarama hızı düşecek, Bu bariz bir şekilde belli olmaya başlayacak ve ekrandaki titremede gitgide artacak.

Selamlar

F493

Alıntı yapılan: "arslan74"Merhaba,

Cok karışık ve anlaşılması zor kodlar yaziyorsun. Bu işlemi için pointerle ihtiyac duymadan cok daha basit bir şekildde yapabilirsin.

Kendi kaatimce verimsiz kod. Display işlemini main işlemi altında yapmanız bence tarasım hatası.

Nedenine gelice, Main 'de sadece display yapılacaksa sorun olmaz. Ama Main içinde yapılan işlemler cok uzunsa bu sefer tarama hızını etkilecek, program kapasitesi şiştikce tarama hızı düşecek, Bu bariz bir şekilde belli olmaya başlayacak ve ekrandaki titremede gitgide artacak.

Selamlar


ama bu daha ikinci yayınladıgım kod  . :(

Kendi kaatimce verimsiz kod.::: demişsin  :cry:

bunu main içinde yapmamın nedeni ise bazen hi-tec in kesme içerisnden çagırılan fonkların da tutarsız davrandıgı ancak main içinde yapmıyo aynı hatayı..

dedim ya zaten soruları  ve yorumlarınızı bekliyorum diye ,bence karmaşık söyleminizin yerine dogru olani ekleyebilirsiniz..

   Pointar'lara gelince zaten amacım kılişeleşmiş kodlar yazıp insanları oyalamak değil ,nette nereye baksanız hep aynı örnekler ,aynı tarz  bu programın farkı bunu ben yazdım bununla ilgili hiçbir pic c örnegine bakmadan

 Amaç zaten pointer kullanımına örnek ve bu şekilde daha hızlı oluyor..
bence fonksiyonlara ayrılmış ve moduler bir yapı..

birde bir bakışta anlaşılmaması daha iyi oldugunu düşünüyorum ,aksi taktirde kodu okuyan arkaşlar ,,amannn bildigimiz şeyler bunlar yauuu  bu forumlardada hep aynı şeyler var kopyala yapıştır dememeliler bence  bilmiyorum burası tartışma forumu ve paylaşma .

bakın yukarıda faydalandıgım kaynagıda yazdım nedeni ne  biliyormusunuz o kitaptaki örnekler asm ile yazılmış ,ve ben oturup asm den c ye çevirdim bilirsiniz ki  asm de INDF FSR adres işlemleridir, faydalandıgım örnektede bunlar oldugu için bende olayın özüne deginmek istedim ..
ve kitabın adınıda o yüzden yazdım arkadaşlar alıp onlarda" aa ak demek ki böyle de çalışılıyomuş" demeliler bu forumda okadar çok arkadaş varkı nerden başlasam nasıl yapsam işte bir yol alsınlar o kitabı oturup benim gibi çalışsınlar tabi buda asm yi iyi bilmek durumunu gerektiriyor.

arslan74 arkadaşım sen kendince böyle olmamış böyle olması daha etkin olur dedigin yerleri düzelt ve tekrar yayınla  senle daha iyi anlaşıcaz inşallah sen problemleri tespit et bende düzenlim arkadaşlar böylece daha çok ögrenirler

ben bu örnekleri buraya kendim için değil insanlar bişiler ögrensin diye yazıyorum..farkındaysanız başlıkları bile sırayla yazıyorum

birde okadar çok işim varki ama  forumda ki yazılarımı  oldukça uzun ve  ayrıntılı tutmak istiyorum saatlerimi alıyo belki ama insanlar hep olayları yüzeysel biliyorlar bence üşenmeden uzun uzun olayın özüne deginmek lazım


  iyi çalışmalar

cenkishan

hocam hani bir arada topluyorduk bunları tek konu baslıgında tartısılcaktı insanın bası dönüyo konudan konuya zıplanılıyor.
Bir bit olsam dolaşsam C de byte byte

F493

tüm başlıkları HI-TEC C  konu başlıgı altında açıyorum ,başka ne yapmam gerekiyor ,varsa başka yolu söyleyin ben tam bilmiyorum açıkcası forumdaki yapıyı.

muuzoo

Sanırım arkadaş tek bir başlıktan bahsediyor.Örneğin bütün çalışmalarınızı "HI-TECH C Çalışmaları" gibi bir başlık altında toplayın, yeni mesajlarınızı da o başlık altından yayınlayın diyor.

ÖRNEK
gunluk.muuzoo.gen.tr - Kişisel karalamalarım...

F493

muuzoo kardeş

anladıgım kadarıyla bundan sonrakileride  artık enson yazdıgım dosyanın içine atıcam  ,

örnegin bundan sonra  F493 HI-TECH adında bir başlık açıp oraya ekleyecegim yeni birşey eklemek istedigimde, cevap yaz tıklayarak oraya yeni konular ekleyecegim..
(Dogrumu anlamışım)
 eger öyle ise yeni birşeyler ekledigimde nasıl anlaşılacak

Başlık geride kalırsa..


 birde arslan74  arkadaşımdan yorumlarına verdigim cevapların karşılıgını alamıyorum..
 sevgili arslan74  arkadaşım sana sesleniyorum buradan duy sesimi (takılıyorum işte arada )
isterimki biz daha iyisini yazana kadar en iyi kodlar forumumuzda olsun

kolay gelsin arkadaşlar tüm ekibe
  :D

arslan74

Alıntı yapılan: "F493"muuzoo kardeş

anladıgım kadarıyla bundan sonrakileride  artık enson yazdıgım dosyanın içine atıcam  ,

örnegin bundan sonra  F493 HI-TECH adında bir başlık açıp oraya ekleyecegim yeni birşey eklemek istedigimde, cevap yaz tıklayarak oraya yeni konular ekleyecegim..
(Dogrumu anlamışım)
 eger öyle ise yeni birşeyler ekledigimde nasıl anlaşılacak

Başlık geride kalırsa..


 birde arslan74  arkadaşımdan yorumlarına verdigim cevapların karşılıgını alamıyorum..
 sevgili arslan74  arkadaşım sana sesleniyorum buradan duy sesimi (takılıyorum işte arada )
isterimki biz daha iyisini yazana kadar en iyi kodlar forumumuzda olsun

kolay gelsin arkadaşlar tüm ekibe
  :D

Merhaba,

Aslında dün bir cevap yazacaktım ama işim cıktı yazamadım. Bizim boş vaktimiz her zaman olmuyor, olsaydı zaten dediklerimin coğunu yapmış olurdum. Bu konuda sizlerden biraz sabır bekliyorum.

Sayın F493 bey sizin sorularınıza cevab vermek gerekirse.

Alıntı yapılan: "F493"
Kendi kaatimce verimsiz kod.::: demişsin  

bunu main içinde yapmamın nedeni ise bazen hi-tec in kesme içerisnden çagırılan fonkların da tutarsız davrandıgı ancak main içinde yapmıyo aynı hatayı..

Şimdi bu dediğinizin, hiç bir işlemci kabul etmez. Kardeş sen tutarsın bir işlemcisin ne yapacağın belli olmaz, sen güvenilmezsin diye bir mana cıkıyor.

Oysa tüm işlemcilerde böyle bir durum söz konusu olmaz, eğer gercekten öyle bir şey olsaydı, Kimse o işlemcileri kesinlikle kullanmazdı.

Programın interrupt altında bazen sacmalaması kesinlikle tasarım hatasından kaynaklanır. Bu ya donanımsal yada yazılımsal bir hata olabilir. Ama coğunlukla yazılımdan kaynaklanan hatalardan oluyor.

İlk başlarda kod yazarken bende interrupt işlemlerine fazla girmeden olayı direkt ana program altında halledeyim diye düşünmüştüm. Ancak bu düşündüğüm sistem, İnterrupt kullanmayı öğrenmeye ve düzgün kullanmaya başladıktan sonra değişti.

Eğer interruptları düzgün ayarlamasını ve kullanmasını bildikten sonra, asıl programa inanılmaz katkı sağlıyor. En başta birbirlerinden bağımsız çalışan iki tane farklı koda sahib oluyoruz. Bu olay kod yazmayı da cok kolaylaştiriyor.

Sizin yapmak istediğiniz olayı ele alalım. Siz "0-9999 SAYICI " yapmak istiyorsunuz. 9999 sayısı int sınırları içinde.

Söyle bir kodunuz olsaydı Örneğin. Bir int değişkeniz olsaydı. Main içinde sadece ona istediğiniz değeri gectiğinizde direkt ekrandan gözükse, programcılık acısından cok daha kolay ve basit olur.

Sizde sadece ekranda görünmesi istediğiniz değeri atadığınızda. ekranda gözükmesini bir alt program üstlense cok daha güzel olmazmıydı.

Selamlar

F493

öncelikle yazdıkların için teşekkür ediyorum.

ancak yazdıklarını tam manası ile anlayamadım
Aslında ben timer ile bir saat yapmak üzere başlamıştım ,ancak ilk aşamada bunu yapim istedim,dedigin gibi main içinde int degişken arttırılarakta yapılabilirdi..

ama asıl amacım saatti,ve şuan bitmek üzere,tabi sonra timerla değilde 32.768 ile yapıcam sonra rtc'(ds1307) den alıcaz..dedigin gibi yazılım hatası da olabilir , dogrusunu paylaşırsan seviniriz ,,

birde hi-tech te şöyle bir sıkıntı var   main foksiyonu içersinde kullanılan,çagrılan bir fonksiyon varsa ve bu fonsiyon kesme alt programındada çagırılıyorsa ,pek   garanti altında olan bir kod değil bunuda belirtmek isterim

 iyi çalışmalar arslan74

F493

öncelikle yazdıkların için teşekkür ediyorum.

ancak yazdıklarını tam manası ile anlayamadım
Aslında ben timer ile bir saat yapmak üzere başlamıştım ,ancak ilk aşamada bunu yapim istedim,dedigin gibi main içinde int degişken arttırılarakta yapılabilirdi..

ama asıl amacım saatti,ve şuan bitmek üzere,tabi sonra timerla değilde 32.768 ile yapıcam sonra rtc'(ds1307) den alıcaz..dedigin gibi yazılım hatası da olabilir , dogrusunu paylaşırsan seviniriz ,,

birde hi-tech te şöyle bir sıkıntı var   main foksiyonu içersinde kullanılan,çagrılan bir fonksiyon varsa ve bu fonsiyon kesme alt programındada çagırılıyorsa ,pek   garanti altında olan bir kod değil bunuda belirtmek isterim

 iyi çalışmalar arslan74

arslan74

Alıntı yapılan: "F493"öncelikle yazdıkların için teşekkür ediyorum.

ancak yazdıklarını tam manası ile anlayamadım
Aslında ben timer ile bir saat yapmak üzere başlamıştım ,ancak ilk aşamada bunu yapim istedim,dedigin gibi main içinde int degişken arttırılarakta yapılabilirdi..

ama asıl amacım saatti,ve şuan bitmek üzere,tabi sonra timerla değilde 32.768 ile yapıcam sonra rtc'(ds1307) den alıcaz..dedigin gibi yazılım hatası da olabilir , dogrusunu paylaşırsan seviniriz ,,

birde hi-tech te şöyle bir sıkıntı var   main foksiyonu içersinde kullanılan,çagrılan bir fonksiyon varsa ve bu fonsiyon kesme alt programındada çagırılıyorsa ,pek   garanti altında olan bir kod değil bunuda belirtmek isterim

 iyi çalışmalar arslan74

Merhaba,

Microchip'in "Demo Plus2" demo boardunu incele. İçinde senin dediğin mantıkla çalışan bir saat sistemi mevcut. Bu devrenin birebir simulasyonuda Proteusda var, ayrıca hi-Tech'in sample kısmında bu demo board için örnek yazılımlar mevcut. Oradanda inceleyebilrsiniz.

Selamlar

arslan74

Alıntı yapılan: "F493"öncelikle yazdıkların için teşekkür ediyorum.

ancak yazdıklarını tam manası ile anlayamadım
Aslında ben timer ile bir saat yapmak üzere başlamıştım ,ancak ilk aşamada bunu yapim istedim,dedigin gibi main içinde int degişken arttırılarakta yapılabilirdi..

ama asıl amacım saatti,ve şuan bitmek üzere,tabi sonra timerla değilde 32.768 ile yapıcam sonra rtc'(ds1307) den alıcaz..dedigin gibi yazılım hatası da olabilir , dogrusunu paylaşırsan seviniriz ,,

birde hi-tech te şöyle bir sıkıntı var   main foksiyonu içersinde kullanılan,çagrılan bir fonksiyon varsa ve bu fonsiyon kesme alt programındada çagırılıyorsa ,pek   garanti altında olan bir kod değil bunuda belirtmek isterim

 iyi çalışmalar arslan74

Merhaba,

Microchip'in "Demo Plus2" demo boardunu incele. İçinde senin dediğin mantıkla çalışan bir saat sistemi mevcut. Bu devrenin birebir simulasyonuda Proteusda var, ayrıca hi-Tech'in sample kısmında bu demo board için örnek yazılımlar mevcut. Oradanda inceleyebilrsiniz.

Selamlar

muuzoo

Alıntı yapılan: "F493"muuzoo kardeş

anladıgım kadarıyla bundan sonrakileride  artık enson yazdıgım dosyanın içine atıcam  ,

örnegin bundan sonra  F493 HI-TECH adında bir başlık açıp oraya ekleyecegim yeni birşey eklemek istedigimde, cevap yaz tıklayarak oraya yeni konular ekleyecegim..
(Dogrumu anlamışım)
 eger öyle ise yeni birşeyler ekledigimde nasıl anlaşılacak

Başlık geride kalırsa..


 birde arslan74  arkadaşımdan yorumlarına verdigim cevapların karşılıgını alamıyorum..
 sevgili arslan74  arkadaşım sana sesleniyorum buradan duy sesimi (takılıyorum işte arada )
isterimki biz daha iyisini yazana kadar en iyi kodlar forumumuzda olsun

kolay gelsin arkadaşlar tüm ekibe
  :D

Doğru anlamışsın hocam. Başlığa yeni yazı eklendiğinde başlığın yanındaki  bayrağa benzer işaret yanıp sönüyor ordan yeni olduğu anlaşılır kanaatimce. Diğer açıdan geriye düşecenğinden fazla endişelnme zira her nekadar hoş olmasada bu başlığa fazlaca talep olmadığı için başlıklar neredeyse sürekli ilk sayfada gözüküyor.Yeni cevap yazdığında da ilk sıraya çıkıyor zaten.

Umarım hareketli bir bölüm olurda burası, tek derdimiz başlığın aşağı düşmesi olsur.
gunluk.muuzoo.gen.tr - Kişisel karalamalarım...

arslan74

Alıntı yapılan: "muuzoo"
Alıntı yapılan: "F493"muuzoo kardeş

anladıgım kadarıyla bundan sonrakileride  artık enson yazdıgım dosyanın içine atıcam  ,

örnegin bundan sonra  F493 HI-TECH adında bir başlık açıp oraya ekleyecegim yeni birşey eklemek istedigimde, cevap yaz tıklayarak oraya yeni konular ekleyecegim..
(Dogrumu anlamışım)
 eger öyle ise yeni birşeyler ekledigimde nasıl anlaşılacak

Başlık geride kalırsa..


 birde arslan74  arkadaşımdan yorumlarına verdigim cevapların karşılıgını alamıyorum..
 sevgili arslan74  arkadaşım sana sesleniyorum buradan duy sesimi (takılıyorum işte arada )
isterimki biz daha iyisini yazana kadar en iyi kodlar forumumuzda olsun

kolay gelsin arkadaşlar tüm ekibe
  :D

Doğru anlamışsın hocam. Başlığa yeni yazı eklendiğinde başlığın yanındaki  bayrağa benzer işaret yanıp sönüyor ordan yeni olduğu anlaşılır kanaatimce. Diğer açıdan geriye düşecenğinden fazla endişelnme zira her nekadar hoş olmasada bu başlığa fazlaca talep olmadığı için başlıklar neredeyse sürekli ilk sayfada gözüküyor.Yeni cevap yazdığında da ilk sıraya çıkıyor zaten.

Umarım hareketli bir bölüm olurda burası, tek derdimiz başlığın aşağı düşmesi olsur.


Merhaba,

Bu şeklide düzgün ve faydalı bir şey olacağının kanısında değilim. Yazımı bittikten sonra site yöneticisiyle konuşup, onu ana sayfaya almak istiyorum.

Selamlar

cenkishan

bekliyorum hocam ne zaman 8O  8O  8O  8O
Bir bit olsam dolaşsam C de byte byte