vakitleri gösteren pano yardımı

Başlatan nova, 24 Eylül 2008, 13:54:01

POWER

#30
@Voltajcı
6 aylık veriyi aktarmak için proğram yok.bu verileri el ile tek tek yazmıştım.zaten ordaki saatler gerçekten ezan vakitlerini göstermiyor.bir kaç gün için takvimdem el ile girdim daha sonra bunları diğer günlere copy-paste yaptım.diğer başlıkla bu başlık bencede birleştirilmeli.kolay gelsin
TB6BKG

Voltajcı

#31
Alıntı yapılan: POWER - 26 Mart 2016, 14:14:29
@Voltajcı
6 aylık veriyi aktarmak için proğram yok.bu verileri el ile tek tek yazmıştım.zaten ordaki saatler gerçekten ezan vakitlerini göstermiyor.bir kaç gün için takvimdem el ile girdim daha sonra bunları diğer günlere copy-paste yaptım.diğer başlıkla bu başlık bencede birleştirilmeli.kolay gelsin

@POWER Aslında demek istediğim, upload ettiğiniz dosyanın içerisinde bulunan proteus çalışmasına ait hex dosyası var fakat yazılımı bulamadım ? O yazılımı açıp içerisine kendi yazdığım astronomik hesaplamalar içeren matematiksel formulleri ekleyeceğim, bölyece 6 aylık veri ile kısıtlı kalmayacağız.


edit : Hocam picbasic ile mi yazdınız ? Assembly ile mi ?

Cemre.

Bu vakitler nasıl hesaplanır bilgim yok açıkçası. Ancak benim bir önerim olabilir.

Eğer size gün doğumu ve gün batımı saatlerini hesaplamak yetiyorsa (yani bu saatlere dayanarak diğer saatler hesaplanabiliyorsa) bunu aşağıya yazacağım parametreleri girip hesaplatabileceğiniz bir yöntem var.

Enlem,
Boylam,
Gün,
Ay,
Yıl,
Saat,
Dakika,
Saniye.

Belki son üç parametre sizin için gerekmiyordur ancak benim bahsettiğim yöntem bu 8 parametre ile o anki Zenit ve Azimut açılarını, Gün Doğumu anını, Gün Batımı anını ve güneşlenme süresini hesaplayabiliyor. İşin güzel tarafı ise yukarıdaki bilginin tamamını tek bir sensörden (GPS) alabiliyorsunuz. Geriye bu veriyi işlemek kalıyor.

Bu yöntemi kullanarak bahsettiğim değerleri hesaplayan matlab kodunu yazmıştım ancak bu bir projede kullanılacak ve paylaşmam mümkün değil. Eğer anlattıklarım işinizi görüyorsa kaynak önerebilirim.

İyi çalışmalar, teşekkürler.

Voltajcı

Alıntı yapılan: Cemre. - 26 Mart 2016, 14:44:52
Bu vakitler nasıl hesaplanır bilgim yok açıkçası. Ancak benim bir önerim olabilir.

Eğer size gün doğumu ve gün batımı saatlerini hesaplamak yetiyorsa (yani bu saatlere dayanarak diğer saatler hesaplanabiliyorsa) bunu aşağıya yazacağım parametreleri girip hesaplatabileceğiniz bir yöntem var.

Enlem,
Boylam,
Gün,
Ay,
Yıl,
Saat,
Dakika,
Saniye.

Belki son üç parametre sizin için gerekmiyordur ancak benim bahsettiğim yöntem bu 8 parametre ile o anki Zenit ve Azimut açılarını, Gün Doğumu anını, Gün Batımı anını ve güneşlenme süresini hesaplayabiliyor. İşin güzel tarafı ise yukarıdaki bilginin tamamını tek bir sensörden (GPS) alabiliyorsunuz. Geriye bu veriyi işlemek kalıyor.

Bu yöntemi kullanarak bahsettiğim değerleri hesaplayan matlab kodunu yazmıştım ancak bu bir projede kullanılacak ve paylaşmam mümkün değil. Eğer anlattıklarım işinizi görüyorsa kaynak önerebilirim.

İyi çalışmalar, teşekkürler.

@POWER hocamın paylaştığı örnek Isis çalışmasının CCS C veya Micro C kodları olsa, proje bitti gibi aslında. Siz de kaynak önerebilirseniz var olan bilgilerle yeni bilgileri yoğururuz daha doğru verilere ulaşabiliriz belki. Şimdi iş ezan vakti olunca hata hatta hata payı bile olmamalı. Umarım, güzel bir çalışma ortaya çıkacaktır.
Teşekkürler @Cemre. 

POWER

@Voltajcı
indirdiğin klasörün içinde pbp uzantılı dosya açık kodları içeren dosya.tekrar indir bence.ben denemek için şimdi tekrar indirdim istediğin dosya mevcut.
TB6BKG

Voltajcı

#35
@POWER hocam dediğiniz .pbp uzantılı dosyayı açtım önceden hiç pic basic pro kullanmadığım için uzantısını da görememişim kusura bakmayınız, teşekkür ederim. Fakat, ben şimdi pic basic pro öğrenene kadar yine 2-3 ay geçecek, picproje.org da yıllardır tamamlanmaya çalışan vakitmatik projesi uzamaya devam edecek, eğer vaktiniz el verirse bir ekip çalışması ile bu işi tamamlasak, kodlarınızı varsa bilginiz MicroC veya CCS C ile yazar mısınız, elimde ki kodlarla birleştirerek delikli pertinaksta hazırda beklettiğim devrede denemeler yaparak ideal bir vakitmatik oluşturacağıma inanıyorum. Ayrıca sd kart modül kullanarak 5 vakite ait farklı makamlarda ki ezanları da her vakitte okutmak ek olarak ezan duası eklemeyi istiyorum bunlar bitince, 3 adet buton ile kişinin hem saat ayarlaması yapabilmesini hemde dışarıdan şehir plaka numarası girerek Türkiye'nin her yerinde kullanılmasını sağlayabilirim. En son yapılacak olan düşüncem de cihaza cisim algılama sensörü eklemek, böylece kişi vakitmatiğin önünden her geçtiğinde kısa bir hadis veya güzel bir kelam seslendirmek.

dursuncemal

