قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

   

صهيب البلال
:: مهندس متواجد ::
تاريخ التسجيل: Dec 2009
المشاركات: 85
نشاط [ صهيب البلال ]
قوة السمعة:
قديم 01-05-2010, 08:34 PM المشاركة 9   
افتراضي



أشكر جميع الإخوة الذين قاموا بكتابة التعليقات وأسأل الله ان يجزيهم خيرا

بالنسبة لما كتبه الآخ abnidal
نعم الصراحة جميلة لكن ليس بهذه الطريقة المنفرة ثم إن الموضوع لم يمض عليه سوى يوم واحد فلماذا هذا الرد العنيف
ولكن على العموم اعتذر على تأخري غير المتعمد فلدي مشاغل والتزامات

الأخ mahmoud_ict
الكود بلغة مايكرو بيسك وهو كامل لكن الذي منعني من رفعه هو أن اني أريد أن أضيف عليه بعض التعليقات التي توضحه وتزيل الالتباس على من يقرأه أو يريد أن يعدل عليه
وأحتاج الى بعض الوقت وأعدك أن يكون القريب العاجل إن شاء الله تعالى

الأخ ah78
جزاك الله خيرا ويؤسفني أن أقول لك أنه ليس لدي أي إطلاع على لغة bascom avr ولا على متحكمات avr

اعلانات

الصورة الرمزية أبو زكووور
أبو زكووور
:: عضو فضي ::
تاريخ التسجيل: Mar 2009
الدولة: سوريا العروبة
المشاركات: 428
نشاط [ أبو زكووور ]
قوة السمعة:
قديم 02-05-2010, 12:39 AM المشاركة 10   
attension


أشكر جميع الإخوة الذين قاموا بكتابة التعليقات وأسأل الله ان يجزيهم خيرا

بالنسبة لما كتبه الآخ abnidal
نعم الصراحة جميلة لكن ليس بهذه الطريقة المنفرة ثم إن الموضوع لم يمض عليه سوى يوم واحد فلماذا هذا الرد العنيف
ولكن على العموم اعتذر على تأخري غير المتعمد فلدي مشاغل والتزامات

الأخ mahmoud_ict
الكود بلغة مايكرو بيسك وهو كامل لكن الذي منعني من رفعه هو أن اني أريد أن أضيف عليه بعض التعليقات التي توضحه وتزيل الالتباس على من يقرأه أو يريد أن يعدل عليه
وأحتاج الى بعض الوقت وأعدك أن يكون القريب العاجل إن شاء الله تعالى

الأخ ah78
جزاك الله خيرا ويؤسفني أن أقول لك أنه ليس لدي أي إطلاع على لغة bascom avr ولا على متحكمات avr
السلام عليكم أخي صهيب .....
موضوعك ممتاز و شيِّق , بارك الله فيك
طبعاً أنت لست مجبر على وضع الموضوع , أو وضعه و عدم إكماله ,
و لكن و للإيضاح و التبيان يجب وضع خطة للعمل , و هذا ماقمت بفعله أنت , و يجب التقيد بفعله ضمن فترة زمنية قصيرة أو طويلة , طبعاً ضمن الوقت المتاح لك , و ليس على حساب واجباتك و إلتزاماتك .
و أخيراً أجرك و ثوابك عند الله .... شكراً لك .

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

ماجد الحموي
:: مهندس متواجد ::
تاريخ التسجيل: Jan 2009
المشاركات: 118
نشاط [ ماجد الحموي ]
قوة السمعة:
قديم 02-05-2010, 01:29 PM المشاركة 11   
افتراضي


الاخ الحبيب عمل رائع و جهد تثاب عليه باذن الله اكمل ونحن معك وطبعا الاخ الصريح لايقصد الاستفزاز وانما يبدو انه متشوق للموضوع ولكن بدرجه اعلى من بقيه الاخوه


