tatavi
Üye
- Katılım
- 1 Eki 2009
- Mesajlar
- 17
- Puanları
- 1
- Yaş
- 50
merhabalar
yeni yeni pic ögrenmeye çalışıyorum basit oldugunu düşündüğüm bir devre kurmak istedim
16f628a kullanıldı c ile yazıldı program ledi tetik aldıgında 5 sn yakacak sonra 30 sn kadar bekleyecek tekrar 1sn yakacak ve tetik bekleyecek bu arada ilk tetikten sonra döngü bitene kadar yeni tetik alsa bile herhangi başka bir işlem yapmayacak
kodda bir sorun oldugunu düşünmüyorum (ben yazmadım daha ögreniyorum yavaşca)
isiste simulasyonda sorunsuz çalışıyor zaten arkadaşda devreyi kurmuş bana koddave devrenin çalışmasında bir sorun olmadıgını bildirdi (kod aşagıdadır)
usb ile yukleyen brenner8 programlayıcı aldım clon tabiki nelkit adıyla satılıyor
kullandıgım dizüstü win7 64 bit işletim sistemli programlayıcıyı biraz zorluklada olsa tanıttım ayarlarını filan yaptım kalibrasyonunuda hallettim bir sorun oldugunu zannetmiyorum şu sebebden dolayı:
programlayıcının software ini açıp pici takmadan picin içindeki dosyayı kaydet dediğimde tek bir satırlık bir dosya kaydetti daha sonra yuklediğimi düşündüğüm pici taktım ve içerigini kaydet dediğimde oluşturdugu dosyayı orjinal dosya ile karşılaştırdım aynısı oldugunu gördüm bu mantıkla sorun olmadıgını düşünüyorum
velakin fuse ayarlarında biraz takıldım şöyleki :
harici osilaskop kullanıldıgından dolayı fuse ayarlarından xt yi seçtim
diğer ayarları şöyle
1 osilator: xt
2watchdogtimern
3power off timern
4master clear:enable
5brown out detect:enable
6low voltage program:disable
7data ee read project:disable
8code project .off
bu şekilde zaten pici tanıtıp hexi gösterdiğimde bu ayarlar otomatik olarak ayarlanıyor
besleme olarak 4.9 v 450 ma vdc adoptor kullandım ölçtüğümde ise 5.09 v 465ma oldugunu gördüm (sanırım bundan dolayı sorun yoktur elektronikciye sordugumda sorun olmayacagını söyledi en azından)
bunları guzel bir şekilde yaptım isisteki gibi devreyi board üzerine aynısının tıpkısını kurdum ek olarak 100nf koydum (koymamı tavsiye ettiler nedenini ögrendikten sonra bende ekledim )
ne yaptım isede çalıştıramadım herparçayı belki bozuktur diye defalarca değiştirdim her giriş çikişi
belki temassızlık vardır diye defalarca kontrol ettim malesef tık yok mutlaka bir yerlerde yanlışlık yapıyorum
diye düşünüyorum(gunlerdir)
bu kadar ugraştıktan sonra dışarıda yaptırmak istemiyorum artık lütfen nerde hata
yapıyorum söyleyin bitsin şu çilem
saygılarımla
c kodu
#include <16f628A.h>
#pragma fuses XT,NOWDT,NOPROTECT
#pragma device adc=10
#pragma use delay (clock=4000000)
#type SIGNED, INT=16, LONG=32
#pragma byte PORTA = GETENV("SFRORTA")
#pragma byte PORTB = GETENV("SFRORTB")
#pragma byte TRISB = GETENV("SFR:TRISB")
#pragma byte TRISA = GETENV("SFR:TRISA")
#define role_on() (PORTA |= 0x1)
#define role_off() (PORTA &= ~0x1)
unsigned long bres;
unsigned int saniye;
#pragma int_timer0
void timer_ISR(){
bres += 256;
if(bres >= 62500)
{
bres -= 62500;
saniye++;
if(saniye == 5)
role_off();
else if(saniye == 35)
role_on();
else if(saniye >= 36){
role_off();
saniye = 0;
disable_interrupts(int_timer0);
clear_interrupt(int_ext);
enable_interrupts(int_ext);
}
}
}
#pragma int_ext
void Ext0_ISR(){
disable_interrupts(int_ext);
saniye = 0;
set_timer0(0);
role_on();
clear_interrupt(int_timer0);
enable_interrupts(int_timer0);
}
void main ()
{
TRISA = 0x0;
TRISB = 0x1;
PORTA = 0;
PORTB = 0;
delay_ms (2) ;
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16|RTCC_8_BIT);
ext_int_edge( L_TO_H );
enable_interrupts(int_ext);
enable_interrupts(GLOBAL);
while(1){
};
}
not:
pic olarak 16f628a ,16f628 ve 16f628 o4/p ile deneme yaptım saolsun her elektronikci başka vermiş
buda olur diye herbirinden 3er tane denedim halimi siz düşünün artık
watchdog timer i off yaparakta denedim sonuç aynı halen
yeni yeni pic ögrenmeye çalışıyorum basit oldugunu düşündüğüm bir devre kurmak istedim
16f628a kullanıldı c ile yazıldı program ledi tetik aldıgında 5 sn yakacak sonra 30 sn kadar bekleyecek tekrar 1sn yakacak ve tetik bekleyecek bu arada ilk tetikten sonra döngü bitene kadar yeni tetik alsa bile herhangi başka bir işlem yapmayacak
kodda bir sorun oldugunu düşünmüyorum (ben yazmadım daha ögreniyorum yavaşca)
isiste simulasyonda sorunsuz çalışıyor zaten arkadaşda devreyi kurmuş bana koddave devrenin çalışmasında bir sorun olmadıgını bildirdi (kod aşagıdadır)
usb ile yukleyen brenner8 programlayıcı aldım clon tabiki nelkit adıyla satılıyor
kullandıgım dizüstü win7 64 bit işletim sistemli programlayıcıyı biraz zorluklada olsa tanıttım ayarlarını filan yaptım kalibrasyonunuda hallettim bir sorun oldugunu zannetmiyorum şu sebebden dolayı:
programlayıcının software ini açıp pici takmadan picin içindeki dosyayı kaydet dediğimde tek bir satırlık bir dosya kaydetti daha sonra yuklediğimi düşündüğüm pici taktım ve içerigini kaydet dediğimde oluşturdugu dosyayı orjinal dosya ile karşılaştırdım aynısı oldugunu gördüm bu mantıkla sorun olmadıgını düşünüyorum
velakin fuse ayarlarında biraz takıldım şöyleki :
harici osilaskop kullanıldıgından dolayı fuse ayarlarından xt yi seçtim
diğer ayarları şöyle
1 osilator: xt
2watchdogtimern
3power off timern
4master clear:enable
5brown out detect:enable
6low voltage program:disable
7data ee read project:disable
8code project .off
bu şekilde zaten pici tanıtıp hexi gösterdiğimde bu ayarlar otomatik olarak ayarlanıyor
besleme olarak 4.9 v 450 ma vdc adoptor kullandım ölçtüğümde ise 5.09 v 465ma oldugunu gördüm (sanırım bundan dolayı sorun yoktur elektronikciye sordugumda sorun olmayacagını söyledi en azından)
bunları guzel bir şekilde yaptım isisteki gibi devreyi board üzerine aynısının tıpkısını kurdum ek olarak 100nf koydum (koymamı tavsiye ettiler nedenini ögrendikten sonra bende ekledim )
ne yaptım isede çalıştıramadım herparçayı belki bozuktur diye defalarca değiştirdim her giriş çikişi
belki temassızlık vardır diye defalarca kontrol ettim malesef tık yok mutlaka bir yerlerde yanlışlık yapıyorum
diye düşünüyorum(gunlerdir)
bu kadar ugraştıktan sonra dışarıda yaptırmak istemiyorum artık lütfen nerde hata
yapıyorum söyleyin bitsin şu çilem
saygılarımla
c kodu
#include <16f628A.h>
#pragma fuses XT,NOWDT,NOPROTECT
#pragma device adc=10
#pragma use delay (clock=4000000)
#type SIGNED, INT=16, LONG=32
#pragma byte PORTA = GETENV("SFRORTA")
#pragma byte PORTB = GETENV("SFRORTB")
#pragma byte TRISB = GETENV("SFR:TRISB")
#pragma byte TRISA = GETENV("SFR:TRISA")
#define role_on() (PORTA |= 0x1)
#define role_off() (PORTA &= ~0x1)
unsigned long bres;
unsigned int saniye;
#pragma int_timer0
void timer_ISR(){
bres += 256;
if(bres >= 62500)
{
bres -= 62500;
saniye++;
if(saniye == 5)
role_off();
else if(saniye == 35)
role_on();
else if(saniye >= 36){
role_off();
saniye = 0;
disable_interrupts(int_timer0);
clear_interrupt(int_ext);
enable_interrupts(int_ext);
}
}
}
#pragma int_ext
void Ext0_ISR(){
disable_interrupts(int_ext);
saniye = 0;
set_timer0(0);
role_on();
clear_interrupt(int_timer0);
enable_interrupts(int_timer0);
}
void main ()
{
TRISA = 0x0;
TRISB = 0x1;
PORTA = 0;
PORTB = 0;
delay_ms (2) ;
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16|RTCC_8_BIT);
ext_int_edge( L_TO_H );
enable_interrupts(int_ext);
enable_interrupts(GLOBAL);
while(1){
};
}
not:
pic olarak 16f628a ,16f628 ve 16f628 o4/p ile deneme yaptım saolsun her elektronikci başka vermiş
buda olur diye herbirinden 3er tane denedim halimi siz düşünün artık
watchdog timer i off yaparakta denedim sonuç aynı halen