#36
void  lcd_init(); 
void  send_cmd(unsigned char komut);
void  send_char(unsigned char bilgi);
void  busy();

#DEFINE   E               _RC7     
#DEFINE   RS              _RC5    
#DEFINE   RW              _RC6
#DEFINE   LCD_DATA        PORTB 
#DEFINE   LCD_DATA_TRIS   TRISB 
#DEFINE  _MESGUL          _RB7 
  
#DEFINE  DISP_ON          0x0C         
#DEFINE  DISP_ON_C        0x0E         
#DEFINE  DISP_ON_B        0x0F         
#DEFINE  DISP_OFF         0x08         
#DEFINE  CLR_DISP         0x01         
#DEFINE  ENTRY_INC        0x06         
#DEFINE  ENTRY_INC_S      0x07         
#DEFINE  ENTRY_DEC        0x04         
#DEFINE  ENTRY_DEC_S      0x05         
#DEFINE  DD_RAM_ADDR      0x80         
#DEFINE  DD_RAM_UL        0x80
//-----------------------------------------------------------------------------
void  lcd_init(){
unsigned char a = 3;

  LCD_DATA_TRIS = 0;
  delay_ms(50);

while(a > 0){
            LCD_DATA = 0X38;
            E = 1;
            delay_us(20);
            E = 0;
            delay_ms (5);
      a--;
}
 
send_cmd(DISP_ON);
send_cmd(CLR_DISP);
send_cmd(DISP_OFF);
send_cmd(DISP_ON);
send_cmd(ENTRY_INC);

}
//

//-----------------------------------------------------------------------------
void  send_cmd(unsigned char komut){
     // LCD_DATA_TRIS = 0;
      busy();
      RW = 0;
      LCD_DATA = komut;
      E = 1;
      delay_us(5);
      E = 0; 
      delay_us(5);
    
      
}
//----------------------------------------------------------------------------
void  send_char(unsigned char bilgi){
     // LCD_DATA_TRIS = 0;
      busy();
      RS = 1;
      RW = 0;
      LCD_DATA = bilgi;
      delay_us(1);
      E = 1;
      delay_us(1);
      E = 0;
      delay_us(1);
    
    }
//-----------------------------------------------------------------------------
void busy()
{
    RS=0;
    delay_us(4);
    RW=1;
    delay_us(4);
    E = 1;
LCD_DATA_TRIS  = 0B11111111;
delay_us(5);

#asm
 bak:
 bsf RW
 nop
 nop
 nop
 nop
 nop
 nop
 nop
 nop
 bsf E
 nop
 nop
 nop
 nop
 nop
 nop
 nop
 nop
 bcf E
 nop
 nop
 nop
 nop
 nop
 nop
 nop
 nop
 btfss _mesgul
 goto bak
 #endasm

LCD_DATA_TRIS  = 0;
      E = 0;
      RW = 0;
    
}
/*
 LCD_TRIS_PORT = 0xFF;                  // Set port to all input
        LCD_RW = 1;                     // Tell LCD we want to read
        delay_uS (1);
         
        delay_uS (1);
        retval = LCD_DATA_PORT;
        LCD_E = 0;
        LCD_TRIS_PORT = 0x00;  
        */
bu is icin oncelikle iyi bir rtc secmeniz lazim.kordinatlar icin birde cps modul eklerseniz tadindan yenmez.uzun zaman once bir calismam olmustu eskileri karistirdim.sadece buşabildiklerimi paylasiyorum.kod ccs de yazilmistir burdaki namaz.c julian takvimine gore hesaplamalari yapiyor.4x20 lcd kullanarak yapmistim isteyen istedigi gibi.ister lcd,ister7 segment lcd kulanir.

mesaj birleştirme:: 27 Mart 2016, 09:19:26

#include <main.h>
#include <d18io.h>
#include "D:\NAMAZC\LCD.H"
#include "PCF8583.h"
#include "namaz.h"
#define satir1 0x80
#define satir2 0xC0
#define satir3 0x94
#define satir4 0xD4

///////////////////////////////////////////////////////////////////////////////

#define cikis   0xff
#define giris  0
///////////////////////////////////////////////////////////////////////////////
int8 tus_bilgi, ezan = 7;
int8 menu;
int8 alt_menu;
int8 i;
date_time_t dt;
int8 saatBuff, dakikaBuff, tarihGunBuff,tarihAyBuff, tarihYilBuff;
boolean menuSet=0;
boolean  _flash = 0, _goster = 0;
int16 gecikme = 500,goster = 3000;
zaman alarmOn, alarmOff;
///////////////////////////////////////////////////////////////////////////////
boolean    tus_izin = 0;

const char yaz[19][29] = {
                         {"      DATE SET      "},
                         {"      TIME SET      "},
                         {"     ENLEM SET      "},
                         {"     BOYLAM SET     "},
                         {"     IMSAK SET      "},
                         {"     GUNES SET      "},
                         {"      OGLE SET      "},
                         {"     IKINDI SET     "},
                         {"     AKSAM SET      "},
                         {"     YATSI SET      "},
                         {"     GENEL SET      "},
                         {"  IMSAK TEMKIN SET  "},
                         {"  GUNES TEMKIN SET  "},
                         {"  OGLE TEMKIN SET   "},
                         {" IKINDI TEMKIN SET  "},
                         {"  AKSAM TEMKIN SET  "},
                         {"  YATSI TEMKIN SET  "},
                         {"   YAZ SAATI SET    "},
                         {"    KONTRAST SET    "},
                                              };

///////////////////////////////////////////////////////////////////////////////

               
int8     m_ust[19][3] = {
               {31,12,99},  //Tarih
               {24,59,59},  //Saat
               {99,99,'S'}, //Enlem 41,02
               {99,99,'S'}, //boylam 28,97
               {60,60,'S'}, //imsak role
               {60,60,'S'}, //gunes role
               {60,60,'S'}, //ogle role
               {60,60,'S'}, //ikindi role
               {60,60,'S'}, //aksam role
               {60,60,'S'}, //yatsi role
               {60,60,'S'}, //global role
               {15,30,'S'}, //temkin imsak
               {15,30,'S'}, //temkin gunes 
               {15,30,'S'}, //ogle
               {15,'S','S'}, // ikindi         14
               {15,30,'S'}, //temkin aksam
               {15,30,'S'}, //yatsı
               {1,'S','S'}, // yaz saati
               {99,'S','S'}, //kontrast
               };          
