 |
:: مهندس ::
تاريخ التسجيل: Mar 2010
الدولة: sudan-khartoum
المشاركات: 12
|
|
نشاط [ hanash85 ]
قوة السمعة:
|
|
16-12-2011, 09:52 PM
المشاركة 71
|
|
بسم الله الرحمن الرحمن الرحيم
توضيح إيعازات التعامل مع ds1307 من خلال مايكروبيسك
ذكرت في مشاركات سابقة أن لغة التخاطب بين ds1307 و الـ pic هي بروتوكول I2C وهذا البروتوكول تم شرحه من قبل الاستاذ م.نافذ أبو كشك وهو موجود في المواضيع المميزة فلا حجاة الى إعادة الشرح .
أولا نهيئ الأطراف C3, C4 على أنهما طرفان للتخاطب باستخدام I2C
كالتالي :
كود:
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
ثم نكتب الدالة التي تستخدم لقراءة سجلات المتكاملة ds1307 ونخز قيمة هذه السجلات في متغيرات ويجب أن ننتبه الى أن قيم هذه السجلات بصيغة BCD
كود:
dim sec, min, hr, week_day, day, mn, year,set1,set2 as byte
sub procedure Read_Time(dim byref sec, min, hr, week_day, day, 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)
day =Soft_I2C_Read(1)
mn =Soft_I2C_Read(1)
year =Soft_I2C_Read(0)
Soft_I2C_Stop()
end sub
نكتب دالة كتابة القيم الى السجلات ويجب أن تكون القيم المرسلة الى السجلات بصيغة BCD كما ذكرت قبل قليل ... وهذه الدالة سنحتاجها في ضبط الوقت والتاريخ للـ ds1307 إما بإرسال قيم ابتدائية عن طريق الـ Pic أو عن طريق أزرار خارجية كما ذكرت في المشاركة السابقة
كود:
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
الان لكي نرسل قيمة الى ds1307 نقوم بالخطوات التالية
1- نبدأ بروتوكول I2C
2- نحول القيمة المراد ارسالها الى نظام BCD
3- نستدعي دالة Write_Time وهذه الدالة تحتوي على عاملين (القيمة المراد إرسالها , عنوان السجل الذي نريد أن نرسل القيمة إليه )
مع ملاحظة أن عناوين السجلات تبدأ من الصفر الى سبعة
صفر = ثواني
واحد=دقائق
اثنان=ساعات
وهكذا
الكود التالي يرسل رقم 7 الى سجل الثواني
الآن الكود التالي لضبط الدقائق عن طريق زر خارجي مربوط على الطرف C1
كود:
if Button(PORTC, 1, 1, 1) then
oldstate = 255
end if
if oldstate and Button(PORTC, 1, 1, 0) then
set1=min+1
if set1>59 then
set1=0
end if
set1=Dec2Bcd16(set1)
Write_Time(1,set1)
oldstate = 0
end if
وهذا الكود لضبط الساعات عن طريق زر مربوط على الطرف C2
كود:
if Button(PORTC, 2, 1, 1) then
oldstate1 = 255
end if
if oldstate1 and Button(PORTC, 2, 1, 0) then
set1=hr+1
if set1>23 then
set1=0
end if
set1=Dec2Bcd16(set1)
Write_Time(2,set1)
oldstate1 = 0
end if
ملاحظة : يجب أن نعرف المتغيرات التالية oldstate1 , oldstate1 , set1
واعذروني على الاختصار فقد كتبت الشرح على عجالة لأنني رأيت أن الإخوة بحاجة اليه
والسلام عليكم ورحمة الله وبركاته
|
أولاً السلام عليكم ...وجزاك الله خيراً باش مهندس صهيب البلال وبارك الله في علمك وزاده...
أتأسف عن إنقطاعي وذلك لملاقاتي مشكلة في الموقع فكان لا يفتح في بلدنا وأواجه مشكلة فيه لحدي الآن فقد حاولت أن أرفع بعض آخر مشاريعي ولكن حاولت مرارا حتى تركت الفكرة لكن بعد توفيق الله بحاول أن أعاود المحاولة ..... بالجد مشروعك أعجبني شديد ...
لكن واجهتني مشاكل في برمجة الأزرار ,,, كيف يكون تعديل الكود إذا أردت إضافة زر (زيادة ونقصان ) للدقائق والساعة اليوم والشهر والسنة ...وجزاك الله خيراً أخي صهيب.
التعديل الأخير تم بواسطة : hanash85 بتاريخ 16-12-2011 الساعة 10:01 PM
|