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

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

ennng
:: مهندس متميز ::
تاريخ التسجيل: Jul 2010
المشاركات: 466
نشاط [ ennng ]
قوة السمعة:0
قديم 22-01-2013, 04:49 PM المشاركة 1   
افتراضي ارسال اشارة as a real time !!! Twitter FaceBook Google+



اريد عمل ديزاين بحيث ان المتحكم الاول الذي على اليسار يستقبل اشارة sin wave ويرسلها الي المتحكم الثاني على اليمين ومن ثم نعرضها على السلسكوب
طبعا المتحكم يعطي 10bits ADC ولكن انا جعلت portb 8bits في المتحكم الثاني مخرج يعني تم حذف 2bits وهذا راح يؤثر على الاشارة لكن لايلغيها لكن الغريب في الامر يعطي اشارة غريبة جدا ممكن الخطأ يكون في IC DAC

هذه الدائرة



هذا كود المرسل المتحكم الذي في اليسار:

unsigned short sinwave;
void main() {

Trisa=0xFF;

UART1_Init(9600);
delay_ms(100);
while(1){
sinwave = ADC_Read(0);
UART1_Write(sinwave);
Delay_ms(500); }

}
وهذا كود المستقبل الذي في اليمين:

unsigned short sinrec;

void interrupt(){
if (PIR1.RCIF == 1) {

sinrec = UART1_Read();
portb=sinrec;
//delay_ms(100);
PIR1.RCIF=0;
}}



void main() {

trisb=0x00;
portb=0;

PIE1.RCIE = 1;
INTCON.PEIE = 1;
INTCON.GIE = 1;



UART1_Init(9600);
delay_ms(100);
while(1){



}
}

اعلانات

hunter27
:: مهندس جيد ::
تاريخ التسجيل: Jul 2012
الدولة: المغرب
المشاركات: 284
نشاط [ hunter27 ]
قوة السمعة:0
قديم 22-01-2013, 10:00 PM المشاركة 2   
افتراضي


السلام عليكم

لقد قمت من قبل بتجربة هذه الفكرة مع 16F887 و DAC 0808 و TL082

اضن ان لديك المشكل في المرسل عليك بزيادة هذا السطر


[6]char sinwave_data

void main() {

Trisa=0xFF;

UART1_Init(9600);
delay_ms(100);
while(1){
sinwave = ADC_Read(0);

wordtostr(sinwave,sinwave_data)

UART1_Write(sinwave_data)
Delay_ms(500); }

}


التعديل الأخير تم بواسطة : hunter27 بتاريخ 22-01-2013 الساعة 10:03 PM
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

hunter27
:: مهندس جيد ::
تاريخ التسجيل: Jul 2012
الدولة: المغرب
المشاركات: 284
نشاط [ hunter27 ]
قوة السمعة:0
قديم 22-01-2013, 10:15 PM المشاركة 3   
افتراضي


هذه صورة لدائرة

http://www2.0zz0.com/2013/01/22/23/724799929.png

ملاحظة في isis استعملة lm741 اما في التطبيق استعملة tl082


ennng
:: مهندس متميز ::
تاريخ التسجيل: Jul 2010
المشاركات: 466
نشاط [ ennng ]
قوة السمعة:0
قديم 23-01-2013, 11:16 AM المشاركة 4   
افتراضي


بارك الله فيك اخي hunter27
قمت بنفس الاشياء لكن لايعمل ايضا واستخدمت نفس الدائرة بتاعك ولم يعمل شئ

طيب ممكن يكون المشكل في برنامج الاستقبال!!

كم قيمة DC اللي استخدمته في DAC8080 ,LM741

جزاك الله خير


الصورة الرمزية Qudor
Qudor
:: مهندس ::
تاريخ التسجيل: Apr 2011
المشاركات: 37
نشاط [ Qudor ]
قوة السمعة:0
قديم 23-01-2013, 09:44 PM المشاركة 5   
افتراضي