signed int8     m_alt[19][3] = {
               {0,0,0},  //Tarih
               {0,0,0},  //Saat
               {0,0,'S'}, //Enlem 41,02
               {0,0,'S'}, //boylam 28,97
               {0,0,'S'}, //imsak role
               {0,0,'S'}, //gunes role
               {0,0,'S'}, //ogle role
               {0,0,'S'}, //ikindi role
               {0,0,'S'}, //aksam role
               {0,0,'S'}, //yatsi role
               {0,0,'S'}, //global role
               {-15,0,'S'}, //temkin imsak
               {-15,0,'S'}, //temkin gunes 
               {-15,0,'S'}, //ogle
               {-15,'S','S'}, // ikindi  
               {-15,0,'S'}, //temkin aksam
               {-15,0,'S'}, //yatsı
               {0,'S','S'}, // yaz saati
               {0,'S','S'}, //kontrast
               }; 

////////////////////////////////////////////////////////////////////////////////
 signed int8    m_table[19][4] = {
               {30,11,11,3},  //Tarih         0
               {12,15,00,3},  //Saat          1
               {25,23,'S',2}, //Enlem 41,02   2
               {28,97,'S',2}, //boylam 28,97  3               
               
               {15,15,'S',2}, //imsak role    4
               {15,15,'S',2}, //gunes role    5
               {15,15,'S',2}, //ogle role     6
               {15,15,'S',2}, //ikindi role   7
               {15,15,'S',2}, //aksam role    8
               {15,15,'S',2}, //yatsi role    9
               {15,15,'S',2}, //global role   10  
               
               {0,'S','S',1}, //temkin imsak    11
               {0,'S','S',1}, // gunes          12
               {0,'S','S',1}, //temkin ogle     13
               {0,'S','S',1}, // ikindi         14
               {0,'S','S',1}, //temkin aksam    15
               {0,'S','S',1}, //yatsı           16
               {0,'S','S',1}, // yaz saati      17
               {80,'S','S',1}, //kontrast       18
               
               };
////////////////////////////////////////////////////////////////////////////////
void ee_reflesh() {
int8 a = 2;
disable_interrupts(GLOBAL);
while(a < 19){
set_pwm1_duty(30);
m_table[a][0] = read_eeprom(a*2);
m_table[a][1] = read_eeprom(a*2+1);

a++;

}
}
void ezanVaktiYaz(char ezan)
{
   char aa[11];
   zaman ezanSaati, onEzanRole, offEzanRole;
   switch (ezan)
   {
      case 0 : aa = "IMSAK  :"; 
               ezanSaati = imsak;
               onEzanRole = onImsak;
               offEzanRole = offImsak;
               break;
      case 1 : aa = "GUNES  :";
               ezanSaati = gunes;
               onEzanRole = onGunes;
               offEzanRole = offGunes;
               break;      
      case 2 : aa = "OGLE   :";
               ezanSaati = ogle;
               onEzanRole = onOgle;
               offEzanRole = offOgle;
               break;      
      case 3 : aa = "IKINDI :";//10 karakter
               ezanSaati = ikindi;
               onEzanRole = onIkindi;
               offEzanRole = offIkindi;
               break;      
      case 4 : aa = "AKSAM  :";
               ezanSaati = aksam;
               onEzanRole = onAksam;
               offEzanRole = offAksam;
               break;
      case 5 : aa = "YATSI  :";
               ezanSaati = yatsi;
               onEzanRole = onYatsi;
               offEzanRole = offYatsi;      
      
   } 
  
   
   send_cmd(satir1);
   printf(send_char,"%s    %02i:%02i   ", aa, ezanSaati.saat,ezanSaati.dakika);

   send_cmd(satir2);
   printf(send_char,"--------------------");
   
   send_cmd(satir3);
   printf(send_char,"ON  TIME :  %02i:%02i   ",onEzanRole.saat,onEzanRole.dakika);

   send_cmd(satir4);
   printf(send_char,"OFF TIME :  %02i:%02i   ",offEzanRole.saat, offEzanRole.dakika);
 

}
boolean zamanKontrol(zaman zamanOff1, zaman zamanOff2)
{
   boolean aralik = FALSE;
   int16 anlikDakika = (int16)dt.hours * 60 + dt.minutes;
   if (((int16)zamanOff1.saat * 60 + zamanOff1.dakika) < anlikDakika &&  anlikDakika < ((int16)zamanOff2.saat * 60 + zamanOff2.dakika)) aralik = TRUE;
   return aralik;
}
////////////////////////////////////////////////////////////////////////////////
void ezanVaktiHesapla()
{
   ee_reflesh();   
   set_pwm1_duty(0);
   PCF8583_init();
   PCF8583_read_datetime(&dt);
   gun = dt.day;
   ay = dt.month;
   yil = dt.year + 2000;
   
   userTemkin.imsak = m_table[11][0];
   userTemkin.gunes = m_table[12][0];
   userTemkin.ogle = m_table[13][0];
   userTemkin.ikindi = m_table[14][0];
   userTemkin.aksam = m_table[15][0];
   userTemkin.yatsi = m_table[16][0];

   enlem = 41.02;//((int16)m_table[2][0]*100 +m_table[2][1]) / 100.0;
   boylam = 28.97;//((int16)m_table[3][0]*100 +m_table[3][1]) / 100.0;
   yazSaati = m_table[17][0];
   NamazVakti();
   
   onImsak = setOnOff(imsak,-m_table[4][0]); //imsak on
   offImsak = setOnOff(imsak,m_table[4][1]);//imsak off
      
   onGunes = setOnOff(gunes,-m_table[5][0]); //Güneş on
   offGunes = setOnOff(gunes,m_table[5][1]);//Güneş off
   if (zamanKontrol(offImsak, offGunes)) ezan = 1;
   
   onOgle = setOnOff(ogle,-m_table[6][0]);   //Ogle on
   offOgle = setOnOff(ogle,m_table[6][1]);  //Ogle off
   if (zamanKontrol(offGunes, offOgle)) ezan = 2;
   
   onIkindi = setOnOff(ikindi,-m_table[7][0]); //ikindi on
   offIkindi = setOnOff(ikindi,m_table[7][1]);//ikindi off
   if (zamanKontrol(offOgle, offIkindi)) ezan = 3;
   
   onAksam = setOnOff(aksam,-m_table[8][0]);   //Aksam on
   offAksam = setOnOff(aksam,m_table[8][1]);  //Aksam off
   if (zamanKontrol(offIkindi, offAksam)) ezan = 4;
   
   onYatsi = setOnOff(yatsi,-m_table[9][0]);   //yatsi on
   offYatsi = setOnOff(yatsi,m_table[9][1]);  //yatsi off
   if (zamanKontrol(offAksam, offYatsi)) ezan = 5;
   
   zaman gece;
   gece.saat = 24; gece.dakika = 0;
   if (zamanKontrol(offYatsi, gece)) ezan = 5;
}
void kontrolRTC()
{ 
   boolean dursun = 0;
   if (tarihGunBuff != m_table[0][0])  {dt.day = m_table[0][0]; dursun = 1;}
   if (tarihAyBuff != m_table[0][1]) {dt.month = m_table[0][1]; dursun = 1;}
   if (tarihYilBuff != m_table[0][2]) {dt.year = m_table[0][2]; dursun = 1;}
   
   if (saatBuff != m_table[1][0]) {dt.hours = m_table[1][0]; dursun = 1;}
   if (dakikaBuff != m_table[1][1]) {dt.minutes = m_table[1][1]; dursun = 1;}  
   dt.seconds = 0;
   
   if (dursun) PCF8583_set_datetime(&dt);
}

