PIC neden takılır

Başlatan Gökhan BEKEN, 12 Ağustos 2013, 16:22:51

Gökhan BEKEN

Merhaba arkadaşlar
Kullandığım pic 18f67j60
Yapmak istediğim şey sadece led yak söndür, c18 ve mikroc ile denedim ama ikisindede aynı sorun var. Donanımsal sorun gibi görünüyor, ancak:

kısmını yazdığımda, led yanık kalıyor, diğer satırlara atlamıyor hiç. Bazen çalışır gibi oluyor bir kaç saniye sonra tekrar takılıyor.
while(1)
	{	
		PORTC = 0xFF;
		Delay10KTCYx(100);
		PORTC = 0x00;
		Delay10KTCYx(100);
	}

delay yerine döngü kullandım daha iyi çalışıyor ancak 1-2 dakika sonra program yine takılıyor.
while(1)
	{	
		PORTC = 0x00;
		i=0;
		while(i<400)
		{	
			i++;		
		}
		PORTC = 0xFF;
		i=0;
		while(i<400)
		{	
			i++;		
		}		
	}


programın tamamı şu şekilde(c18)
#include "p18f67j60.h"
#include <stdio.h>
#include <delays.h>

#pragma config FOSC = HS, FOSC2 = ON, FCMEN = OFF, IESO = OFF, DEBUG=OFF
#pragma config WDT = ON, WDTPS = 32768
#pragma config STVR = ON, XINST=OFF
#pragma config CP0 = OFF
#pragma config ETHLED = ON

int i=0;
void main(void) 
{
	TRISC = 0x00;

/*
	while(1)
	{	
		PORTC = 0xFF;
		Delay10KTCYx(100);
		PORTC = 0x00;
		Delay10KTCYx(100);
	}
*/

	while(1)
	{	
		PORTC = 0x00;
		i=0;
		while(i<400)
		{	
			i++;		
		}
		PORTC = 0xFF;
		i=0;
		while(i<400)
		{	
			i++;		
		}		
	}
}



WDT ile alakalı olabilir diye düşündüm ON yaptım sonuç değişmedi.
25mhz kristal takılı, 22pf kondansatorler ile gnd ye bağlı, kristali chipe 1cm uzaklıkta bağladım. Devreyi 3.3v ile çalıştırıyorum,
ENVREG 3.3v'a bağlı. Harici regülatör kullandığımdan ENVREG pinini GND ye verdim ancak MPLAB tanımadı, bende tekrar 3.3v'a bağladım.
VDDCORE pini 100nf ile 3.3volt'a bağlı,
Voltaj girişine 1 adet 470uf, 1adet 100uf , 1 adet 100nf bağlı, ayrıca pice yakın bir yere tekrar 100 nf kondansator bağlı.
vss ye bağladığım pinler: 9,25,41,56,20,55,45,52
vdd ye bağladığım pinler:26,38,57,10,18,19,54,48,49
Özel mesaj okumuyorum, lütfen göndermeyin.

haydarpasamikro

CCS ile bir derleyip denediniz mi?
Mikro Dünyası.Haydarpaşa Teknik ve Endüstri Meslek Lisesi Mikrodenetleyici Atl. Şefi

skara1214

kristalin değerini tanımlamak gerekmiyormu herhangi bir yerde delay fonksiyonu kullanmıssınız?Eğer gerek yoksa iç kristali deneyin kristalden kaynaklı olabilir hata
Herkes ölür ama herkes gerçekten yaşamaz

islergucler

VDDCORE da 100nf takılı olacak. Ama 3.3V ile bağlantısını kesin. 100nf boşta kalacak.

Erol YILMAZ

çıkışı döngü ile 1-0 yap,
frekansmetre ile de frekansını ölç bakalım. Fikir verecektir.
Muhtemelen OSC ayarlarında bir yanlışlık var.
Oraya takılıyorsun.

Gökhan BEKEN

Alıntı yapılan: haydarpasamikro - 12 Ağustos 2013, 16:35:14
CCS ile bir derleyip denediniz mi?
Aşağıdaki kodları yazdım yine led yanık kaldı.
#include <18F67j60.H>
#fuses HS, NOWDT,NOPROTECT
#use delay(clock=25000000)

void main()
{
  setup_adc(ADC_OFF);

while(1)
  {
   output_high(PIN_C2);
   delay_ms(500);
   output_low(PIN_C2);
   delay_ms(500);
  }
}