اخي العزيز ennng اذا اردت ان تستخدم ثمان بتات فقط فليك ان تجعل فولتية الاشارة الداخلة الى الـpic لاتزيد عن 1.2 فولت لتضهر لديك الاشارة كاملة.
ويجب عليك ان تلغي اي Delay في اللوب الخاص باخذ الاشارة وارسالها كذلك عند استلامها.
ويجب كذلك ان تتاكد من ربك الـ DAC من الديتا شيت الخاصة به لان اكثر الـ DACs يكون ادخال الديتا اليه بالعكس اي ان D0 هو الـ MSB والعكس بالعكس
وارجوا ان تضع لنا صور الاشارات التي ادخلتها والتي ظهرت لديك بعد الارسال وان تضع قيم الفولتيات والتردد لنتمكن من التقرب من المشكلة


ennng
:: مهندس متميز ::
تاريخ التسجيل: Jul 2010
المشاركات: 466
نشاط [ ennng ]
قوة السمعة:0
قديم 23-01-2013, 10:16 PM المشاركة 6   
افتراضي


بارك الله فيك اخي الكريم Qudor على سرعة الاستجابة

سؤالي لماذا حددت قيمة الفولت 1.2 في حالة الثماني خانات ياليت تشرح بشكل مختصر , طيب اذا كان مصدر الجهد عندي 3 فولت بدل 5 فولت هل تختلف القاعدة ام ماذا.

بالنسبة للاشارة المدخلة هي sin wave عادية بتردد 100 هيرتز و amplitude ب1 فولت اما الاشارة الخارجة ولاشئ يعطيني فقط خط مستمر رغم اني لغيت delay



كود المرسل:

كود:
  char sinwave;
  char sinwave_data[6];
void main() {

     Trisa=0xFF;
     
  UART1_Init(9600);
  delay_ms(100);
  while(1){
   sinwave = ADC_Read(0);
   wordtostr(sinwave,sinwave_data);
   UART1_Write(sinwave_data);
   
     }
    
    }
كود المستقبل:

كود:
unsigned short sinrec;

void interrupt(){
if (PIR1.RCIF == 1) {

sinrec = UART1_Read();
portb=sinrec;
//delay_ms(100);
PIR1.RCIF=0;
 }}



void main() {

trisb=0x00;
portb=0;

PIE1.RCIE = 1; 
INTCON.PEIE = 1; 
INTCON.GIE = 1;



UART1_Init(9600);
delay_ms(100);
while(1){
 
 /*if (UART1_Data_Ready() == 1){
  sinrec = UART1_Read();
  delay_ms(100);
  portb=sinrec; } */


}
 }


ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 12,214
نشاط [ ماجد عباس محمد ]
قوة السمعة:408
قديم 24-01-2013, 03:49 AM المشاركة 7   
افتراضي


اعتقد ان المشكلة فى دائرة DAC0808
راجه دائرتها مع الداتا شيت صفحة 3 لأن استخدام R2 بقيمة 1 ك بدلا من 5 يوثر كثيرا على المدى و قيمة الخرج
ايضا باقى الأطراف تحتاج مراجعة
لا أظن ان توصيل منفذ تسلسلى سيكون مشكلة لذا ربما يكون الأفضل توصيل DAC0808 مع مجموعة أزرار أو عداد تصاعدى و اضبط قيمها لتعطى خرج مقبول ثم اضف باقى الدائرة


ennng
:: مهندس متميز ::
تاريخ التسجيل: Jul 2010
المشاركات: 466
نشاط [ ennng ]
قوة السمعة:0
قديم 24-01-2013, 11:42 AM المشاركة 8   
افتراضي


بارك الله فيك اخي المهندس ماجد

حاولت بكل الطرق وغيرت المقاومات وغيرت DAC لكن دون جدوى

ياليت الاخ hunter27 بارك الله فيه او احد الاخوة اللي اشتغل معاه ان يوضح لنا

بارك الله في الجميع

إضافة رد

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

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

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


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

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