///////////////////////////////////////////////////////////////////////////////
void ee_yaz() {
int8 a = 2;
disable_interrupts(GLOBAL);
set_pwm1_duty(30);
while(a < 19){

write_eeprom(a*2,m_table[a][0]);//  m_table[a][0] = read_eeprom(a*2);
write_eeprom(a*2+1,m_table[a][1]);   // m_table[a][1] = read_eeprom(a*2+1);
 
a++;

}
set_pwm1_duty(0);

enable_interrupts(GLOBAL);
}
///////////////////////////////////////////////////////////////////////////////

void tus_oku(){

delay_ms(5);
trisb = 0xff;
_RA0 = 0;

if(portb == 0xff){tus_izin = 1;};

if(tus_izin && portb != 0xff){tus_bilgi = portb; tus_izin = 0;}

_RA0 = 1;
                     
trisb = 0;

}

void islem(){

tarihGunBuff = m_table[0][0] = dt.day;
tarihAyBuff = m_table[0][1] = dt.month;
tarihYilBuff = m_table[0][2] = dt.year;

saatBuff = m_table[1][0] = dt.hours;
dakikaBuff = m_table[1][1] = dt.minutes;

send_cmd(CLR_DISP);

while(menuSet){
tus_oku();

if(tus_bilgi == 223)
{
   if(menu < 18){
         ee_yaz();
         if (menu == 0 || menu == 1) {kontrolRTC();}
         menu++; 
         alt_menu = 0;
   } 
}//menu yukarı


if(tus_bilgi == 239){if(menu > 0){ee_yaz();if (menu == 0 || menu == 1) {kontrolRTC();} menu--; alt_menu = 0;}}// menu asagı

if(tus_bilgi == 251){if(alt_menu  <  m_table[menu][3]){ alt_menu ++; if(alt_menu == m_table[menu][3]){alt_menu = 0;} }}//altmenu artır azalt

if(tus_bilgi == 191){if(m_table[menu][alt_menu] <  m_ust[menu][alt_menu]){ m_table[menu][alt_menu] ++; }}//degısken artır

if(tus_bilgi == 127){if(m_table[menu][alt_menu] > m_alt[menu][alt_menu]){ m_table[menu][alt_menu]--; }}//degısken azalt


 
  send_cmd(0X80); for(i=0; yaz[menu][i] != '\0';i++) send_char(yaz[menu][i]);
  send_cmd(0XC0); printf(send_char,"--------------------");
 
  if (menu >= 4 && menu <= 10)
  {
      send_cmd(0X94);  
      if(m_table[menu][3]==2 ) printf(send_char,"   ON:-%02i  OFF:%02i", m_table[menu][0], m_table[menu][1]);
      send_cmd(0XD4);
  
  if(_flash){
            if(alt_menu == 0){ printf(send_char,"       --          ");}
            if(alt_menu == 1){ printf(send_char,"               --  ");}
            }
            else{printf(send_char,"                   ");}
  }
  else
  {
     send_cmd(0X94 );  
     if(m_table[menu][3]==3 ) printf(send_char,"      %02i.%02i.%02i", m_table[menu][0], m_table[menu][1],m_table[menu][2]);
     
     if(m_table[menu][3]==2 ) {printf(send_char,"      %02i.%02i      ", m_table[menu][0], m_table[menu][1]);}
     
     if(m_table[menu][3]==1 ){ 

              if (menu >= 11 && menu <= 16){ 
                                             if(m_table[menu][0] < 0){
                                                                      printf(send_char,"         %i         ", m_table[menu][0]);
                                                                     }else{ printf(send_char,"         %02i         ", m_table[menu][0]);
                                                                           
                                                                           }
                                            
                                            
                                            } else{ printf(send_char,"         %02i         ", m_table[menu][0]);}}

     
     
     
     send_cmd(0XD4 +2 );
     
 if(_flash == true){
     if(alt_menu == 0){
                      if(menu > 10 )printf(send_char,"       --         ");
                      else printf(send_char,"    --            ");
                                      
                      }
     
     
     if(alt_menu == 1){ printf(send_char,"       --         ");}
     if(alt_menu == 2){ printf(send_char,"          --      ");}
     
     
     
     
  }else{ printf(send_char,"                ");}
     }
  
      if (tus_bilgi == 247) menuSet = FALSE;
      tus_bilgi = 0;
      
  }
  ee_yaz();
  menu = 0;
  ezanVaktiHesapla();
  send_cmd(CLR_DISP);
}
///////////////////////////////////////////////////////////////////////////////MAİN
void main()
{

   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16|RTCC_8_bit);      //2.0 ms overflow
   setup_timer_2(T2_DIV_BY_16,124,1);      //1.0 ms overflow, 1.0 ms interrupt
   setup_ccp1(CCP_PWM);
   setup_ccp2(CCP_PWM);
   set_pwm1_duty(0);
   set_pwm2_duty(30);
   setup_comparator(NC_NC_NC_NC);
   enable_interrupts(INT_RTCC);
   disable_interrupts(GLOBAL);
   TRISB = 0;
   PORTB = 0;
   TRISC = 0;
   PORTC = 0;
   TRISA = 0;
   delay_ms(100);
   lcd_init();
   delay_ms(100);
   send_cmd(CLR_DISP);
   port_b_pullups(0b11111111);
   menu = 0;
   alt_menu = 0;
   