زكي شاكر
:: عضو ماسي ::
تاريخ التسجيل: May 2006
الدولة: المغرب
المشاركات: 2,945
نشاط [ زكي شاكر ]
قوة السمعة:
قديم 02-05-2010, 10:16 PM المشاركة 12   
افتراضي


السلام عليكم ..
شكرا لك أخي العزيز صهيب البلال عل هذا المشروع الخير وأعانك الله على تكملته على أحسن وجه بالشرح والتوضيح ..


صهيب البلال
:: مهندس متواجد ::
تاريخ التسجيل: Dec 2009
المشاركات: 85
نشاط [ صهيب البلال ]
قوة السمعة:
قديم 03-05-2010, 08:27 PM المشاركة 13   
افتراضي


الإخوة الكرام ... أبو زكور وماجد الحموي
اشكركما جزيل الشكر على التشجيع وبارك الله فيكما

استاذي الفاضل زكي شاكر نورت الموضوع بمشاركتك فيه جزاك الله خيرا
إن شاء الله أكون عند حسن ظنكم في توضيح المشروع بالكامل

قبل أن أبدا بوضع البرنامج أود أن أضع بعض الروابط المفيدة التي فيها شرح لجزئيات من المشروع حتى لا يتكرر الشرح

دورة لغة مايكروبيسك
شرح متكاملة الزمن الحقيقي ds1307
شرح زيادة مخارج البك
شرح 74Hc595


هذا كود البرنامج
كود:
'
' *

program prayartime


dim y ,L1 as longint
dim D,L,ty,Lambda,Obliquity ,Alpha,ST,Dec1,noon, utnoon,dhrtime,asrtime,asralt,durinalarc,marbtime,EshaArc,M,eshatime,fajrtime,shroq ,ard,tol as float
    i ,farq   as byte
    day,month_,dhr,dhr1,asr,asr1,fjr,fjr1,marb,marb1,esha,esha1 as byte
    dim x,x1 as byte[48]
sub procedure awqat()

ard=36.334
tol=43.2
farq=3
D=((367*y)-(floor((1.75)*(y+floor((month_+9)/12))))+floor(275*(month_/9))+day-730531.5)
L=280.461+0.9856474*D
 L1=L
 L=L-L1
 L1=L1 mod 360
 L=L1+L
 M = 357.528+0.9856003*D
  L1=M
  M=M-L1
  L1=L1 mod 360
  M=L1+M
Obliquity = 23.439-0.0000004*D
Lambda = L+1.915*sin(M*PI/180)+0.02*sin(2*M*PI/180)
  L1=Lambda
  Lambda =Lambda-L1
  L1=L1 mod 360
  Lambda =L1+Lambda
Alpha=atan(cos(Obliquity *PI/180)*tan(Lambda*PI/180))*180/PI
Alpha=Alpha-(360*floor(Alpha/360))
Alpha=Alpha+90*(floor(Lambda/90)-floor(Alpha/90))
 ST=100.46 + 0.985647352 *D
 L1=ST
  ST=ST-L1
  L1=L1 mod 360
  ST=L1+ST
  Dec1=asin(sin(Obliquity*PI/180)*sin(Lambda*PI/180))*180/PI
  noon=Alpha-ST
  if noon>=0 then
  noon=fabs(noon)
  L1=fabs(noon)
  noon=noon-L1
  L1=L1 mod 360
  noon=noon+L1
  else
  noon=fabs(noon)
  L1=fabs(noon)
  noon=noon-L1
  L1=L1 mod 360
  noon=noon+L1
  noon=360-noon
  end if
   utnoon=noon-tol
  dhrtime=(utnoon/15)+farq
  dhr1=dhrtime
  dhrtime=dhrtime-dhr1
 dhr=floor(dhrtime*60)
 dhrtime=(utnoon/15)+3
   asralt=atan(1+tan((ard-Dec1)*PI/180))*180/PI
  asrtime=acos((sin((90-asralt)*PI/180)-sin(Dec1*PI/180)*sin(ard*PI/180))/(COS(Dec1*PI/180)*COS(ard*PI/180)))*180/PI
 asrtime=(asrtime/15)+dhrtime

 asr1=asrtime
 asrtime=asrtime-asr1
 asr=floor(asrtime*60)
 durinalarc=acos((SIN(-0.8333*PI/180)-SIN(Dec1*PI/180)*SIN(ard*PI/180))/(COS(Dec1*PI/180)*COS(ard*PI/180)))*180/PI
 shroq=dhrtime-durinalarc/15

   marbtime=dhrtime+durinalarc/15
   marb1=marbtime
  marbtime=marbtime-marb1
 marb=floor(marbtime*60)
 EshaArc= acos((SIN(-18*PI/180)-SIN(Dec1*PI/180)*SIN(ard*PI/180))/(COS(Dec1*PI/180)*COS(ard*PI/180)))*180/PI
 eshatime=dhrtime+EshaArc/15
 esha1=eshatime
 eshatime=eshatime-esha1
 esha=floor(eshatime*60)
 fajrtime=dhrtime-EshaArc/15
  fjr1=fajrtime
  fajrtime=fajrtime-fjr1
  fjr=floor(fajrtime*60)