Alıntı yapılan: islergucler - 12 Ağustos 2013, 16:44:12
VDDCORE da 100nf takılı olacak. Ama 3.3V ile bağlantısını kesin. 100nf boşta kalacak.
Hocam boşta kalınca hiç çalışmıyor. GND ye bağladım daha stabil çalışıyor sanki tam test etmedim ama şimdilik sorun yok gibi duruyor
Alıntı yapılan: Allegro - 12 Ağustos 2013, 16:52:15
çıkışı döngü ile 1-0 yap,
frekansmetre ile de frekansını ölç bakalım. Fikir verecektir.
Muhtemelen OSC ayarlarında bir yanlışlık var.
Oraya takılıyorsun.
.


Alıntı yapılan: skara1214 - 12 Ağustos 2013, 16:44:06
kristalin değerini tanımlamak gerekmiyormu herhangi bir yerde delay fonksiyonu kullanmıssınız?Eğer gerek yoksa iç kristali deneyin kristalden kaynaklı olabilir hata
Hocam bildiğim kadarıyla zaman hesaplama gibi işler dışında kristal değeri yazılmıyor, sadece HS veya XT gibi geniş değerler yazılıyor. Kesin değer yazılıyorsa bile nasıl yazıldığını bilmiyorum. Daha öncede bu şekilde kullanıyordum sorun olmuyordu. İç kristalide bir deneyeyim.


Alıntı yapılan: Allegro - 12 Ağustos 2013, 16:52:15
çıkışı döngü ile 1-0 yap,
frekansmetre ile de frekansını ölç bakalım. Fikir verecektir.
Muhtemelen OSC ayarlarında bir yanlışlık var.
Oraya takılıyorsun.
Hocam malesef frekansmetre yok elimde. Elimdeki dijital ölçü aletinde kare dalga sembolü var üstünde out yazıyor, bi araştırayım işimi görür mü diye. OSC ayarlarını internette gördüm bazılarının ne işe yaradığını bilmiyorum, bazılarını silince derlemiyor, bazılarını silip derleyebiliyorum ancak sonuç yine aynı.
Özel mesaj okumuyorum, lütfen göndermeyin.

islergucler

Sayfa 369
2.5V regulator kapasitesi. Orayı 3.3Va bağlamışsınız. 3.3V baglantısını keseceksiniz. Core a yüksek voltaj uyguluyorsunuz.

Gökhan BEKEN

Aşağıdaki kodları yazdığımda yani bekleme işini  Delay10KTCYx(1); komutu ile yaptığımda, led saniyede bir yanıp sönmeye başladı. Demekki 100 yazdığımda 100 saniye olarak algılıyordu.
while(1)
	{	
		PORTC = 0xFF;
		Delay10KTCYx(1);
		PORTC = 0x00;
		Delay10KTCYx(1);
	}


Alıntı yapılan: islergucler - 12 Ağustos 2013, 17:46:16
Sayfa 369
2.5V regulator kapasitesi. Orayı 3.3Va bağlamışsınız. 3.3V baglantısını keseceksiniz. Core a yüksek voltaj uyguluyorsunuz.

Peki hocam gnd ye bağlayınca sorun yok gibi görünüyor yarım saattir çalışıyor takılmadı.
Sizin dediğiniz gibi boş bıraktığımda, yani kondansatorun bir bacağı VDDCORE'ye bağlı diğer bacağı boş olduğunda çalışmıyor. Boşta bırakınca çalışmaması normal mi?
Özel mesaj okumuyorum, lütfen göndermeyin.

islergucler

Alıntı yapılan: meftun - 12 Ağustos 2013, 16:22:51
VDDCORE pini 100nf ile 3.3volt'a bağlı,

Datasheet sayfa 369a baktınızmı ?
Kapasitenin 1 bacagı vddcore diger bacagı gnd ye baglı olacak. VDDcore pini 3.3Va bağlanmayacak.

hasankara

#9
çekirdek besleme gerilimi 3.3 volt ise vddcore pinini vdd e bağlamak sorun oluşturmaz ama örnek vermek gerekirse pic32 serisinde çekirdek 1.8 volt la beslendiğinden dolayı vdd e çekmek sorun çıkartıyor bizzat denedim. en sağlıklısı kendimce envreg lojik 1 seviyesinde tutulur ve vddcore_gnd arasına da, sağlıklı olsun diye en az 10uf takılabilinir. bu kondansatör gerilimi ölçülerek çekirdeğe kaç volt gittiği görülebilinir. olmadı kendiniz ayrı bir regüle devresiyle de çekirdeği besleyebilirsiniz bu uçtan.  100nf vddcore için yetersiz geliyor bunuda denedim. bunu; 12 voltu 7805 le regüle edip hiç kondansatör takmadan pici beslemek gibi düşünebilirsiniz, böyle birşeyi denediyseniz pic çalışmıyor. sağlıklı regülasyon için 100nf çok yetersiz.

