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

   

abnidal
:: مهندس متميز ::
تاريخ التسجيل: Nov 2006
الدولة: مصر
المشاركات: 381
نشاط [ abnidal ]
قوة السمعة:
قديم 29-03-2010, 12:10 PM المشاركة 25   
افتراضي



في الواقع كنت أظن أن البرنامج يعطي الدالة جاهزة للاستعمال لكن لما أطلعت عليه وجدته لا يعطي الكثير على كل سأستعين به لانشاء البرنامج ولكن انتظر مدة
يومين لأرى مايمكنني فعله
ملاحظة :
لابد من استعمال ذاكرة خارجية ويشحن فيها الصوت بواسطة مبرمجة عادية بعد أن
يحول الصوت من الشكل التماثلي الى الشكل الرقمي
السلام عليكم اخي : lahoioui
ما زلت بانتظارك وارجو ان يكون التاخير خيرا انشاء الله

اعلانات

lahoioui
:: مهندس متواجد ::
تاريخ التسجيل: May 2009
المشاركات: 177
نشاط [ lahoioui ]
قوة السمعة:
قديم 30-03-2010, 11:40 AM المشاركة 26   
افتراضي


السلام عليكم اخي : lahoioui
ما زلت بانتظارك وارجو ان يكون التاخير خيرا انشاء الله
لقد منحتني أسبوع أليس كذلك !
بقي أن أجرب شيئ ثم أعطيك ما توصلت اليه


التعديل الأخير تم بواسطة : lahoioui بتاريخ 30-03-2010 الساعة 02:53 PM
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

abnidal
:: مهندس متميز ::
تاريخ التسجيل: Nov 2006
الدولة: مصر
المشاركات: 381
نشاط [ abnidal ]
قوة السمعة:
قديم 30-03-2010, 01:28 PM المشاركة 27   
افتراضي امرك يا سيدي


سامحني ولك مني جزيل الشكر ( مشكلتي اني انسى ثم اني عجول)
على كل حال جزاك الله خيرا

مرة ثانية مشكور


اللهم صلي على محمد وصحبه اجمعين


lahoioui
:: مهندس متواجد ::
تاريخ التسجيل: May 2009
المشاركات: 177
نشاط [ lahoioui ]
قوة السمعة:
قديم 30-03-2010, 03:06 PM المشاركة 28   
افتراضي


سامحني ولك مني جزيل الشكر ( مشكلتي اني انسى ثم اني عجول)
على كل حال جزاك الله خيرا

مرة ثانية مشكور


اللهم صلي على محمد وصحبه اجمعين
هذه هي الدارة و هي تشتغل


لا بد من اضافة مكبر صوت لأن القدرة بعد الفلتر R1 و c1 تصبح ضعيفة جدا
سوف نتحدث خطوة بخطوة من اختيار ملف سمعي الى النهاية
لانه لا بد من توضيح سبب وجود كل قطعة الكترونية وكيفية التعامل معها
حتى تتمكن من التعامل مع الملفات الصوتية و الذاكرة نوع 24cxx
بكل حرية .
فسوف أشرح كل خطوة بأكبر تبسيط ممكن
فما عليك سوى أن تسأل لما فعلت كذا ولم أفعل هذا.


التعديل الأخير تم بواسطة : lahoioui بتاريخ 30-03-2010 الساعة 03:16 PM

abnidal
:: مهندس متميز ::
تاريخ التسجيل: Nov 2006
الدولة: مصر
المشاركات: 381
نشاط [ abnidal ]
قوة السمعة:
قديم 30-03-2010, 03:41 PM المشاركة 29   
افتراضي مشكور


انشاء الله ساكون معك خطوة خطوة ولا تنساني من ملف بروتوس رحمك الله
لك مني الدعاء انشاء الله
لك جزيل الشكر


lahoioui
:: مهندس متواجد ::
تاريخ التسجيل: May 2009
المشاركات: 177
نشاط [ lahoioui ]
قوة السمعة:
قديم 01-04-2010, 01:06 PM المشاركة 30   
افتراضي


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

ليكن لدينا ملف صوتي وليكن : chimes
ملف من ال windows موجد في windows/media/chimes.wav
هنا لدينا طريقتن مختلفتين :
1- اذا كان ال pic ذو ذاكرة كبيرة أي الذاكرة التي تحمل البرنامج ( flash) والملف الصوتي صغير فلا نحتاج الى ذاكرة خارجية .
ولنبدأ بهذه الطريقة .
هنا نحتاج الى برنامجين :
الاول هو BTC ENCODER SOUNDER وهذا البرنامج تعرفه وسوف أشرح طريقة العمل به :
البرنامج هنا:

