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

أدوات الموضوع

numerique
:: مهندس ::
تاريخ التسجيل: Jan 2011
المشاركات: 12
نشاط [ numerique ]
قوة السمعة:0
قديم 20-01-2011, 09:48 PM المشاركة 1   
افتراضي مساعدة في ادخال تحسينات على ساعة رقمية Twitter FaceBook Google+



السلام عليكم و رحمة الله وبركاته تمكنت من صنع ساعة رقمية منذ اكثر من 3 سنوات بمساعدة احد المنتديات.انها عبارة عن ساعة منبهة alarmclock استعملها لرن جرس الثانوية التي اعمل بها بصفة اتوماتيكية.اقوم ببرمجة اوقات الجرس وادخالها ب المكروكنترولر.
لكني اريد برمجتها بواسطة ازرار التحكم الخارجية واضافة ذاكرة 24cxx الي دارتها كي تستوعب ذاكرتها الكثير من اوقات الجرس.



اعلانات

ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 12,214
نشاط [ ماجد عباس محمد ]
قوة السمعة:409
قديم 21-01-2011, 06:44 AM المشاركة 2   
افتراضي


غالبا ستحتاج لميكرو يتقبل برنامج أكبر من هذا لقراءة اللوحة Key Pad و التوافق مع الذاكرة والبحث فيها

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

numerique
:: مهندس ::
تاريخ التسجيل: Jan 2011
المشاركات: 12
نشاط [ numerique ]
قوة السمعة:0
قديم 23-01-2011, 12:32 AM المشاركة 3   
افتراضي


مشكور اخي ماجد ولكن هناك العديد من المونتاجات التي تستعمل ال pic 16f84 مع الذاكرة من نوع 24cxx .
هذا هو الكود سورس بالمكرو بازيك في حالة اذا اراد اي اخ تركيبها.

program alarmclock





symbol LUNDI = 0
symbol MARDI = 1
symbol MERCREDI = 2
symbol JEUDI = 3
symbol VENDREDI = 4
symbol SAMEDI = 5
symbol DIMANCHE = 6

symbol NBALARM = 3
const alarmTable as byte[NBALARM * 4] = (
' JOUR HEURE MINUTE DUREE (secondes, 59 maxi)
lundi , 7, 45, 6,
lundi, 7, 55, 6,
lundi, 8, 55, 6,
)
dim maxcount as word
dim scaler as word
dim jj as byte
dim hh as byte
dim mn as byte
dim ss as byte
dim digiled as byte[4]
dim digit as byte
dim dp as byte
dim key as byte
dim alarm as byte
sub procedure interrupt
dim i as byte
scaler = scaler + 1
if scaler > maxcount
then
scaler = 0
inc(ss)
if ss = 60
then
ss = 0
inc(mn)
if mn = 60
then
mn = 0
inc(hh)
if hh = 24
then
hh = 0
inc(jj)
if jj = 7
then
jj =0
end if
end if
end if
end if
end if
#ifdef CATHODE_COMMUNE
PORTA = PORTA and $f0
TRISA = $0f
key = PORTA
TRISA = 0
PORTB = 0
#else
PORTA = PORTA or $0f
TRISA = $0f
key = PORTA
key = not(key)
TRISA = 0
PORTB = $ff
#endif
key = key and $07
digit = digit + 1
if digit > 3
then
digit = 0
i = $01
else
i = $01 << digit
end if
#ifdef CATHODE_COMMUNE
PORTB = digiled[digit]
PORTA = PORTA or i
#else
PORTB = digiled[digit]
PORTB = not(PORTB)
PORTA = PORTA and not(i)
#endif
INTCON.T0IF = 0
end sub
sub function intTo7seg(dim n as byte) as byte
select case n
case 0 result = $3F
case 1 result = $06
case 2 result = $5B
case 3 result = $4F
case 4 result = $66
case 5 result = $6D
case 6 result = $7D
case 7 result = $07
case 8 result = $7F
case 9 result = $6F
end select
end sub
sub procedure setValue(dim v as ^byte, dim s as byte, dim max as byte)
digiled[0] = s
digiled[1] = 0
while 1
if key.0
then
inc(v^)
if(v^ > max)
then
v^ = 0
end if
end if
if key.1
then
if(v^ = 0)
then
v^ = max
else
dec(v^)
end if
end if
if key.2
then
Delay_ms(50)
while key.2
wend
Delay_ms(50)
scaler = 0
ss = 0
return
end if
digiled[2] = intTo7seg(v^ / 10)
digiled[3] = intTo7seg(v^ mod 10)
delay_ms(300)
wend
end sub
main:
dim i as byte
dp = 0
hh = 0
mn = 0
ss = 0
jj = 0
maxcount =15625
PORTA = %00010000
TRISA = %00000000
PORTB = 0
TRISB = $00
INTCON = %10100000
OPTION_REG = %11011000
Delay_ms(50)
setValue(*hh, 116, 23)
setValue(*mn, 55, 59)
setValue(*jj, 14, 6)
while true
if key
then
digiled[0] = intTo7seg(jj)
digiled[1] = 0
digiled[2] = intTo7seg(ss / 10)
digiled[3] = intTo7seg(ss mod 10)
else
if hh < 10
then
digiled[0] = 0
digiled[1] = intTo7seg(hh)
else
digiled[0] = intTo7seg(hh / 10)
digiled[1] = intTo7seg(hh mod 10)
end if
digiled[2] = intTo7seg(mn / 10)
digiled[3] = intTo7seg(mn mod 10)
end if
if scaler > maxcount / 2
then
dp.1 = 1
else
dp.1 = 0
end if
digiled[0].7 = dp.0
digiled[1].7 = dp.1
digiled[2].7 = dp.2
digiled[3].7 = dp.3
alarm = 0
for i = 0 to (NBALARM - 1)
if (alarmTable[i] = jj) and (alarmTable[i + 1] = hh) and (alarmTable[i + 2] = mn) and (alarmTable[i + 3] > ss)
then
inc(alarm)
end if
next i
if alarm
then
dp.3 = 1
PORTA.4 = 0
else
dp.3 = 0
PORTA.4 = 1
end if
wend
end.


ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 12,214
نشاط [ ماجد عباس محمد ]
قوة السمعة:409
قديم 23-01-2011, 04:58 AM المشاركة 4   
افتراضي