http://www.dorukanstore.com/10uF-10V-2080-Y5V-0805-25Adet-Fiyati-CL21F106ZPFNNNE,PR-16954.html

Icarus

Ana osilatör çalışmıyor olabilir. Internal RC'e geçin tekrar deneyin. (Elinizde osiloskop varsa takıldığında CLKOUT pin'ine bakın)

haydarpasamikro

// Konfigurasyon ayarlari ******************************************************
#pragma config BOREN=OFF
#pragma config FOSC=HS
#pragma config MCLRE=ON
#pragma config WDTE=ON
#pragma config CP=ON
#pragma config CPD=ON
#pragma config PWRTE=ON
#pragma config CCPMX=0
#pragma config LVP=0

// Kristal Frekansi ************************************************************
#define _XTAL_FREQ 25000000

gibi..
Mikro Dünyası.Haydarpaşa Teknik ve Endüstri Meslek Lisesi Mikrodenetleyici Atl. Şefi

Gökhan BEKEN

#12
Alıntı yapılan: Icarus - 12 Ağustos 2013, 20:43:32
Ana osilatör çalışmıyor olabilir. Internal RC'e geçin tekrar deneyin. (Elinizde osiloskop varsa takıldığında CLKOUT pin'ine bakın)
http://gputils.sourceforge.net/html-help/PIC18F67J60-conf.html
bu linkte, 18f67j60 için seçilebilecek bütün config ayarlarını koymuşlar.
Alıntı YapFOSC2 = OFF        0xFB             INTRC enabled as system clock when OSCCON<1:0> = 00.
FOSC2 = OFF olunca dahili RC osilatör seçilmiş oluyor yanlış anlamamışsam.

Şunu farkettim ben config kısmından ne ayarlarsam ayarlayım, pic çalıştığında kendi bildiğini okuyor. Ancak şunu farkettim, ilk anda benim istediğim gibi çalışıyor bu süre tahminim 100 ms gibi sürüyor, sonra dahili osilatöre geçiyor. Nerden mi anladım, HS veya HSPLL yi seçtiğimde ve FOSC2=OFF olduğunda , ilk başta led çok kısa bir süre yanıp sönüyor, tekrar yandığında 1 saniye yanıp sönmeye başlıyor.
Donanımsal olarak bir hatam var bence, çünkü daha öncelerde arada sıada çalışıyordu ama istediğim sürelerde led yanıp sönüyordu, bu gelişmiş picler bir karışık ya hu...

VDDCORE pinindeki 100nf yi çıkartıp tekrar 10uf bağladım, gnd ve vcc ye bağlayıp denedim ikinsindede sonuç değişmiyor.
sonra 25mhz lik kristali 4mhz ile değiştirdim yine aynı, 20mhz taktım yine aynı, tabi kristalin kondansatorlerinide değiştirdimi belirtiyim...
En sonunda kristalsiz denedim ve hiç birşey değişmedi yine aynı şekilde yanıp sönüyor, demekki kendi kendine dahili osilatorü açıyorrmuş.
Dahili osilatör ile çalışmaması için ne yapmam gerekiyor? Donanımsal bir hata mı yapıyorum sizce?
Yazılımsal olarak aklıma gelen herşeyi denedim.

edit: "VDDCORE" yazacağıma "ENVREG" yazmışım.
Özel mesaj okumuyorum, lütfen göndermeyin.

islergucler

ENVREG degil. VDDCORE pinine kapasite baglayacaksınız. Ve kapasitenin bir ayagı bu pinde diger ayagı gnd de olacak. Bu dedigimi yapmak ne kadar zor onu anlamadım. Sizin kendi kafanıza göre belirleyeceğiniz bir ayar değil bu. 369. sayfada sağ en üstteki gibi olacak tüm power bağlantıları. Sonrada yazılım ile alakalı kısımlara bakacaksınız.

Gökhan BEKEN

#14
Alıntı yapılan: islergucler - 13 Ağustos 2013, 16:53:33
ENVREG değil. VDDCORE pinine kapasite baglayacaksınız. Ve kapasitenin bir ayagı bu pinde diger ayagı gnd de olacak. Bu dedigimi yapmak ne kadar zor onu anlamadım. Sizin kendi kafanıza göre belirleyeceğiniz bir ayar değil bu. 369. sayfada sağ en üstteki gibi olacak tüm power bağlantıları. Sonrada yazılım ile alakalı kısımlara bakacaksınız.
Yazarken yanlış yazmışım, şimdi düzelttim hocam. Sorun belli artık kendi kendine dahili osilatöre geçiyor, ama çözümü bulamadım.

Bu arada burdada benim sorun var galiba: http://www.microchip.com/forums/m706580.aspx
Özel mesaj okumuyorum, lütfen göndermeyin.