http://ifile.it/l61z3bs/BTcSE30BETA.zip

الثاني هو :

http://ifile.it/twnrv29/BTC2CCS.rar

الاول أي ال btc يحول الملف الصوتي الى ملف في ال C أي يمكن اضافته الى
برنامج معمول في ال C
الثاني يحول هذا الملف الذي أنتجه ال BTC الى مصفوفة يمكن ضمها مباشرة
الى برنامج ال C بطريقة نسخ لصق

طريقة عمل الاول :
1- file ثم open a wive file ثم تختار الملف الصوتي
قبل أن نحوله الى ملف في ال C وبما أننا سنخرج الصوت على رجل واحدة
لابد أن نضبط ال BTC هكذا :
نضبط algorithm الى 1bit



الان نحول الملف الى C هكذا
file ثم export pic mikroc file.c

ونحفضه في المكان الذي نريد و بالاسم الذي نريد
اللف الناتج يكون عند فتحه بال mikroc هكذا :



لنفترض أننا سمينا الملف الناتج على ال BTC SOUND ENCODER باسم wave.c
الان نفتح البرنامج الثاني BTC2CCS.EXE
نضغط على select file ونختار الملف الذي سميناه wave ثم نضغط على convert ونعطي اسم للملف وليكن sound ونختار المكان الذي نخزنه فيه
هذا الملف الناتج عبارة عن مصفوفة وهي تمثل الصوت الذي نريد استعماله محول الى شكل رقمي ومخزن بشكل مصفوفة كما يعطي لنا في الاخير عدد ال bytes التي تتكون منها المصفوفة
ويسميها sound_length
الان ماعلينا فعله هو اخراج هذه المصفوفة على أحد أرجل ال pic وذلك بقراءتها من اليسار الى اليمين
نبدأ بال byte رقم 0 فنخرجها bit بعد bit من اليسار الى اليمين أي نبدأ بال bit7 ثم ال bit6
........ الى ال bit0 ثم ننتقل الى ال byte1 وهكذا

أي نعمل هكذا
1- نفتح sound.c الناتج على BTC2CCS بواسطة mikroc ثم ننسخه ونلسقه في بداية البرنامج
2- ننشأ البرنامج الذي سيتكفل باخراج المصفوفة على أحد أرجل ال pic ولتكن الرجل رقم 7

الان نكتب البرنامج الاساسي هكذا :


void main() {-------------------------------------------------------1
trisd=0;-----------------------------------------------------2
portd=0;----------------------------------------------------3
for(i=0;i<sound_length-1;i++){-------------------------4
byte=sound_data[i];----------------------------------5
for(ii=0;ii<8;ii++){------------------------------------6
if(byte & 0x80) portd.f7=1;-------------------------7
else portd.f7=0;--------------------------------------8
byte= byte << 1;------------------------------------9
delay_us(38);-----------------------------------------10
}---------------------------------11
}-------------------------------------12
}------------------------------------13

البرنامج هنا :

http://ifile.it/a245ilx/new.rar

ملاحظة :
لابد من اضافة مكبر صوت كما لايمكن ان نجربه على ال proteus لان عند خلط عناصر analog مع digital لا يشتغل ال proteus في الوقت الحقيقي وبالتالي لا نسمع الصوت كما في تجربة واقعية وحتى في الواقع لا نسمع صوت جيد ولكن سوف يكون مقبول .

شرح البرنامج :

في السطر 4 عملنا حلقة لقراءة المصفوفة من sound_data[0]=0xaa الى اخر عدد وهو
sound_data [sound_length]=0x00
لماذا كتبنا sound_length لان طول المصفوفة متغير حسب الصوت المراد اخراجه فقد سمى btc2ccs رقم اخر عدد في المصفوفة sound_length بعد أن حسب عدد ال bytes وأعطى العدد ل
soud_length بالتعليمة :
define sound_length 1785 #
فقد أحصى عدد عناصر المصفوفة 1785 وسمى العدد sound_length
لاحظ هنا سمى عدد العناصر وليست العناصر في حد ذاتها وذلك لان عدد عناصر المصفوفة متغير
فأعطى لها اسم ( متغير) فالاسم يمكن أن يحمل أي عدد

السطر 5 :
الان محتوى كل عنصر من المصفوفة وضعناه في متغير أنشأناه سلفا وسميناه byte