مادام هذا رأيك سأرسم لك التعديل و عليك البرمجة


numerique
:: مهندس ::
تاريخ التسجيل: Jan 2011
المشاركات: 12
نشاط [ numerique ]
قوة السمعة:0
قديم 23-01-2011, 10:35 PM المشاركة 5   
افتراضي


جازاك الله خيرا اخي الكريم.وكما ترون في المخطط هناك 3 ازرار الاول (+) و الثاني (-) والتالث (ok).عند تشغيل الساعة نشاهد h 00 هنا يجب تحديد الساعة باستعمال الازرار + او - و على ok للموافقة. حينها تظهر لنا M 00 هنا يجب تحديد الدقائق باستعمال الازرار + او - و على ok للموافقة. مباشرة بعد ذلك تظهر لنا jj 0 هنا يجب تحديد اليوم حيث ان 0 يرمز ليوم الاثنين و 1 الي الثلاثاء وهكذا الي 6 الذي هو يوم الاحد.
هنا تبدا الساعة بالاشتغال وفقا للبرنامج الذي اذخلناه لل pic 16f84 بواسطة المبرمجة. لكن المشكلة هي عندما يتغير توقيت الجرس لاي سبب من الاسباب يجب ازالة ال pic وبرمجته من جديد.
اذن اخي ماجد كما تلاحظ فالمخطط الجديد يجب ان يحتوي على ازرار التحكم بوقت الجرس ومدته ايضا واليوم.
وشكرا جزيلا اخى ماجد .


التعديل الأخير تم بواسطة : numerique بتاريخ 23-01-2011 الساعة 10:38 PM

ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 12,214
نشاط [ ماجد عباس محمد ]
قوة السمعة:409
قديم 24-01-2011, 05:29 AM المشاركة 6   
افتراضي


أخى
هذه كلها مسائل برمجية و إن شاء الله سأضع لك دائرة و البرمجة عليك


numerique
:: مهندس ::
تاريخ التسجيل: Jan 2011
المشاركات: 12
نشاط [ numerique ]
قوة السمعة:0
قديم 25-01-2011, 10:08 PM المشاركة 7   
افتراضي


شكرا اخي الكريم وجعلها لك الله في ميزان حسناتك.


ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 12,214
نشاط [ ماجد عباس محمد ]
قوة السمعة:409
قديم 27-01-2011, 06:03 AM المشاركة 8   
افتراضي


هذه هى الدائرة المعدلة

استخدم 4511 فهى تحول الرقم الثنائى للشاشة ذات 7 أجزاء BCD to 7 Segment decoder و بها Latch أو مساكة تحتفظ بالرقم لذا يمكنك وضع الأربع مداخل معا كما بالرسم و من خلال مدخا الإتاحة Latch Enable تحفظه فى الوحدة المناسبة و هذا يتيح لك استخدام 4 خطوط للتوافق مع ذاكرة EEPROM مثل 24Cxx حسب السعة المطلوبة
طبعا يجب توصيل مخارج 4511 المناسبة لمداخل الشاشة المناسبة و استخدام المقاومات 330 أوم أيضا و شاشات من نوع CC بدلا من CA المستخدمة الخ
رجاء قراءة Data sheet لل 4511 إن لم تكن دارسها مسبقا

أيضا يمكنك الإستغناء عن الترانزيستورات أو الإبقاء عليها حسب الأمر الصادر من الميكرو لتفعيل المتكاملات

مازالت المشكلة هل تكفى 1ك للبرمجة؟؟؟؟ بالتوفيق إن شاء الله


التعديل الأخير تم بواسطة : ماجد عباس محمد بتاريخ 27-01-2011 الساعة 06:08 AM
إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


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

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025