themumy_10
Üye
- Katılım
- 20 Ağu 2013
- Mesajlar
- 38
- Puanları
- 1
Arkadaşlar iyi çalışmalar. 18f46k22 ile pilli uygulama yapmaya çalışıyorum. Temel mantığını 16f877a ile denedim uygun çalışıyor ama bu pic de bir eksiğim var. Amaç 16 sn de bir kez uyanıp işlem yapmak. Bunun için timer 1 ucuna 32768 lik saat sinyali uyguladım.(Proteus için). 16f877a işlemi gayet düzgün yapıyor. Şu şekilde:
(Serdar Çiçek alıntısı)
#int_timer1
void timer1_kesme ()
{ output_high(pin_b0); output_high(pin_b1);}
......
setup_timer_1(T1_EXTERNAL| T1_DIV_BY_8);
set_timer1(0); enable_interrupts(INT_timer1); enable_interrupts(GLOBAL);
while(1) { output_toggle(pin_b5); delay_ms(500); sleep();}
18f46k22 ise şöyle:
#int_timer1 // Timer1 kesmesi
void timer1_kesme () // Kesme fonksiyonu ismi
{output_toggle(pin_b0); output_toggle(pin_b1);}
....
setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1); set_timer1(0); enable_interrupts(INT_TIMER1); enable_interrupts(GLOBAL);
while(TRUE)
{output_toggle(pin_b5); delay_ms(500); sleep();}
Hal bu iken bağlantılar da uygun çalışıyor ama sleep komutu olmadan. Yani 18f46k22 uyku modundan çıkamıyor. Uyku modunda olmaz ise kesme işlevini yerine getiriyor. Uyku komutunu yazınca 16 f877a ya gelen sinyal uyandırırken bu pic uyanmıyor. Datasheet açıkça taşma olduğunda uyanacağını yazıyor. WDT kapalı hemen herşey kapalı ama çözüm bulamadım. Bir sitede aynı bacağa bağlı diğer modüllerden falan kaynaklanabileceği yazılmış ama tam bir sebep bulamadım. CCS için Pic Wizard ile kurcaladığım ve .h dosyası ile datasheet i birleştirince bu pic için özel bir dahili RTCC yani hazır bir saat devresi barındırdığını anladım. Ama örnek kod bulamadığım gibi Pic Wizard 'da da ENABLE yapılmıyor. Sadece .h dosyasında kodlar var ama bağlantı şeması yada herhangi bir örnek göremedim. Amaç sadece yaptığı bu kesmeyi uykudan çıkmak için de kullanmak. RTCC yada diğer modül kullanmasam da olur. Zaten T1_DIV_BY_1 ile istediğim zamanlamayı yapabiliyorum. Ama uykudan uyandıracak arkadaşların tavsiye fikir,düşünce her ne olursa iki satır açıklayabilirseniz bir şeyler öğrenmiş olurum. Şimdiden işi gücü bırakıp ilgilenen tüm arkadaşlara teşekkürler.
(Serdar Çiçek alıntısı)
#int_timer1
void timer1_kesme ()
{ output_high(pin_b0); output_high(pin_b1);}
......
setup_timer_1(T1_EXTERNAL| T1_DIV_BY_8);
set_timer1(0); enable_interrupts(INT_timer1); enable_interrupts(GLOBAL);
while(1) { output_toggle(pin_b5); delay_ms(500); sleep();}
18f46k22 ise şöyle:
#int_timer1 // Timer1 kesmesi
void timer1_kesme () // Kesme fonksiyonu ismi
{output_toggle(pin_b0); output_toggle(pin_b1);}
....
setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1); set_timer1(0); enable_interrupts(INT_TIMER1); enable_interrupts(GLOBAL);
while(TRUE)
{output_toggle(pin_b5); delay_ms(500); sleep();}
Hal bu iken bağlantılar da uygun çalışıyor ama sleep komutu olmadan. Yani 18f46k22 uyku modundan çıkamıyor. Uyku modunda olmaz ise kesme işlevini yerine getiriyor. Uyku komutunu yazınca 16 f877a ya gelen sinyal uyandırırken bu pic uyanmıyor. Datasheet açıkça taşma olduğunda uyanacağını yazıyor. WDT kapalı hemen herşey kapalı ama çözüm bulamadım. Bir sitede aynı bacağa bağlı diğer modüllerden falan kaynaklanabileceği yazılmış ama tam bir sebep bulamadım. CCS için Pic Wizard ile kurcaladığım ve .h dosyası ile datasheet i birleştirince bu pic için özel bir dahili RTCC yani hazır bir saat devresi barındırdığını anladım. Ama örnek kod bulamadığım gibi Pic Wizard 'da da ENABLE yapılmıyor. Sadece .h dosyasında kodlar var ama bağlantı şeması yada herhangi bir örnek göremedim. Amaç sadece yaptığı bu kesmeyi uykudan çıkmak için de kullanmak. RTCC yada diğer modül kullanmasam da olur. Zaten T1_DIV_BY_1 ile istediğim zamanlamayı yapabiliyorum. Ama uykudan uyandıracak arkadaşların tavsiye fikir,düşünce her ne olursa iki satır açıklayabilirseniz bir şeyler öğrenmiş olurum. Şimdiden işi gücü bırakıp ilgilenen tüm arkadaşlara teşekkürler.