dhr=dec2bcd(dhr)
dhr1=dec2bcd(dhr1)
fjr=dec2bcd(fjr)
fjr1=dec2bcd(fjr1)
if asr1>12 then
asr1=asr1-12
end if
if marb1>12 then
marb1=marb1-12
end if
if esha1>12 then
esha1=esha1-12
end if              '
asr=dec2bcd(asr)
asr1=dec2bcd(asr1)
marb=dec2bcd(marb)
marb1=dec2bcd(marb1)
esha=dec2bcd(esha)
esha1=dec2bcd(esha1)
end sub
dim Soft_I2C_Scl               as sbit at RC3_bit
dim Soft_I2C_Sda               as sbit at RC4_bit
dim Soft_I2C_Scl_Direction as sbit at TRISC3_bit
dim Soft_I2C_Sda_Direction as sbit at TRISC4_bit
  dim sec,min,hr,week_day,dday,mn,year as short
sub procedure Read_Time(dim byref sec, min, hr, week_day, dday, mn, year as short)

    Soft_I2C_Start()
    Soft_I2C_Write(0xD0)
    Soft_I2C_Write(0)
    Soft_I2C_Start()
    Soft_I2C_Write(0xD1)
    sec =Soft_I2C_Read(1)
    min =Soft_I2C_Read(1)
    hr =Soft_I2C_Read(1)
    week_day =Soft_I2C_Read(1)
    dday =Soft_I2C_Read(1)
    mn =Soft_I2C_Read(1)
    year =Soft_I2C_Read(0)
    Soft_I2C_Stop()
end sub


sub procedure Write_Time(dim address1 as short,dim data_wr as short)
    Soft_I2C_Start()
    Soft_I2C_Write(0xD0)
    Soft_I2C_Write(address1)
    Soft_I2C_Write(data_wr)
    Soft_I2C_Stop()
    end sub
'
main:
  TRISB = 0
  PORTB = 0
  trisc.0=0
  trisc.1=0
  trisc.2=0
  trisa.0=0
  Soft_I2C_Init()
  while true
  Read_Time(sec,min,hr,week_day,dday,mn,year)
  day=bcd2dec(dday)
  month_=bcd2dec(mn)
  y=2010
  awqat()

   for i=0 to 47
   x[i]=0
   x1[i]=0
   next i
  for i = 0 to 7
   x[i]=dhr.i
   x1[i]=esha.i
  next i
   for i = 0 to 7
   x[i+8]=dhr1.i
   x1[i+8]=esha1.i
  next i
   for i = 0 to 7
   x[i+16]=fjr.i
   x1[i+16]=marb.i
  next i
   for i = 0 to 7
   x[i+24]=fjr1.i
   x1[i+24]=marb1.i
  next i
   for i = 0 to 7
   x[i+32]=min.i
   x1[i+32]=asr.i
  next i
  for i = 0 to 7
   x[i+40]=hr.i
   x1[i+40]=asr1.i
  next i
  for i = 0 to  47
   portb.0=x[i]
   portc.0=x1[i]
   portb.1=0
   portc.1=0
   delay_us(20)
   portb.1=1
   portc.1=1
   next i
   porta.0=1
   delay_ms(300)
   portb.2=0
   portc.2=0
   delay_us(20)
   portb.2=1
   portc.2=1
   porta.0=0
   delay_ms(300)
  wend
