Merhaba arkadaşlar. Ds1302 ile bir uygulama yapmam gerekiyor. Proteusta çalıştı. Saate göre çıkış filan veriyorum pwm olarak. Her şey iyi hoş derken devreyi kurdum. Lehimleme filan bitti. Çalıştirinca ekrana bu ilginç sonuç çıkıyor. Ds1302 nin io ve reset uçlarına elimle dokununca degerler değişiyor. Bazen bi anlık da olsa doğru gösteriyor. Sonra donuyor. Yine bu şekilde kalıyor. Ds1302 değiştirdim ise yaramadi. Yolları komple lehimle kapladım. Yine olmadı. Defalarca yolları kontrol ettim multimetre ile. Kısa devre yok. Bu durumla karşılaşan var mı daha önce?
Kodlar bunlar
#include <16f877A.h> //Kullanılacak pic
#FUSES NOWDT //No Watch Dog Timer
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP
#FUSES XT
#use delay(crystal=4MHz)
#define LCD_ENABLE_PIN PIN_B0
#define LCD_RS_PIN PIN_B1
#define LCD_RW_PIN PIN_B2
#define LCD_DATA4 PIN_B4
#define LCD_DATA5 PIN_B5
#define LCD_DATA6 PIN_B6
#define LCD_DATA7 PIN_B7
#define d1 PIN_A0
#define d2 PIN_A1
#define d3 PIN_A2
#define d4 PIN_A3
#define d5 PIN_A5
#define d6 PIN_E0
#define b_sabah PIN_c1
#define b_aksam PIN_d0
#define f_t PIN_d1
#include "lcd.c" //lcd ait fonksiyonlar programa eklenir
#include "ds1302.C"
int8 s_saat1;
int8 s_saat2;
int8 a_saat1;
int8 a_saat2;
int8 saniye,dakika,saat,gun,ay,hafta,yil=0;
int16 a;
int16 b;
void lcd()
{
lcd_gotoxy(1,1);
printf(lcd_putc,"%02d/%02d/%02d",gun,ay,yil);
lcd_gotoxy(1,2);
printf(lcd_putc,"%02d:%02d:%02d",saat,dakika,saniye);
lcd_gotoxy(11,1);
switch(hafta)
{
case 1: printf(lcd_putc,"Pzts"); break;
case 2: printf(lcd_putc,"SALI"); break;
case 3: printf(lcd_putc,"CARS"); break;
case 4: printf(lcd_putc,"PERS"); break;
case 5: printf(lcd_putc,"CUMA"); break;
case 6: printf(lcd_putc,"Cmts"); break;
case 7: printf(lcd_putc,"Pzar"); break;
}
}
int yandi1=0;
int yandi2=0;
int turn1=0;
int turn2=0;
int ayar1=1;
int ayar2=1;
int anahtar=0;
void main()
{
lcd_init();
lcd_putc("\f");
rtc_init(); //saat entegresini hazırla
delay_ms(5);
// rtc_set_datetime(24,02,17,05,15,59); //rtc_set_datetime(gun,ay,yil,hafta,saat,dakika); //değişkenleri saat entegresine aktar.
delay_ms(20);
setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_16,170,1);
while (1)
{ if(input(pin_e2) && anahtar==0){ set_pwm1_duty(0); anahtar=1; }
rtc_get_time(saat,dakika,saniye); rtc_get_date(gun,ay,yil,hafta);
lcd();
if(input(b_sabah))
{ while(input(b_sabah)) {}
ayar1++;
if(ayar1>3){ayar1=1;}
write_eeprom(1,ayar1);
}
ayar1=read_eeprom(1);
if(ayar1==1){s_saat1=4; s_saat2=7;output_high(d6);output_low(d5);output_low(d4);}
if(ayar1==2){s_saat1=6; s_saat2=8;output_high(d6);output_high(d5);output_low(d4);}
if(ayar1==3){s_saat1=5; s_saat2=8;output_high(d6);output_high(d5);output_high(d4);}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
if(input(b_aksam))
{
while(input(b_aksam)) {}
ayar2++;
if(ayar2>3){ayar2=1;}
write_eeprom(2,ayar2);
}
ayar2=read_eeprom(2);
if(ayar2==1){a_saat1=16; a_saat2=18;output_high(d3);output_low(d2);output_low(d1);}
if(ayar2==2){a_saat1=18; a_saat2=20;output_high(d3);output_high(d2);output_low(d1);}
if(ayar2==3){a_saat1=17; a_saat2=19;output_high(d3);output_high(d2);output_high(d1);}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if ((saat>a_saat2 && saat<=24) || (saat>=0 && saat<s_saat1)){ if(read_eeprom(4)==1){ set_pwm1_duty(170); } if(read_eeprom(4)==0){goto seviyeli_yak;} }
if (saat>s_saat2 && saat<a_saat1){if(read_eeprom(3)==1){ set_pwm1_duty(0); } if(read_eeprom(3)==0){goto seviyeli_sondur;} }
////////////////////////////////////////////////////////////////////////////
if(turn2==0 && saat==s_saat2){goto seviyeli_sondur;}
if(turn1==0 && saat==a_saat2){goto seviyeli_yak;}
if(!input(f_t) && saat>=a_saat1 && saat<=a_saat2 && turn1==0)
{
seviyeli_yak:
for(int i=0;i<=170;i+=3 ){//pwm1 ayarları for döngüsü ile arttırılacak
set_pwm1_duty(i);
delay_ms(100);
if(i>165){set_pwm1_duty(170);
turn1 =1;
turn2=0;
yandi1=1;
yandi2=0;
write_eeprom(4,yandi1);
break;}
}
}
////////////////////////////////////////////////////////////////////
if(input(f_t) && saat>=s_saat1 && saat<=s_saat2 && turn2==0)
{
seviyeli_sondur:
for(int i=170;i>=0;i-=5){//pwm1 ayarları for döngüsü ile arttırılacak
set_pwm1_duty(i);
delay_ms(100);
if(i<=5){set_pwm1_duty(0);
turn1=0;
turn2=1;
yandi2=1;
yandi1=0;
write_eeprom(3,yandi2);
break;}
}
}
///////////////////////////////////////////////////////////////////////
}
}
(http://i.hizliresim.com/8M2rrV.jpg)
(http://i.hizliresim.com/yEoaYa.jpg)
"int" yerine unsigned int olarak tanımlayıp deneyiniz...
Alıntı yapılan: mehmet - 12 Mart 2017, 18:55:24
"int" yerine unsigned int olarak tanımlayıp deneyiniz...
Değiştirdim ama olmadı :/ hala aynı durum. Başka bir program atıp çıkışları filan da kontrol ettim. Hiçbir sıkıntı yok. Ama dediğim gibi rst ve io uçlarına elimle dokununca ekran hafif geliyor yazı. Mesela "Pzar" yazısı görünüyor ama sonra ctesi de oluyor diğer günler de. Hani anlık olarak değişiyor. Diğer rakamlar ise kafasına göre değişiyor. Elbetteki bu durum olağan. Hani elimle kisa devre etmiş oluyorum. Neden böyle ilginç şeyler benim başıma geliyor anlamıyorum :D
DS1302 data yolları pull-up değil mi yoksa?
"rst", "sclk" ve "io" pinlerini 4,7K - 10K arasında birer
direnç ile +5V. 'a bağlayınız...
Alıntı yapılan: mehmet - 12 Mart 2017, 19:12:10
DS1302 data yolları pull-up değil mi yoksa?
Vala yollar direk bağlı. Aynı proteus simulasyonundaki gibi. İo rst ve sclk pinlerini 4. 7 k öle pull up mi yapmam lazım? Daha önce böyle bi örneğe denk gelmedim ama
Alıntı yapılan: mehmet - 12 Mart 2017, 19:12:10
DS1302 data yolları pull-up değil mi yoksa?
"rst", "sclk" ve "io" pinlerini 4,7K - 10K arasında birer
direnç ile +5V. 'a bağlayınız...
Dediğiniz gibi yaptım. Artık elimi dokundurunca hiç tepki vermiyor. Ekran yine aynı şekilde.
- 91/-91/-91
-91:-91:-91
:(( bunun dışında herşey çalışıyor. Eprom, Ledler falan. Herşey tamam ama ds1302 sıkıntı çıkarıyor. iki üç tane denedim ama yine aynı
Bana göre ds1302 de pullup direnci gerekmez. Aksine data sheet'e bakarsanız (Sayfa-3) o pinlerde 40 Kohm dahili Pull-Down direnci bağlı olduğu yazılıdır.
Çok gerekiyor ise harici pull-down direnci bağlanabilir. Pullup olursa dahada kararsız kalacaktır o pinler.
Sorunun şekline bakılırsa o pinler kararsız konumda (high ile low arasında) kalıyorlar yada bir etkilenme durumu var veya baskılı devrede o pinlerin bağlantıları osilasyon yapıyordur. Skop ile bakmak gerekir. Entgere besleme bacaklarına 10Mf + 100nf Kondansatör bağlamak çözüm olabilir.
Ete
Alıntı yapılan: mehmet - 12 Mart 2017, 19:12:10
DS1302 data yolları pull-up değil mi yoksa?
"rst", "sclk" ve "io" pinlerini 4,7K - 10K arasında birer
direnç ile +5V. 'a bağlayınız...
ediğiniz gibi yaptım. Artık elimi dokundurunca hiç tepki vermiyor. Ekran yine aynı şekilde.
- 91/-91/-91
-91:-91:-91
:(( bunun dışında herşey çalışıyor. Eprom, Ledler falan. Herşey tamam ama ds1302 sıkıntı çıkarıyor. iki üç tane denedim ama yine aynı
Alıntı yapılan: ete - 12 Mart 2017, 20:18:56
Bana göre ds1302 de pullup direnci gerekmez. Aksine data sheet'e bakarsanız (Sayfa-3) o pinlerde 40 Kohm dahili Pull-Down direnci bağlı olduğu yazılıdır.
Çok gerekiyor ise harici pull-down direnci bağlanabilir. Pullup olursa dahada kararsız kalacaktır o pinler.
Sorunun şekline bakılırsa o pinler kararsız konumda (high ile low arasında) kalıyorlar yada bir etkilenme durumu var veya baskılı devrede o pinlerin bağlantıları osilasyon yapıyordur. Skop ile bakmak gerekir. Entgere besleme bacaklarına 10Mf + 100nf Kondansatör bağlamak çözüm olabilir.
Ete
Galiba haklısınız. Çünkü pull up ları bağlayınca artık elimle temas etsem de bir değişiklik olmuyor. Normalde çalışir durumda bile bu kadar stabil bit görüntü vermez :D şu an sabit bir şekilde
-91/-91/-91
-91:-91:-91
Gösteriyor. Galiba dirençleri Sökmem gerekecek :/şimdi lehimden sonra Proteusta da pull up bağlayınca hata verdi.ekrsn dönük kalıyor. baglanti olarak komple lehimle kapladim sıkıntı olmasın diye. Farklı kaynaklardan enerji vermeye çalıştım. Yine aynı . Ben bu - 91in neden geldiğini anlayamadim bir türlü. Kısa sürede de bitirmem lazım. Siz yapınca direk bağlayınca oluyor mu? Pinleri sırayla hem koddan hem de proteustan kontrol ettim. Bir sıkıntı görünmüyor. Neyi kaçırıyorum anlamıyorum :/
MCU ya bağlanan 3 ucu 10k ile Pullup yaparak dener misin.
Alıntı yapılan: Melih1802 - 12 Mart 2017, 20:29:04
MCU ya bağlanan 3 ucu 10k ile Pullup yaparak dener misin.
Tam olarak hangi ucu kastettin? Mcu ya bağlanan 3 pin var. İo, rst ve sclk. Bunlar ds1302 den gelenler. Hangisini pull up edeyim?
#FUSES NOBROWNOUT
[/size]
[/size]#FUSES BROWNOUT olarak değiştirirmisin.
Pull up ları sökup rst, sclk ve io 'ya pull down koydum 4.7k. Şu an
00/00/00
00:00:00
Gösteriyor. Ne şanssizim ya :) bir türlü çalıştıramadım şu devreyi :)
32.768khz lik xtal değistiridm olmadı.
DS1302 değiştirdim olmadı
Pıc değiştirdim olmadı
Yolları aresten, isisten, devremden, pic ev ds1302 datasheetinden bakarak kontrol ettim. Doğru.
Teker teker kısa devre var mı diye baktım. Hiç yok.
Kafayı yedirecek bana bu devre ya
Sorun çözüldü.
Arka tarafa elimle dokununca çalışmasınin sebebi pull down larindaki sorun galiba. Ben sclk, io ve ce uçlarına 4.7k pull-down ekledim. Sonra ekrana
00 /00/00
00:00:00 göstermeye başladı. Ekranda böyle komple sıfır veya bazı degerler sıfır bazılarıni da faklı rakamlar şeklinde gösteriyor ise sorun ds1302 de oluyor. Alıp daha önce değiştirdigim ds1302 yi taktım. Çalıştı.
YALNIZ TARIH VE ZAMAN AYARI YAPMAYINCA (DİREK DEFAULT AYARI İLE ÇALIŞTİRİNCA ) YANLIŞ TARIH GÖSTERİYOR. AÇIP KAPATINCA VE RESET EDİNCE ARKADA SAYIYOR. HANİ YANLIŞ SAAT GOSTERIYOR AMA KAPATINCA DURMUYOR. ARKADA SAYIYOR.
AMA
BEN KEDİM SET EDİNCE DE HER RESETTE VE AÇIP KAPAMADA KUDUGUM ZAMANA GERİ DÖNÜYOR. BUNU NASIL HALEDICEM. KÜTÜPHANESINDEKI DEFAULT AYARINI NASIL DEĞİŞTİRECEM?
Ustam dedigimi yaptin mi
Usta yazilimda sorun var
Her 3 ucu da pullup yaparak denermisin.
Sorun çözüldü.
Arka tarafa elimle dokununca çalışmasınin sebebi pull down larindaki sorun galiba. Ben sclk, io ve ce uçlarına 4.7k pull-down ekledim. Sonra ekrana
00 /00/00
00:00:00 göstermeye başladı. Ekranda böyle komple sıfır veya bazı degerler sıfır bazılarıni da faklı rakamlar şeklinde gösteriyor ise sorun ds1302 de oluyor. Alıp daha önce değiştirdigim ds1302 yi taktım. Çalıştı.
YALNIZ TARIH VE ZAMAN AYARI YAPMAYINCA (DİREK DEFAULT AYARI İLE ÇALIŞTİRİNCA ) YANLIŞ TARIH GÖSTERİYOR. AÇIP KAPATINCA VE RESET EDİNCE ARKADA SAYIYOR. HANİ YANLIŞ SAAT GOSTERIYOR AMA KAPATINCA DURMUYOR. ARKADA SAYIYOR.
AMA
BEN KEDİM SET EDİNCE DE HER RESETTE VE AÇIP KAPAMADA KUDUGUM ZAMANA GERİ DÖNÜYOR. BUNU NASIL HALEDICEM. KÜTÜPHANESINDEKI DEFAULT AYARINI NASIL DEĞİŞTİRECEM?
3v pil
vcc2 pi ile vcc1 normal adaptörden besle
5 v mu vereyim ds1302 nin pil kısmına?
ikiside 3 volt
Data sheet derki hangi besleme daha yüksek ise onunla çalışmasını sürdürür. İkiside aynı olursa kararsız kalabilir. Genelde şebeke yüksek pil düşük olur yada olmalıdır. İki voltajında eşit olması durumunu açıklamamış ancak muhtemelen kararsız bir durum ortaya koyacaktır. Zaman zaman üyelerden gelen saat çalışmıyor yada anlamsız şekilde hızlı çalışıyor gibi sorunların kaynağı genelde besleme sorunu olarak karşımıza çıkmaktadır.
"The DS1302 will operate from the larger of VCC1 or VCC2. When VCC2 is greater than VCC1 + 0.2V, VCC2
will power the DS1302. When VCC2 is less than VCC1, VCC1 will power the DS1302."
DS1302 ye saat ayarı vermezseniz çalışmaz. Çünki Saniye registeri 7. biti fabrikasından 1 olarak ayarlanıp çıkar. Bu saati durdurma bitidir. Bu bit sıfır oluncaya kadar saat çalışmaz. O da ancak ayar verilirse sıfırlanır.
Control registeri 7. biti ise write protect olarak çalışır. 1 olduğu müddetçe saat ayarı yapabilirsiniz. sıfır olursa bilgi yazamazsınız.
Ete
Alıntı yapılan: ete - 14 Mart 2017, 07:59:30
Data sheet derki hangi besleme daha yüksek ise onunla çalışmasını sürdürür. İkiside aynı olursa kararsız kalabilir. Genelde şebeke yüksek pil düşük olur yada olmalıdır. İki voltajında eşit olması durumunu açıklamamış ancak muhtemelen kararsız bir durum ortaya koyacaktır. Zaman zaman üyelerden gelen saat çalışmıyor yada anlamsız şekilde hızlı çalışıyor gibi sorunların kaynağı genelde besleme sorunu olarak karşımıza çıkmaktadır.
"The DS1302 will operate from the larger of VCC1 or VCC2. When VCC2 is greater than VCC1 + 0.2V, VCC2
will power the DS1302. When VCC2 is less than VCC1, VCC1 will power the DS1302."
DS1302 ye saat ayarı vermezseniz çalışmaz. Çünki Saniye registeri 7. biti fabrikasından 1 olarak ayarlanıp çıkar. Bu saati durdurma bitidir. Bu bit sıfır oluncaya kadar saat çalışmaz. O da ancak ayar verilirse sıfırlanır.
Control registeri 7. biti ise write protect olarak çalışır. 1 olduğu müddetçe saat ayarı yapabilirsiniz. sıfır olursa bilgi yazamazsınız.
Ete
Bunu direk not aldım. herkese yardımları için teşekkürler :) son olarak 5v gate tetiklemesi ile surebilecegim bir mosfet tavsiye edebilir misiniz? Sürekli Vds gerilimi 15v ve akımı da 7-8 A filan olacak. Ben irfz44n ve Irl540 I denedjm ama gate ucuna 5v gelmesine rağmen source ve drain ucu arasından 2. 5v okuyorum. (12v akü bağli .normalde 11 v filan göstermesi gerekirdi). Kartı bastım artık. Hani transistör ile sürme olayıni adapte edemiyorum maalesef. Bu değerlerde dayanacak bir transistör varsa transistör (bulunurlunabilir olmalı hani piyasada) yoksa da 5v gate tetiklemesi ile tam iletime geçecek bir bir mosfet lazım :)
Mofsetin önüne 5v ile çalışan bir röle koy, gerekirse röleyi sürmek içinde bc307 filan kullanırsın mofseti raatlıkla sürersin. Mofseti direk pic ile sürmek iyi olmaz. veya HCnW serisi bir optocuplör kullanabilirsin röle yerinede.
IRLZ44
@xoom irl3705 var. Onu aldım. İse yarar değil mi? +-16 v diyor Vgs gerilimi için. İrfz44 ile bile sürdügum devre var hani pil 9 v tu. Mosfet 7.8 v kadarını iletiyordu. Ama sıkıntı çıkarmıştı. Bu sefer niye böyle oldu anlamadım.
Denedim şimdi 3.38 v veriyor. Yok arkadaş. Bu işte başka birşey var. Aklım almıyor.
İrfz44n => (VGS +-30 yazıyor datasheette) 5v gate gerilimi ile
2.2v uç gerilimi veriyor
Irl540=>(Vgs +-20v yaziyor datasheette) 5v gate gerilimi ile
2.57 uç gerimi veriyor
Ifl3705 => (VGS +-16) 5V gate gerilimi ile
3.38v veriyor.
Hani özelliklerine göre lineer bir çıkış var ama olması gelenden 4 kat daha küçük.
Belki ters bagliyorumdur diye defalarca kontrol ettim. Drain ucuna 12 bagli. Source ise bir ucu ledin + sına diğer ucu - ye bağlı. Ledin - si de notr e bağlı. Zaten şema var konuda. Direk ordakinin aresini bastım. Bir fikri olan yok mu acaba?
Acaba pwm frekansı etkili oluyor mu bu işte?
Bu Vgs en fazla uygulanabilecek gerilimi
gösteriyor.
Burada asıl önemli nokta eşik gerilimidir.
Frekans için de önemli nokta açma ve kapanma
gecikmeleridir.
Alıntı yapılan: ghistmanzero - 14 Mart 2017, 21:39:19
Belki ters bagliyorumdur diye defalarca kontrol ettim. Drain ucuna 12 bagli. Source ise bir ucu ledin + sına diğer ucu - ye bağlı. Ledin - si de notr e bağlı. Zaten şema var konuda. Direk ordakinin aresini bastım. Bir fikri olan yok mu acaba?
Draini beslemeye bağladığında gate voltajı drainden eşik değeri kadar daha büyük olması gerekir. senin yaman gereken surceyi GND şaseye bağlayıp ledi Drain ile süreceksin.
Alıntı yapılan: pwm.c - 15 Mart 2017, 12:32:19
Draini beslemeye bağladığında gate voltajı drainden eşik değeri kadar daha büyük olması gerekir. senin yaman gereken surceyi GND şaseye bağlayıp ledi Drain ile süreceksin.
Aynen dediğiniz gibi. Çok teşekkürler. Öyle bağlayınca çalıştı :)