/*
 signed int8    m_table[19][4] = {
               {30,11,11,3},  //Tarih         0
               {12,15,00,3},  //Saat          1
               {25,23,'S',2}, //Enlem 41,02   2
               {28,97,'S',2}, //boylam 28,97  3               
               
               {15,15,'S',2}, //imsak role    4
               {15,15,'S',2}, //gunes role    5
               {15,15,'S',2}, //ogle role     6
               {15,15,'S',2}, //ikindi role   7
               {15,15,'S',2}, //aksam role    8
               {15,15,'S',2}, //yatsi role    9
               {15,15,'S',2}, //global role   10  
               
               {-17,'S','S',1}, //temkin imsak    11
               {0,'S','S',1}, // gunes          12
               {0,'S','S',1}, //temkin ogle     13
               {0,'S','S',1}, // ikindi         14
               {0,'S','S',1}, //temkin aksam    15
               {0,'S','S',1}, //yatsı           16
               {0,'S','S',1}, // yaz saati    17
               {80,'S','S',1}, //kontrast     18
               
               };*/
 



   if(read_eeprom(254) != 13 ){
                                                     
                               for (i = 0 ; i < 254  ;i++){write_eeprom(i,0);}                                                  
                               write_eeprom(254,13);                                             
                                                     }

  ee_reflesh();   
  set_pwm1_duty(0);
  ezanVaktiHesapla();

  PCF8583_init();




for(;;){  

   

   tus_oku();
   if (tus_bilgi == 251) {tus_bilgi = 0 ; menuSet=TRUE;}
   if (menuSet) islem();
   PCF8583_read_datetime(&dt);
   delay_ms(100);

   if (_goster){
      ezanVaktiYaz(ezan);
   }
   else
   {
      send_cmd(0x80);
      printf(send_char," %02i/%02i/%02i",dt.day,dt.month,dt.year);
      
      printf(send_char,"   %02i:%02i:%02i",dt.hours, dt.minutes,dt.seconds);   
      set_pwm2_duty(30);

   
      send_cmd(0xC0);
      printf(send_char," IM:%02i:%02i   GU:%02i:%02i", imsak.saat, imsak.dakika, gunes.saat, gunes.dakika);
      
      send_cmd(0x94);
      printf(send_char," OG:%02i:%02i   IK:%02i:%02i", ogle.saat, ogle.dakika, ikindi.saat, ikindi.dakika);
      
      send_cmd(0xD4);
      printf(send_char," AK:%02i:%02i   YA:%02i:%02i", aksam.saat, aksam.dakika, yatsi.saat, yatsi.dakika);  
   }
   

}
}
/////////////////////////////////////////////////////////////////////////////
#int_RTCC

void  RTCC_isr(void) 
{
if(gecikme){gecikme--;}else {gecikme = 200; _flash = ! _flash;}
if(goster){goster--;}else {goster = 3000; _goster = !_goster;}
}

anaprogram

mesaj birleştirme:: 27 Mart 2016, 09:19:59

#include <18F2520.h>
#FUSES NOWDT, WDT128, INTRC_IO, NOFCMEN, NOIESO, NOPUT, NOBROWNOUT, BORV20, NOPBADEN, NOLPT1OSC, NOMCLR, STVREN, NOLVP, NOXINST, NODEBUG, NOPROTECT, NOCPB, NOCPD, NOWRT, NOWRTC, NOWRTB, NOWRTD, NOEBTR, NOEBTRB
#use delay(clock=8000000,RESTART_WDT)
#use i2c(Master,Fast,sda=PIN_C4,scl=PIN_C3)


mesaj birleştirme:: 27 Mart 2016, 09:20:44

#include <math.h>
#define piB2 1.570796326 // pi / 2
#define RAD  0.017453293 // RADYAN M_PI/180
#define DER  57.295779513 // DERECE 180/M_PI

typedef struct {
   signed int8 saat,dakika;
} zaman;

typedef struct{
    signed int8 imsak;
    signed int8 gunes;
    signed int8 ogle;
    signed int8 ikindi;
    signed int8 aksam;
    signed int8 yatsi;
} sTemkin;
zaman imsak, gunes, ogle, ikindi, aksam, yatsi;
zaman onImsak, onGunes, onOgle, onIkindi, onAksam, onYatsi;
zaman offImsak, offGunes, offOgle, offIkindi, offAksam, offYatsi;
sTemkin temkin, userTemkin;

void NamazVakti(void);
void namazVaktiHesapla();
void temkinAyarla();
float32 JulianTarihi();
zaman setOnOff(zaman saat_dk, signed int sure);

float32 bTam(float32 tm);
float32 cot(float32 tm);
float32 myCos(float32 tm);
float32 acot(float32 tm);

float32 enlem;
float32 boylam;
signed int8 yazSaati;
signed int8 saat;
signed int8 dakika;
int16 yil, ttemp;
int8 ay;
int8 gun;
zaman setOnOff(zaman ezanSaati, signed int8 sure)
{
   zaman donus;
   int16 toplamDakika;
   toplamDakika = (int16)ezanSaati.saat * 60 + ezanSaati.dakika + sure;
   donus.saat = toplamDakika / 60;
   donus.dakika = toplamDakika % 60;
   return donus;
}
void temkinAyarla() {
    temkin.imsak = -2 + userTemkin.imsak;
    temkin.gunes = -7 + userTemkin.gunes;
    temkin.ogle = 6 + userTemkin.ogle;
    temkin.ikindi = 5 + userTemkin.ikindi;
    temkin.aksam = 8 + userTemkin.aksam;
    temkin.yatsi = 3 + userTemkin.yatsi;
}