end.


التعديل الأخير تم بواسطة : صهيب البلال بتاريخ 03-05-2010 الساعة 11:32 PM

صهيب البلال
:: مهندس متواجد ::
تاريخ التسجيل: Dec 2009
المشاركات: 85
نشاط [ صهيب البلال ]
قوة السمعة:
قديم 03-05-2010, 09:32 PM المشاركة 14   
افتراضي


شرح الكود
من يشكل عليه شيء أرجو ان لايمتنع عن الاستفسار
على بركة الله نبدا :

تعريف المتغيرات التي نحتاجها خلال البرنامج وسترى استخدام كل متغير في مكانه المناسب
كود:
dim y ,L1 as longint
dim D,L,ty,Lambda,Obliquity ,Alpha,ST,Dec1,noon, utnoon,dhrtime,asrtime,asralt,durinalarc,marbtime,EshaArc,M,eshatime,fajrtime,shroq ,ard,tol as float
    i ,farq   as byte
    day,month_,dhr,dhr1,asr,asr1,fjr,fjr1,marb,marb1,esha,esha1 as byte
    dim x,x1 as byte[48]
تعريف دالة حساب اوقات الصلاة والتي تعتبر العمود الفقري للمشروع علما ان المعادلات الفلكية كتبها الاستاذ محمد مجدي جزاه الله خيرا

كود:
sub procedure awqat()
كود:
ard=36.334
tol=43.2
farq=3
المتغير ard يمثل خط العرض للمدينة التي تريد حساب أوقات الصلاة لها
المتغير tol يمثل خط الطول
المتغير farq يمثل فرق التوقيت العالمي لبلدك يعني فرقه عن توقيت غيرنتش
مع العم أن البيانات المدخلة أعلاه هي لمدينة الموصل الحدباء
****************************8
العناصر المطلوبة لحساب أوقات الصلاة
نحسب اليوم الجوليانى ورمزه D من المعادلة :
D =((367*Y)-(INT((7/4)*(Y+INT((M+9)/12))))+INT(275*(M/9))+d-730531.5)
مع ملاحظة أن Y = Year = العام
و M = Month = الشهر
و d= Day = اليوم
مع العلم أن اليوم والشهر والسنة يتم قراءتها من ds1307
الدالة INT تعني تقريب الرقم إلى أقرب عدد صحيح وهذه الدالة تقابلها في المايكرو بيسك (Floor) لذا سيكون كود حساب اليوم الجولياني كالتالي:
كود:
D=((367*y)-(floor((1.75)*(y+floor((month_+9)/12))))+floor(275*(month_/9))+day-730531.5)
نحسب طول الشمس الوسطى ورمزه L من المعادلة
L = 280.461+0.9856474*D
مع مراعاة أن يكون الناتج لا يقل أو يزيد عن 360°
ملاحظة مهمة جدا : لكي نجعل L لا يقل أو يزيد عن 360° نقوم بالخطوات التالية:
1- بما ان L عدد عشري لذلك نفصل الجزء الصحيح عن الجزء العشري
أفرض أن 389.123456L=
نعرف متغيرا وسطيا لنخن فيه الجزء الصحيح
L1=L
إذن L1 أصبحث تساوي 389
نخزن الجزء العشري في المتغير L
L=L-L1
L=389.123456-389
L=0.123456
ألآن فصلنا الجزء العشري عن الجزء الصحيح ننتقل للخطوة الثانية
2- نقسم الجزء الصحيح على 360 ونأخذ باقي القسمة
مع العلم أن الدالة التي تقوم بإرجاع باقي القسمة هي MOD
لذلك نكتب
L1=L1 mod 360
الناتج L1=29
3- نجمع ناتج باقي القسمة (L1) مع الجزء العشري (L) لكي نحصل على الناتج المطلوب
كما في الكود أدناه
كود:
L=280.461+0.9856474*D
 L1=L
 L=L-L1
 L1=L1 mod 360
 L=L1+L
