Ufak bir Kesme problemi.

Başlatan maxMESA, 09 Aralık 2006, 18:10:04

maxMESA

Aslında yapacağım iş ds1302 den saat değerlerini okuyup lcd ye yazmak.Ama saati ayarlamak için bir butonla kesme üretmek istiyorum.

Benim sorunum şu.Portb nin üst 4 bitinde bir değişim olduğu zaman bir kesme programı çalışacak.Kesme programı işini bitirince kaldığım yere geri dönmek istiyorum.Ama nasıl yapacağımı bulamadım.


....

#INT_RB
void kesme_programi()
{
lcd_init();
printf(LCD_PUTC,"\f Kesme programi..");
delay_ms(2000);
}

main()
{
lcd_init();
ENABLE_INTERRUPTS(GLOBAL);
enable_interrupts(INT_RB);

printf(LCD_PUTC,"\f ANA PROGRAM");

//Buraya bir şeyler eklemeliyim ??

printf(LCD_PUTC,"\f we are back");//Kesme programından geri dönünce
                                //buraya gelsin istiyorum.
}

mustafacifci

dostum mail adresini ver sana ccs c ile yaptığım saat sıcaklık ve tarih gösteren 7 segmentli projeyi göndereyim

Göktuğ

mustafacifci
kodları burada yayınlarsan herkes yararlanabilir. Amacın yardım etmekse en guzeli boyle olacaktır.

climax

@mustafacifci hocam göktug hocama  katılıyorum.Aynı şekilde sıcaklık okuma ve saat için kodlar ve devre banada lazım.Şu anda ben de o konu üzerinde çalışıyorum.Bizlerle paylaşırsan sevinirim...
Paylaşmak düsturumuzdur.

MURSEL

yükselen 4 birinden demişin rb4,rb5,rb6,rb7 bidegişiklil olunca kesme vermişin lcd baglantılarını picin hangi bacaga yönlendirdin bu ayarları kontrol et lcd yede aynı bacaklar yönlendirmiş olabilirsin

zafzaf82

Mikroişlemci bi araçtır, amaç değil.....

mcan

sonsuz dögü içinde ds1302 ile haşır neşir olup, kesme alt programında ds1302 yi tekrar ayarlayabiirsin,yada ds1302 den alacağın en sık veri saniye dir ve bu doğal olarak 1 saniyedir.bana kalırsa(denemedim ama) tuş tarama için yeterli bir süre olur.yani tuş tara yaklaşık 1 saniye sonra ds1302 yi oku mesela for döngüsü ile 600 kere tuşları tara son ra çıkıp ds1302 ile haberleş sonra geri tuşlara taramaya gir gibi.....

SpeedyX

INT_RB kesmesi içinde portb yi en az bir defa okumak zorundasın. yoksa çalışmaz, şöyle ki;
#int_rb
void rb_isr() {
    tusEnable=true;
    #asm
      movf portb,w // laf olsun diye oku
    #endasm
}

mustafacifci

alın beyler kodlar;

#include <16F876.h>



#fuses HS,noWDT,nolvp,NOBROWNOUT


#use delay(clock= 20000000)


#include <dallas.c>
#include <DS1302.C>

long sayac,a;
INT HR,MIN,SEC,mth,day,dow,year,konum=0;
int1 ayar1,ileri1,arti1,eksi1;
#byte portb  =6
#byte portc  =7
#bit d1=7.0
#bit d2=7.1
#bit d3=7.2
#bit d4=7.3
#Bit led=7.7
#bit ayar =5.0
#bit ileri =5.1
#bit arti =5.2
#bit eksi =5.3

LONG SAAT;



byte ek[4]={0x30,0x31,0x32,0x33};
byte  const disp[14]={128,243,73,97,51,37,5,241,1,33,141,57,143};

#int_ext
buton()
{if (ayar==0){ ayar1=!ayar1;
if ( ayar1==0) rtc_set_datetime(day,mth,year,dow,hr,min);}
if (ayar1==1) {
if (ileri==0) konum++;
if (arti==0) arti1=1;
if (eksi==0) eksi1=1;
}


//rtc_set_datetime(day,mth,year,dow,hr,min);


}








#int_TIMER0
TIMER0_isr()
{sayac++;
switch (sayac) {

   case 1: portb=disp[(ek[0]-0x30)];
           d1=0;

          break;

  case 5:d1=1;

          break;
  case 7:  portb=disp[(ek[1]-0x30)];
           d2=0;

          break;
  case 12:d2=1;

          break;
  case 14: portb=disp[(ek[2]-0x30)];
           d3=0;

          break;
  case 19:d3=1;

          break;
  case 21: portb=disp[(ek[3]-0x30)];
           d4=0;

          break;
  case 27:d4=1;
           
           break;


case 29:
           sayac=0;
           break;

  }



}