void NamazVakti(void){
     temkinAyarla();
     namazVaktiHesapla();
}
/*float32 mutlakDeger(float32 sayi)
{
    if (sayi >= 0)
        return sayi;
    else
        return -sayi;
}*/

float32 bTam(float32 tm) {
    if (tm >= 0) 
      return tm - ((int32)(tm / 360) * 360);
    else
      return  360 - abs(tm) + ((int32)(abs(tm) / 360) * 360);
    
}


float32 cot(float32 tm) {
    return cos(tm) / sin(tm);
}

float32 myCos(float32 tm) {
    return acos(tm) * DER;
}

float32 acot(float32 tm) {
    return piB2 - atan(tm);
}


void saatDuzelt(){
   if (dakika >= 60)
   {
      dakika = dakika - 60;
      saat = saat + 1;
   }
   
   if (dakika < 0)
   {
      dakika = dakika + 60;
      saat = saat - 1;
   }
}
float32 JulianTarihi() {
    int16 artikYil;//yıl - 1900
    int16 sigs = gun;
    int8 i;
    char ayGunu[]={31,28,31,30,31,30,31,31,30,31,30,31};    
    artikYil = yil-1900;// Yıl 2011 ise, tm_tarih->tm_year komutu (2011-1900) 111 sonucunu verir. Yani yil = 111 olur.
    if (artikYil % 4 == 0) ayGunu[1] = 29;//Şubat ayı
    for (i = 0; i <= ay - 2; i++) sigs += ayGunu[i];
    ttemp = sigs;
    float32 jdn = (365*artikYil)+((int8)((artikYil-1)/4))+sigs;// miladi 00.01.1900 = 31 Aralık 1899 julian 2415020    
    return jdn + 0.5;
}

void namazVaktiHesapla() {

    float32 ikindi_acisi;
    float32 tmpY = 0;
    float32 T = 0;

    int8 _ulkesaati = 2 + yazSaati;

    float32 vgunes = 0;
    float32 vyatsi = 0;
    float32 vaksam = 0;
    float32 vimsak = 0;
    float32 vogle = 0;
    float32 vikindi = 0;
    float32 ogleNamazi = 0;
    
    float32 L0 = 0;
    float32 M0 = 0;
    float32 e = 0;
    float32 Ct = 0;
    float32 L = 0;
    float32 M = 0;
    float32 eps = 0;
    float32 delta = 0;
    float32 RA = 0;
    float32 ET = 0;
    float32 gOgle = 0;
    float32 sR = 0;
    float32 powT2 = 0;
    float32 aci;

    T = JulianTarihi() / 36525;// Bir yuzyıl 36525 gündür. (365 * 100) + (100 / 4) = 36525
    powT2 = pow(T, 2);

    L0 = 279.69668 + 36000.76892 * T + 0.0003025 * powT2;
    L0 = bTam(L0);
    M0 = 358.47583 + 35999.04975 * T - 0.00015 * powT2 - 0.0000033 * powT2*T;
    M0 = bTam(M0);
    e = 0.01675104 - 0.0000418 * T - 0.000000126 * powT2;
    Ct = (1.91946 - (0.004789 * T) - (0.000014 * powT2)) * sin(RAD*M0) + (0.020094 - (0.0001 * T)) * sin(RAD*2 * M0) + (0.000293 * sin(RAD*3 * M0));
    L = L0 + Ct;
    
    aci = RAD * bTam(259.18 - 1934.142 * T);  
    
    L = L - 0.000015708 * sin(aci);

    M = M0 + Ct;

    eps = 23.452294 - 0.0130125 * T - 0.00000165 * powT2 + 0.000000503 * powT2 * T;

    delta = DER * asin(sin(RAD*eps) * sin(RAD*L));
    
    delta = bTam(delta);

    RA = DER * atan(cos(RAD*eps) * tan(RAD*L));
    RA = bTam(RA);

    tmpY = pow(tan(RAD*eps / 2), 2);

    ET = tmpY * sin(RAD*2 * L0) - 2 * e * sin(RAD*M0) + 4 * e * tmpY * sin(RAD*M0) * cos(RAD*2 * L0) - (1 / 2) * tmpY * tmpY * sin(RAD*4 * L0) - (5 / 4) * e * e * sin(RAD*2 * M0);

    ET = -(ET / RAD) / 15;

    gOgle = 12 + ET;

    vogle = gOgle - ((boylam / 15) - _ulkesaati); //Zeval Vakti

    ogleNamazi = vogle;
    
//********************* öğle **********************
    saat = (int8) (ogleNamazi);
    dakika = (int8) ((ogleNamazi - saat) * 60);
    dakika = dakika + temkin.ogle + 2;
    saatduzelt();
    ogle.saat = saat;
    ogle.dakika = dakika;

    sR = 90 -(enlem - delta);
   
    float32 sin_deltaXenlem = sin(RAD*delta) * sin(RAD*enlem);
    float32 cos_deltaXenlem = cos(RAD*delta) * cos(RAD*enlem);

//************ imsak **********************************
    vimsak = vogle - myCos((-0.3090170026 - sin_deltaXenlem) / (cos_deltaXenlem)) / 15;//-0.309017002593046
        saat = (int8) (vimsak);
        dakika = (int8) ((vimsak - saat) * 60);
        dakika = dakika + temkin.imsak;
        saatduzelt();
        imsak.saat = saat;
        imsak.dakika = dakika;
 //************ güneş **********************************       
    vgunes = vogle - myCos((-0.017452234123174 - sin_deltaXenlem) / (cos_deltaXenlem)) / 15;
        saat = (int8) (vgunes);
        dakika = (int8) ((vgunes - saat) * 60);
        dakika = dakika + temkin.gunes;
        saatDuzelt();
        gunes.saat = saat;
        gunes.dakika = dakika;

//************ ikindi **********************************
    ikindi_acisi = acot(cot(RAD*sR) + 1);
    vikindi = vogle + myCos((sin(ikindi_acisi) - sin_deltaXenlem) / (cos_deltaXenlem)) / 15;
        saat = (int8) (vikindi);
        dakika = (int8) ((vikindi - saat) * 60);
        dakika = dakika + temkin.ikindi;
        saatDuzelt();
        ikindi.saat = saat;
        ikindi.dakika = dakika;
//************ aksam **********************************
    vaksam = vogle + myCos((-0.017452234123174 - sin_deltaXenlem) / (cos_deltaXenlem)) / 15;
        saat = (int8) (vaksam);
        dakika = (int8) ((vaksam - saat) * 60);
        dakika = dakika + temkin.aksam;
        saatDuzelt();
        aksam.saat = saat;
        aksam.dakika = dakika;
//************ yatsı **********************************
  // vyatsi = vogle + myCos((sin(RAD*(-17)) - sin_deltaXenlem) / (cos_deltaXenlem)) / 15;
   
   vyatsi = vogle + myCos((-0.29237155 - sin_deltaXenlem) / (cos_deltaXenlem)) / 15;
        saat = (int8) (vyatsi);
        dakika = (int8) ((vyatsi - saat) * 60);
        dakika = dakika + temkin.yatsi;
        saatDuzelt();
        yatsi.saat = saat;
        yatsi.dakika = dakika;
}