من المعروف أن ال byte مكونت من 8bits
ولنبدأ بالعنصر رقم 0 مثلا .هنا العنصر رقم 0 هو sound_data[0]=0xaa
قيمته 0xaa في النظام 16 أي 10101010 في النظام الثناءي
فلنخرج هذه 8bits أي 10101010 على الرجل رقم 7 من ال portd وهذا دور الحلقة الثانية
التي تبدأ من السطر 6
ماذا فعلنا هنا بالظبط ؟
if(byte & 0x80)---------0
لدينا : 0x80=10000000
و byte=10101010
نريد أن نخرج ال bit الاولى على اليسار أي 1 هنا فنحذف بقية ل bits بعمل masque مع
ال byte
10000000باستعمال and أي أداة الوصل و
أي :
10101010 و 10000000 =10000000

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


الان و تعمل مع byte الاولى و ال byte الثانية نفس الشيء
فتبدأ بال bit رقم 0 من ال byte الاولى مع ال bit رقم 0 من ال byte الثانية فاذا كان أحدهما 0
مباشرة ال bit الناتجة 0 فحتى تكون البايت الناتجة 1 لا بد أن تكون bit الاولى 1 وال bit الثانية 1


لان بستعمال الاداة الشرطية if التي تعمل هكذا :
اذا كان ماداخل القوسين يختلف عن 0 تقوم بتنفيذ الامر الذي يليها ( اذا كان لدينا مجموعة من الاوامر نضعها داخل حاضنتين ) هنا 10000000 عدد يختلف عن 0 اذا سوف ينفذ الامر
portd.f7=1 أي سوف يخرج ال 1 وذلك ما نريده
أخرجنا الرقم الاول ملوش لازمة الان فنعمل ازاحة الى اليسار لنزيح الرقم الاول ونجعل الرقم الثاني هو الاول
وذلك هو دور السطر 9
بعد الازاحة تصبح ال byte=01010100
الان الرقم الذي نريد اخراجه هو 0 فنرجع الى if(byte&0x80)
01010100 & 10000000<--------------byte & 0x80 تعطي 00000000
أي سيصبح لدينا if(00000000) <---------- 0 هنا شرط ال if غير محقق فينفذ البرنامج else
أي portd.f7=0 أي يخرج 0 على الرجل 7 وذلك مانريده وهكذا دواليك الى أن تنتهي المصفوفة

بقي الان أن نضبط سرعة الاخراج ب 22050 bit في الثانية وذلك دور ال delay_us(38) في السطر10
لقد ضبطها بواسطة mikroc حيث وضعت البرنامج يشيغل بالضغط f9 وحسبت الزمن بين تغير
portd و التغير الموالي باستعمال view stopwatch من run
حيث عند تغير portd في watch window نضغط على reset to zero في view stopwatch
ونحسب 45us أي ميكروثانية لان t=1/f=1/22050=45*10^-6
أي 45 في 10 أس ناقص 6 ثانية أي 45 ميكرو ثانية .
الان الثاني:
عندما يكون الصوت طويل هنا نحتاج الى ذاكرة خارجية ولتكن 24c64 هذه الذاكرة تحمل 64 ألف bits
أي 8 ألاف bytes
وهي تعمل على ال bus المسمى i2c

ملاحظة :
انني أوضح الان فقط فلا تجرب الدارة في الواقع حتى نصل الى الاخير وسوف أرسم الدارة على ال proteus كاملة بالذاكرة وأكتب البرنامج كاملا على mikroc ولا يبقى لك سوى ضبط
delay_us(38)--------0
لتحصل الى أحسن نتيجة أثناء التجريب
هنا 22050 ليست ثابتة لجميع الاصوات فهذه أعطاها BTC SOUND ENCODER
كما أعطى المقاومة R1 و المكثف C1 وهم مذكورين في أعلى البرنامج الذي يولده ال BTC SOUND ENCODER
سوف أكمل


التعديل الأخير تم بواسطة : lahoioui بتاريخ 03-04-2010 الساعة 07:34 PM

abnidal
:: مهندس متميز ::
تاريخ التسجيل: Nov 2006
الدولة: مصر
المشاركات: 381
نشاط [ abnidal ]
قوة السمعة:
قديم 01-04-2010, 04:40 PM المشاركة 31   
افتراضي مشكو


متابع معاك انشاء الله



جزاك الله خيرا وادامك الله


king ridha
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2010
المشاركات: 95
نشاط [ king ridha ]
قوة السمعة:
قديم 01-04-2010, 06:36 PM المشاركة 32   
adevil


والله عمل رائع اخي لهواوي انا من متتبعيك وساحاول تطبيقه على الواقع
شكرا وانا من مشجعيك لذا ارغب بمتابعتك



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