لو عدنا الى بداية البرنامج (أسطر التعربفات ) نجد أن المتغير L1 من النوع longint وهذا يعني أنه لا يقبل الفارزة العائمة وعليه لو اسندنا اليه رقم به فارزة عائمة فإنه سياخذ الجزء الصحيح ويهمل الجزء العشري
وقد ستفدت من هذه الخاصية في الفصل بين الجزء الصحيح والعشري ... أرجو الانتباه
***********
ثم نحسب حصة الشمس الوسطى ورمزه M من المعادلة
M = 357.528+0.9856003*D

مع مراعاة أن يكون الناتج لا يقل أو يزيد عن 360° كما وضحت سابقا
وعليه يكون الكود :
كود:
M = 357.528+0.9856003*D
 L1=M
 M=M-L1
 L1=L1 mod 360 
M=L1+M
****************8
ثم نحسب طول الشمس البروجى ورمزه Lambda من المعادلة
(Lambda = L +1.915*SIN(M)+0.02*SIN(2*M

مع مراعاة أن يكون الناتج لا يقل أو يزيد عن 360° كما وضحت سابقا
كود:
Lambda = L+1.915*sin(M*PI/180)+0.02*sin(2*M*PI/180) L1=Lambda
 Lambda =Lambda-L1
 L1=L1 mod 360
 Lambda =L1+Lambda
ملاحظة مهمة :جميع الدوال الدائرية مثل دالة جيب تمام الزاوية (cos)وظل الزاوية (tan)في لغة المايكروبيسك تحسب بنظام ريدين أما الميل فإنه بنظام الدرجات لذلك يجب أن نحوله من نظام الدرجات الى ريدين وذلك بأن نضربه في PI /180
أما دالة معكوس ظل الزاوية (Atan) فإنها تعطي النتائج بنظام ريدين لذلك يجب تحويلها الى درجات وذلك بظربها في 180/PI
***************************
ثم نحسب ميل دائرة البروج ورمزها Obliquity من المعادلة
Obliquity = 23.439-0.0000004*D
كالتالي
كود:
Obliquity = 23.439-0.0000004*D
********************
ثم نحسب المطلع المستقيم ورمزه Alpha من المعادلة
((Alpha =ATAN (COS(Obliquity)*TAN(Lambda
مع مراعاة أن يكون الناتج لا يقل أو يزيد عن 360° بالمعادلة
(Alpha = Alpha - (360*INT(Alpha /360
أكرر الملاحظة:جميع الدوال الدائرية مثل دالة جيب تمام الزاوية (cos)وظل الزاوية (tan)في لغة المايكروبيسك تحسب بنظام ريدين أما الميل فإنه بنظام الدرجات لذلك يجب أن نحوله من نظام الدرجات الى ريدين وذلك بأن نضربه في PI /180
أما معكوس الدوال الدائرية مثل دالة معكوس ظل الزاوية (Atan) أو معكوس جيب الزاوية (asin)فإنها تعطي النتائج بنظام ريدين لذلك يجب تحويلها الى درجات وذلك بظربها في 180/PI
ا
كود:
Alpha=atan(cos(Obliquity *PI/180)*tan(Lambda*PI/180))*180/PI
Alpha=Alpha-(360*floor(Alpha/360))
ثم نعدل المطلع المستقيم بامعادلة التالية :
Alpha = Alpha + 90 * ( TRUNC ( Alpha / 90
- (
TRUNC(Alpha / 90))
كالتالي
كود:
Alpha=Alpha+90*(floor(Lambda/90)-floor(Alpha/90))
***************
نحسب الزمن النجمى ورمزه ST بالدرجات الزاوية من المعادلة
ST =100.46 + 0.985647352 *D

كود:
ST=100.46 + 0.985647352 *D
 L1=ST 
ST=ST-L1 
L1=L1 mod 360 
ST=L1+ST
******************
ثم نحسب ميل الشمس الزاوى ورمزه Decمن المعادلة
((Dec =ASIN(SIN (Obliquity )*SIN(Lambda
كود:
Dec1=asin(sin(Obliquity*PI/180)*sin(Lambda*PI/180))*180/PI
****************
نحسب زوال الشمس الوسطى noon من المعادلة
Noon = Alpha - ST
مع مراعاة أن يكون الناتج لا يقل أو يزيد عن 360°
مع الأخذ بنظر الاعتبار أنه في بعض الحالات تكون نتيجة noon بإشارة سالبة لذلك يجب أن نلغي هذه الإشارة باستخدام دالة القيمة المطلقة fabs

كود:
noon=Alpha-ST
 if noon>=0 then 
noon=fabs(noon)
 L1=fabs(noon)
 noon=noon-L1
 L1=L1 mod 360
 noon=noon+L1
 else
 noon=fabs(noon)
 L1=fabs(noon)
 noon=noon-L1
 L1=L1 mod 360 
noon=noon+L1
 noon=360-noon 
end if
*********************
ثم الزوالى العالمى UT Noonمن المعادلة
UT Noon = Noon - tol
حيث أن tolهو خط الطول الجغرافى للمكان كما ذكرنا سابقا
كود:
utnoon=noon-tol
*********************
ثم الزوال المحلى Local Noonبالمعادلة وهو وقت صلاة الظهر
dhrtime = UT Noon /15 + farq


حيث أن farqهو فرق التوقيت العالمى كما تمت الاشارة اليه من قبل

الى هنا توصلنا الى حساب وقت صلاة الظهر الذي يعتبر أهم الأوقات حيث أن بقية الأوقات يتم حسابها بالإعتماد عليه كما سترى قريبا
لو اطلعنا على وقت صلاة الظهر المحسوب بالمعادلة أعلاه نجده عبارة عن رقم عشري لذلك يجب أن نحولها الى ساعات ودقائق وثواني
طريقة التحويل كالتالي
1- أفرض أن dhrtime=12.14364
الجزء الصحيح الذي هو (12) يمثل الساعات
وللحصول على الدقائق نضرب الجزء العشري في 60
0.14364*60 =8.6184
نأخذ الجزء الصحيح الذي هو (8) ونهمل الكسر وبذلك نكون قد حصلنا على الدقائق
أي ان وقت الظهر
12:08
أرجو الانتباه الى هذه الملاحظة لأننا سنحتاجها خمس مرات لماذ ؟؟
كود:
dhrtime=(utnoon/15)+farq
  dhr1=dhrtime
  dhrtime=dhrtime-dhr1
 dhr=floor(dhrtime*60)
حيث dhr1 تمثل الساعات
و dhr تمثل الدقائق
فيكون الوقت dhr1:dhr
******************
نحسب وقت صلاة العصر الأول وهو المذهب الشافعى " وهو معمول به فى كثير من الأقطار "

نحسب إرتفاع الشمس لوقت صلاة العصر Asr Altمن المعادلة
((Asr Alt = ATAN (1+ TAN( ard- Dec

حيث أن ardهو خط العرض الجغرافى
و Dec هو ميل الشمس الزاوي
كود:
 asralt=atan(1+tan((ard-Dec1)*PI/180))*180/PI
*************************
ثم نحسب قوس الدائر أى الوقت المتبقى من وقت الظهر حتى صلاة العصر قوس العصر Asr Arc من المعادلة :
Asr Arc =ACOS ((SIN(90- Asr Alt )-SIN(Dec)*SIN(Lat))/(COS(Dec)*COS(Lat)))
الناتج هنا بالدرجات الزاوية يحول لزمن بالقسمة على 15
Asr Arc = Asr / 15
فيكون وقت صلاة العصر Asr Time من المعادلة
Asr Time = Local Noon + Asr Arc

ولا تنسى أننا سنقوم بتحويل الرقم الى صيغة الوقت ساعات ودقائق كما اشرت عليه عند حساب وقت صلاة الظهر
كود:
asrtime=acos((sin((90-asralt)*PI/180)-sin(Dec1*PI/180)*sin(ard*PI/180))/(COS(Dec1*PI/180)*COS(ard*PI/180)))*180/PI
 asrtime=(asrtime/15)+dhrtime

 asr1=asrtime
 asrtime=asrtime-asr1
 asr=floor(asrtime*60)
حيث asr1 تمثل الساعات
و asr تمثل الدقائق فيكون الوقت asr1:asr

******************************
نحسب نصف قوس النهار Durinal Arcمن المعادلة
Durinal Arc=ACOS ((SIN(-0.8333 )-SIN(Dec)*SIN(Lat))/(COS(Dec)*COS(Lat)))

كود:
 durinalarc=acos((SIN(-0.8333*PI/180)-SIN(Dec1*PI/180)*SIN(ard*PI/180))/(COS(Dec1*PI/180)*COS(ard*PI/180)))*180/PI
****************************
وقت الشروق Sun Rise
(Sun Rise = Local Noon - (Durinal Arc / 15

كود:
 shroq=dhrtime-durinalarc/15
*****************************
وقت الغروب Sun Set
(Sun Set = Local Noon + (Durinal Arc /15

كود:
marbtime=dhrtime+durinalarc/15
   marb1=marbtime
  marbtime=marbtime-marb1
 marb=floor(marbtime*60
********************************
نحسب وقت صلاة العشاء من المعادلة

اولا نحسب فضل الدائرة وهو الوقت المتبقى من وقت صلاة الظهر إلى وقت العشاء Esha Arc
Esha Arc = ACOS ((SIN(-18 )-SIN(Dec)*SIN(Lat))/(COS(Dec)*COS(Lat)))
فيكون وقت صلاة العشاء Esha Time
(Esha Time = Local Noon +( Esha Arc /15

كود:
EshaArc= acos((SIN(-18*PI/180)-SIN(Dec1*PI/180)*SIN(ard*PI/180))/(COS(Dec1*PI/180)*COS(ard*PI/180)))*180/PI
 eshatime=dhrtime+EshaArc/15
 esha1=eshatime
 eshatime=eshatime-esha1
 esha=floor(eshatime*60)
*******************************
نحسب وقت صلاة الفجر من المعادلة

أولا نحسب فضل دائر الفجر وهو الوقت المتبقى من وقت صلاة الفجر حتى وقت صلاة الظهر Fajr Arc
Fajr Arc = ACOS ((SIN(-18 )-SIN(Dec)*SIN(Lat))/(COS(Dec)*COS(Lat)))
فيكون وقت صلاة الفجر Fajr Time
(Fajr Time = Local Noon – (Fajr Arc /15
كود:
fajrtime=dhrtime-EshaArc/15
  fjr1=fajrtime
  fajrtime=fajrtime-fjr1
  fjr=floor(fajrtime*60
وبذلك نكون قد تمكنا من حساب اوقات الصلوات الخمس
وصار عندنا لكل صلاة متغيرين أحدهما للساعات والآخر للدقائق
مع العلم أن الساعات هي بنمط 24 ساعة لذلك يجب تحويلها الى نظام 12 ساعة
بالكود التالي
كود:
if asr1>12 then asr1=asr1-12 end if if marb1>12 then marb1=marb1-12 end if if esha1>12 then esha1=esha1-12 end if
لاحظ اننا استخدمنا صلاة العصر والمغرب والعشاء فقط .... اكيد الأمر واضح لأنها أوقاتها بعد الظهر وسيظهر أثر نظام 24 ساعة عليها فقط
*****

الآن يجب علينا أن نحول كل متغير من هذه المتغيرات الى نظام Bcd
لماذ؟
لاننا استخدمنا الآي سي 7447 والذي يحول الرقم من نظام Bcd ليصبح جاهزا للعرض على السفن سكمنت
لذلك كتبت الكود التالي
كود:
dhr=dec2bcd(dhr)
dhr1=dec2bcd(dhr1)
fjr=dec2bcd(fjr)
fjr1=dec2bcd(fjr1

asr=dec2bcd(asr)
asr1=dec2bcd(asr1)
marb=dec2bcd(marb)
marb1=dec2bcd(marb1)
esha=dec2bcd(esha)
esha1=dec2bcd(esha1)
أخيرا نهاية الدالة
كود:
end sub
سأكمل توضيح البرنامج قريبا إن شاء الله
ارجو ان يكون الشرح واضحا
من لديه اي استفسار فليتفضل به ....
جزاكم الله خيرا


التعديل الأخير تم بواسطة : صهيب البلال بتاريخ 03-05-2010 الساعة 11:23 PM

الصورة الرمزية ah78
ah78
:: مهندس متواجد ::
تاريخ التسجيل: Apr 2006
المشاركات: 71
نشاط [ ah78 ]
قوة السمعة:
قديم 04-05-2010, 12:40 PM المشاركة 15   
افتراضي


الف شكر اخي صهيب

ولكن هل تعطي هذه المعادلات قيم دقيقة لاوقات الصلاة كما مسجلة في الرزنامة
بدون فارق ولاحتى بدقيقة واحدة
وكيف لي ان اعرف ميل الشمس


الصورة الرمزية ahmad_s_f
ahmad_s_f
:: المهندس/ أحمد سمير فايد ::
تاريخ التسجيل: Jun 2006
الدولة: سائح في ارض الله
المشاركات: 632
نشاط [ ahmad_s_f ]
قوة السمعة:
قديم 04-05-2010, 02:50 PM المشاركة 16   
افتراضي


أخي المهندس صهيب ..

مشاركتك هذه ,, قمة في الروعة وقمة في التميز .. بارك الله فيك .

هناك اقتراحات لتقليل عدد الدوائر المتكاملة يمكنك تطوير المشروع بها إن أردت

وهي مجرد أفكار يمنكنك قبلوها أو تجاهلها .

1- يمكن الاستغناء نهائيا عن جميع مفككات الترميز 74ls47 . أربعة وعشرين قطعة , واستخدام 595 فقط ولكن سنضاعف عدد مسجلات الازاحة فتصبح 24 . وبهذا نكون وفرنا 12 دائرة متكاملة .
وبهذا تكون المكونات هي :
1- pic18f252 عدد 1
2- ds1307 عدد 1
3- 74Hc595 عدد 24

4- 7 seg عدد 24

2- هناك اقتراح آخر وهو أن لا نستخدم أي دائرة متكاملة ونستخدم ترانزستور لكل سفن سيجمنت (طريقة الـ multiplexing ) وبهذا تكون المكونات هي
1- ميكروكنترولر عدد 1
2- ds1307 عدد 1
3- 7 seg عدد 24
4- عدد 24 ترانزستور
ولكن اذا استخدمنا هذه الطريقة فسنواجه مشكلة عدد أطراف الميكروكنترولر اللازمة لتشغيل واطفاء 24 ترانزستور ويمكننا حل هذه المشكلة باستخدام قطعتين من 4514 . أو نستخدم ميكروكنترولر آخر له 40 طرف . أو نفس الميكروكنترولر مع 3 قطع إضافية من مسجلات الازاحة 595 .

اقتراح ثالث .. أن تفكر في حل آخر .

تمنياتي بكل التوفيق .. وشكري لك مرة أخرى على مجهودات الرائعة وشرحك المتميز جدا ..

حفظك الله ,,



الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 04:29 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)