@POWER julian tarihi hesaplama

mesaj birleştirme:: 27 Mart 2016, 09:21:20

#ifndef PCF8583_SDA
#define PCF8583_SDA  PIN_C4
#define PCF8583_SCL  PIN_C3
#endif

#use i2c(master, sda=PCF8583_SDA, scl=PCF8583_SCL)

#ifndef PCF8583_WRITE_ADDRESS
#define PCF8583_WRITE_ADDRESS 0xA0
#define PCF8583_READ_ADDRESS  0xA1
#endif

// Register addresses
#define PCF8583_CTRL_STATUS_REG    0x00
#define PCF8583_100S_REG           0x01
#define PCF8583_SECONDS_REG        0x02
#define PCF8583_MINUTES_REG        0x03
#define PCF8583_HOURS_REG          0x04
#define PCF8583_DATE_REG           0x05
#define PCF8583_MONTHS_REG         0x06
#define PCF8583_TIMER_REG          0x07

#define PCF8583_ALARM_CONTROL_REG  0x08
#define PCF8583_ALARM_100S_REG     0x09
#define PCF8583_ALARM_SECS_REG     0x0A
#define PCF8583_ALARM_MINS_REG     0x0B
#define PCF8583_ALARM_HOURS_REG    0x0C
#define PCF8583_ALARM_DATE_REG     0x0D
#define PCF8583_ALARM_MONTHS_REG   0x0E
#define PCF8583_ALARM_TIMER_REG    0x0F

// Use the first NVRAM address for the year byte.
#define PCF8583_YEAR_REG           0x10


// Commands for the Control/Status register.
#define PCF8583_START_COUNTING     0x00
#define PCF8583_STOP_COUNTING      0x80



/*char const weekday_names[7][10] =
{
{"Sunday"},
{"Monday"},
{"Tuesday"},
{"Wednesday"},
{"Thursday"},
{"Friday"},
{"Saturday"}
};  */ 
               
// This structure defines the user's date and time data.
// The values are stored as unsigned integers.  The user
// should declare a structure of this type in the application
// program. Then the address of the structure should be
// passed to the PCF8583 read/write functions in this
// driver, whenever you want to talk to the chip.
typedef struct
{
int8 seconds;    // 0 to 59
int8 minutes;    // 0 to 59
int8 hours;      // 0 to 23  (24-hour time)
int8 day;        // 1 to 31
int8 month;      // 1 to 12
int8 year;       // 00 to 99
int8 weekday;    // 0 = Sunday, 1 = Monday, etc.
}date_time_t;


//----------------------------------------------
void PCF8583_write_byte(int8 address, int8 data)
{
   disable_interrupts(GLOBAL);
   i2c_start();
   i2c_write(PCF8583_WRITE_ADDRESS);
   i2c_write(address);
   i2c_write(data);
   i2c_stop();
   enable_interrupts(GLOBAL);
}   

//----------------------------------------------
int8 PCF8583_read_byte(int8 address)
{
   int8 retval;
   
   disable_interrupts(GLOBAL);
   i2c_start();
   i2c_write(PCF8583_WRITE_ADDRESS);
   i2c_write(address);
   i2c_start();
   i2c_write(PCF8583_READ_ADDRESS);
   retval = i2c_read(0);
   i2c_stop();
   enable_interrupts(GLOBAL);
   return(retval);
}   


void PCF8583_init(void)
{
   PCF8583_write_byte(PCF8583_CTRL_STATUS_REG,
                                 PCF8583_START_COUNTING);
}   

//----------------------------------------------
// This function converts an 8 bit binary value
// to an 8 bit BCD value.
// The input range must be from 0 to 99.

int8 bin2bcd(int8 value)
{
char retval;

retval = 0;

for(;;)
  {
   // Get the tens digit by doing multiple subtraction
   // of 10 from the binary value.
   if(value >= 10)
     {
      value -= 10;
      retval += 0x10;
     }
   else // Get the ones digit by adding the remainder.
     {
      retval += value;
      break;
     }
   }

return(retval);
}

//----------------------------------------------
// This function converts an 8 bit BCD value to
// an 8 bit binary value.
// The input range must be from 00 to 99.

char bcd2bin(char bcd_value)
{
char temp;

temp = bcd_value;

// Shifting the upper digit right by 1 is
// the same as multiplying it by 8.
temp >>= 1;

// Isolate the bits for the upper digit.
temp &= 0x78;

// Now return: (Tens * 8) + (Tens * 2) + Ones
return(temp + (temp >> 2) + (bcd_value & 0x0f));

}