void main()
{
  set_tris_b(1);
   set_tris_a(255);
  set_tris_c(96);
  setup_adc_ports(NO_ANALOGS);
  setup_adc(ADC_OFF);

  setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16);

//   setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
ext_int_edge( H_TO_L );  
rtc_init();
  onewire_init();
  rtc_init();
  rtc_get_time(hr,min,sec) ;
rtc_get_date(day,mth,year,dow);
  enable_interrupts(INT_TIMER0);
  enable_interrupts(INT_ext);
  enable_interrupts(GLOBAL);

//portc=0;
portb=0;
set_timer1(0);


while(true){

while (ayar1){

if (konum==0){


SAAT=HR*10;
SAAT=SAAT*10;
SAAT=SAAT+MIN;

sprintf(ek,"%04lu",SAaT);

if (arti1==1) {hr++;if (hr>23) hr=0;delay_ms(300);}
if (eksi1==1)  {hr--;if (hr>23) hr=23;delay_ms(300);}
delay_ms(300);
}
if (konum==1){


SAAT=HR*10;
SAAT=SAAT*10;
SAAT=SAAT+MIN;

sprintf(ek,"%04lu",SAaT);
if (arti1==1) {min++;if (min>59) min=0;delay_ms(300);}
if (eksi1==1)  {min--;if (min>59) min=59;delay_ms(300);}
delay_ms(300);
}

if (konum==2){

saat=mth*10;

SAAT=SAAT*10;
SAAT=SAAT+day;

sprintf(ek,"%04lu",SaaT);
if (arti1==1) {mth++;if (mth>12) mth=1;delay_ms(300);}
if (eksi1==1)  {mth--;if (mth==0) mth=12;delay_ms(300);}
delay_ms(300);
}

if (konum==3){

saat=mth*10;

SAAT=SAAT*10;
SAAT=SAAT+day;

sprintf(ek,"%04lu",SaaT);
if (arti1==1) {day++;
if (day>31) day=1;
delay_ms(300);}
if (eksi1==1)  {day--;if (day==0) day=31;delay_ms(300);}
delay_ms(300);
}
if (konum==4){



sprintf(ek,"%04u",year);
if (arti1==1) {year++;if (year>99) year=0;delay_ms(300); }
if (eksi1==1)  {year--;if (year>99) year=99;delay_ms(300);}
delay_ms(300);
}

arti1=0;
eksi1=0;
if (konum>4) konum=0;





delay_ms(300);

}
























a=onewire_ds1822_read_temp_c_lite();
sprintf(ek,"%02lu",a);
ek[3]=0x3a;
ek[2]=0x3b;
DELAY_MS(1000);

rtc_get_time(hr,min,sec) ;

SAAT=HR*10;
SAAT=SAAT*10;
SAAT=SAAT+MIN;

sprintf(ek,"%04lu",SAaT);

led=1;
DELAY_MS(500);

led=0;
DELAY_MS(500);
led=1;
DELAY_MS(500);

led=0;
DELAY_MS(500);
led=1;
DELAY_MS(500);

led=0;
DELAY_MS(500);


rtc_get_date(day,mth,year,dow);
saat=mth*10;

SAAT=SAAT*10;
SAAT=SAAT+day;

sprintf(ek,"%04lu",SaaT);

DELAY_MS(1000);

sprintf(ek,"%04u",year);
ek[0]=0x32;
ek[1]=0x30;
DELAY_MS(1000);


}}





http://rapidshare.com/files/24996925/saatsicaklik.zip.html

proteus dosyası içinde hex ve ccs dosyası içinde  yalnız proteus versiyon 6.9 sp5 kolay gelsin

Elektron74

@mustafacifci

#include <dallas.c>
#include <DS1302.C>
a=onewire_ds1822_read_temp_c_lite();

  Bu satırlarda derleme hatası oluşuyor. Kodlarınızı bir daha gözden geçirip paylaşırsanız sevinirim. Paylaşım için şimdiden teşekkürler.
Yarın; yorgun kimselerin değil rahatlarına kıyabilenlerindir.

mustafacifci

dostum ccs pic c kullanıyorum ve versiyonu 4.020
ha bu arada
http://rapidshare.com/files/25128734/saatsicaklik.zip.html
link te yine kaynak kodları ve dallas.c ile ds1302.c dosyalarınıda ekledim.
bu dosyaları ccs in altındaki drivers a kopyalarsanız hata vermez.
kolay gelsin  :)

Elektron74

@mustafacifci
Hocam bizdeki CCS nin versiyonu geri kalmış. Bana  elinizdeki CCS nin içindeki driver leri bir yere upload edebilirmisiniz. Teşekürler
Yarın; yorgun kimselerin değil rahatlarına kıyabilenlerindir.

mustafacifci

ekledim zaten yukarıdaki link içerisinde mevcut dallas.c ve d1302.c dosyaları

Elektron74

Teşekkürler hallettim.
Yarın; yorgun kimselerin değil rahatlarına kıyabilenlerindir.