//----------------------------------------------
void PCF8583_set_datetime(date_time_t *dt)
{
int8 bcd_sec;
int8 bcd_min;
int8 bcd_hrs;
int8 bcd_day;
int8 bcd_mon;

// Convert the input date/time into BCD values
// that are formatted for the PCF8583 registers. 
bcd_sec = bin2bcd(dt->seconds);
bcd_min = bin2bcd(dt->minutes);
bcd_hrs = bin2bcd(dt->hours);   
bcd_day = bin2bcd(dt->day) | (dt->year << 6);
bcd_mon = bin2bcd(dt->month) | (dt->weekday << 5);

// Stop the RTC from counting, before we write to
// the date and time registers.
PCF8583_write_byte(PCF8583_CTRL_STATUS_REG,
                              PCF8583_STOP_COUNTING);

// Write to the date and time registers.  Disable interrupts
// so they can't disrupt the i2c operations.
disable_interrupts(GLOBAL);
i2c_start();
i2c_write(PCF8583_WRITE_ADDRESS);
i2c_write(PCF8583_100S_REG);   // Start at 100's reg.   
i2c_write(0x00);               // Set 100's reg = 0
i2c_write(bcd_sec); 
i2c_write(bcd_min);
i2c_write(bcd_hrs);   
i2c_write(bcd_day);
i2c_write(bcd_mon);
i2c_stop();
enable_interrupts(GLOBAL);

// Write the year byte to the first NVRAM location.
// Leave it in binary format.
PCF8583_write_byte(PCF8583_YEAR_REG, dt->year);

// Now allow the PCF8583 to start counting again.
PCF8583_write_byte(PCF8583_CTRL_STATUS_REG,
                              PCF8583_START_COUNTING);
}

//----------------------------------------------
// Read the Date and Time from the hardware registers
// in the PCF8583.   We don't have to disable counting
// during read operations, because according to the data
// sheet, if any of the lower registers (1 to 7) is read,
// all of them are loaded into "capture" registers.
// All further reading within that cycle is done from
// those registers.

void PCF8583_read_datetime(date_time_t *dt)
{
int8 year_bits;
int8 year;

int8 bcd_sec;
int8 bcd_min;
int8 bcd_hrs;
int8 bcd_day;
int8 bcd_mon;

// Disable interrupts so the i2c process is not disrupted.
disable_interrupts(GLOBAL);

// Read the date/time registers inside the PCF8583.
i2c_start();
i2c_write(PCF8583_WRITE_ADDRESS);
i2c_write(PCF8583_SECONDS_REG);   // Start at seconds reg.
i2c_start();
i2c_write(PCF8583_READ_ADDRESS);

bcd_sec = i2c_read();     
bcd_min = i2c_read();     
bcd_hrs = i2c_read(); 
bcd_day = i2c_read();
bcd_mon = i2c_read(0);
i2c_stop();

enable_interrupts(GLOBAL);

// Convert the date/time values from BCD to
// unsigned 8-bit integers.  Unpack the bits
// in the PCF8583 registers where required.
dt->seconds = bcd2bin(bcd_sec);     
dt->minutes = bcd2bin(bcd_min);     
dt->hours   = bcd2bin(bcd_hrs & 0x3F); 
dt->day     = bcd2bin(bcd_day & 0x3F);
dt->month   = bcd2bin(bcd_mon & 0x1F);
dt->weekday = bcd_mon >> 5;
year_bits   = bcd_day >> 6;   

// Read the year byte from NVRAM.
// This is an added feature of this driver.
year = PCF8583_read_byte(PCF8583_YEAR_REG);

// Check if the two "year bits" were incremented by
// the PCF8583.  If so, increment the 8-bit year
// byte (read from NVRAM) by the same amount.
while(year_bits != (year & 3))
      year++;

dt->year = year;

// Now update the year byte in the NVRAM
// inside the PCF8583.
PCF8583_write_byte(PCF8583_YEAR_REG, year);

}

mesaj birleştirme:: 27 Mart 2016, 09:23:37

bulundugunuz yerin kordinatlarini girdiginizde namaz vaktini hesaplayabilirsiniz yanliz rtc icin iyi bir kristal secerseniz zaman kaymalari minimum olur.
:=

POWER

#37
@Voltajcı
malesef pbp dan başka dil bilmiyorum,bu dildede seviyem çok yüksek değil malesef ama bu proje için elimden gelenleri yaparım.
TB6BKG


Voltajcı

Koordinat verisini önce eeprom a kayıt edip, ilgili formüllerede eepromdan mi çekilmeli? Elektrik gittiğinde dahi, tekrar çalışınca kişi koordinat sehir plaka vs. Girmemis olur, bunu bu sekilde yapsam olur mu yoksa farkli bir öneriniz var mi ?

Cemre.

Alıntı yapılan: Voltajcı - 28 Mart 2016, 09:21:47
Koordinat verisini önce eeprom a kayıt edip, ilgili formüllerede eepromdan mi çekilmeli? Elektrik gittiğinde dahi, tekrar çalışınca kişi koordinat sehir plaka vs. Girmemis olur, bunu bu sekilde yapsam olur mu yoksa farkli bir öneriniz var mi ?

Farklı şehirler için kullanılabilir olsun diyorsanız bu şekilde olması mantıklı. Değişmeyecekse const olarak tanımlayın gitsin.

dursuncemal

#41
koordimat verilerini eeproma girmek yerine module bir cps ekleyebilirsiniz.ben sadece bulundugu konumu  menuden manuel girip eeproma kaydetmistim. 
:=

kayatech

2nci el 100 TL ye  hdmi girişli bir monitör ve 100TL lik hdmi çıkışlı bir tablet alın. Vakitleri yükleyin ömür boyu kullanın :)

Voltajcı

@dursuncemal maliyeti en aza indirgemek için uğraşıyorum, haliyle gps modül şimdilik olmasa daha iyi :)

@cemre teşekkürler, saati ayarladiktan sonra zaten ds1307 kendi içinde devam ettiriyor kendisindeki pil ile, onu eepproma atmaya gerek yok o zaman, sadece son ayarlı koordinat kalsa yeter...

@kayatech piyasada herşey var zaten, aselsan tai otokar baykar bunlarin gerisini atmak lazım herkes hazır almali herşeyi sizin mantığa göre :)

kayatech

Hazır almak ile alakası yok. Çözüm odaklı konuşuyoruz hocam. En ucuz çözüm bence bu.
Her şeyi de biz yapmaya kalkar isek durum şu; Hiçbir şeyi yapamıyoruz.

Bu ticari bir ürün olsaydı yine aynı şekilde çözüm odaklı işi bitirir , arge için gerekli parayı kazanırken sonuç odaklı çalışmalara devam ederdim. Sizin söyleminize göre tamamını üretmek için vakit ve nakit harcamak gerekir.
Bence vaktin değerini bilin...
Her şeyi satın alabiliyorsunuz ve hatta herşeyi üretebiliyorsunuz ama zamanı satın alamıyorsunuz.
Gün gelince ne demek istediğimi daha net anlarsınız.