ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.






جهت تبلیغ در وب سایت ECA کلیک کنید.

کاربران برچسب زده شده

صفحه 3 از 4 نخست 1234 آخرین
نمایش نتایج: از 21 به 30 از 34
  1. #21
    2017/06/13
    502
    261

    پاسخ : پروتكل ارتباطي spi بين دو ميكرو براي انتقال محتوايي يك متغير

    نقل قول نوشته اصلی توسط aashkanpasha

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    دوست عزيز مهندس اين مشكل رو قبلا زحمت كشيديد گفتيد حل كردم. من جاي ديگه موندم. من الان تو سمت مستر عدد رو از كيپد ميگيرم و پس از زدن كليد مربع اون عدد رو ميشكونم با دوتا بايت هشت تايي ميفرستم. تا اينجا اوكيه.
    اونور طرف سليو هم دوتا بايت رو ميگيرم و تبديل به يه عددش مكنم و ميفرستم تابع سگمنت و رو سگمنت نمايش ميدم. اينا هم اوكيه. هرعدد نيفزنم تو كيپد اينور ميبينم.
    تو حلقه هم ميندازم قشنگ ثابت ميبينم چشمك نميزنه. فقط نمتونم بگم بهش دوتا بايت رو فرستاد و عددش كرد اونو تو سنمنت هي تو خلقه نشون بده تا تا تا تا اون يكي دوتا بايد بياد. همينش مونده
    خوب برادر من سمت اسلیو بیا یکاری کن حتما دوتا بایت بگیره! کافیه بایت اول رو که گرفت، حتما منتظر بمونه که بایت بعدی رو هم بگیره؛ خارج از این حالت هم داده ای قرار نیست ارسال بشه؛ این مسئله انقدر سادس که توضیحش سخته! شما برو کامل در مورد spi و تایمر و پرچم و هرچی که هست اطلاعات کسب کن، بعد بیا رو پروژه کار کن! ره صد ساله رو که یک شبه نمیشه رفت

    Sent from my LG-H870S using Tapatalk
  2. #22
    2014/07/10
    54
    1

    پاسخ : پروتكل ارتباطي spi بين دو ميكرو براي انتقال محتوايي يك متغير

    نقل قول نوشته اصلی توسط hossein.m98

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    خوب برادر من سمت اسلیو بیا یکاری کن حتما دوتا بایت بگیره! کافیه بایت اول رو که گرفت، حتما منتظر بمونه که بایت بعدی رو هم بگیره؛ خارج از این حالت هم داده ای قرار نیست ارسال بشه؛ این مسئله انقدر سادس که توضیحش سخته! شما برو کامل در مورد spi و تایمر و پرچم و هرچی که هست اطلاعات کسب کن، بعد بیا رو پروژه کار کن! ره صد ساله رو که یک شبه نمیشه رفت

    Sent from my LG-H870S using Tapatalk
    متاسفانه من نميتونم منظورمو برسونم. حتي خودمم بعدا مخونم جوابمو بهتون ميبينم نتونستم منتقل كنم مشكلو. اينايي كه ميگينو ميدونم. مشكل چيز ذيگس كلا
  3. #23
    2017/06/13
    502
    261

    پاسخ : پروتكل ارتباطي spi بين دو ميكرو براي انتقال محتوايي يك متغير

    نقل قول نوشته اصلی توسط aashkanpasha

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    متاسفانه من نميتونم منظورمو برسونم. حتي خودمم بعدا مخونم جوابمو بهتون ميبينم نتونستم منتقل كنم مشكلو. اينايي كه ميگينو ميدونم. مشكل چيز ذيگس كلا
    همونجوری که قبلا گفتم اگر از وقفه تایمر و حتی وقفه spi درست استفاده کنید، مشکلی بابت چشمک زدن و روشن نشدن سون سگمنت و معطل بودن برنامه نخواهید داشت. این دو مورد رو حتما در موردش مطالعه کنید.

    Sent from my LG-H870S using Tapatalk
  4. #24
    2014/07/10
    54
    1

    پاسخ : پروتكل ارتباطي spi بين دو ميكرو براي انتقال محتوايي يك متغير

    نقل قول نوشته اصلی توسط hossein.m98

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    همونجوری که قبلا گفتم اگر از وقفه تایمر و حتی وقفه spi درست استفاده کنید، مشکلی بابت چشمک زدن و روشن نشدن سون سگمنت و معطل بودن برنامه نخواهید داشت. این دو مورد رو حتما در موردش مطالعه کنید.

    Sent from my LG-H870S using Tapatalk
    ممنونم مرسي. كه توجه فرموندين
  5. #25
    2014/07/10
    54
    1

    پاسخ : پروتكل ارتباطي spi بين دو ميكرو براي انتقال محتوايي يك متغير

    اناتناتنلاتانمنم
    نقل قول نوشته اصلی توسط aashkanpasha

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    ممنونم مرسي. كه توجه فرموندين
    دلیل: ادغام دو پست برای جلوگیری از اسپم

    سلام روزتون بخیر
    با زحمتهای ما
    والا من رفتم وقفه مطالعه کردم و تو برنامم هم اعمال کردم و تازه فهمیدم مشکل کجاست.
    من یه حلقه بی تهایت while(1) دارم- که توش میام و میگم تا بی نهایت segment(number) رو انجام بده یعنی عدد نامبر رو رو سون سگمنت نشون بده. اونم اینکارو مکنه.
    فقط تو این حلقه که میام مدام spdr رو میخونم یه اتفاقی میفته. عدد که وارد میشه میره میوفته تو spdr و نمایش میده و چون حلقه بی نهایته میاد دوباره spdr رو میخونه که چون عدد وارد نشده خالیه توش و خالی رو seg,ent میکنه- مشکلم اینه. عدد هر بار که میزنم درست نشون میده- ولی یه بار- و چون حلقه بی نهایته میاد دوباره بالا چون spdr خالی خالی رو نشون میده- segment هم باید بی نهایت باشه. مشکلم اینجای کاره. تونستم برسونم؟

    while (1)
    {
    segment(number);

    num_h=spi(0x00); //take upper bits
    number=num_h;
    number=(number<<8);
    num_l=spi(0x00); //take lower bits
    number=(number|num_l); //create number by bits
    }

    }



    حتی اومدم گفتم که وقتی spdr خالی نیست عدد رو بگیره که بازم ج نداد. بفرم زیر:


    if(SPDR!=NULL){
    num_h=spi(0x00); //take upper bits
    number=num_h;
    number=(number<<8);
    num_l=spi(0x00); //take lower bits
    number=(number|num_l); //create number by bits
    }

    یعنی مثلا 32 رو میزنم میره تو spdr منتقل میشه و تو سلیو تو حلقه بی نهایت تابع عدد رو نشون میده میره پایین حلقه میاد دوباره تکرار شه چون عدد وارد نشده و spdr خالی شده لذا خالی رو نشون میده- بعد دوباره مثلا 89 رو میزنم اونو میریزه تو spdr نشون میده ولی حلقه ک تکرار میشه دیگه داخل spdr خالیه و خالی رو نشون میده. باید دستوری بدم که وقتی spdr پره اینکارو بکنه که از null! استفاده کردم اونم نشد. یا کاری کنم spdr رو خوند خالی نکنه یا همچین چیزی.

    نقل قول نوشته اصلی توسط hossein.m98

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    همونجوری که قبلا گفتم اگر از وقفه تایمر و حتی وقفه spi درست استفاده کنید، مشکلی بابت چشمک زدن و روشن نشدن سون سگمنت و معطل بودن برنامه نخواهید داشت. این دو مورد رو حتما در موردش مطالعه کنید.

    Sent from my LG-H870S using Tapatalk
    ویرایش توسط aashkanpasha : 2019/08/13 در ساعت 19:50
  6. #26
    2017/06/13
    502
    261

    پاسخ : پروتكل ارتباطي spi بين دو ميكرو براي انتقال محتوايي يك متغير

    نقل قول نوشته اصلی توسط aashkanpasha

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    اناتناتنلاتانمنم


    دلیل: ادغام دو پست برای جلوگیری از اسپم

    سلام روزتون بخیر
    با زحمتهای ما
    والا من رفتم وقفه مطالعه کردم و تو برنامم هم اعمال کردم و تازه فهمیدم مشکل کجاست.
    من یه حلقه بی تهایت while(1) دارم- که توش میام و میگم تا بی نهایت segment(number) رو انجام بده یعنی عدد نامبر رو رو سون سگمنت نشون بده. اونم اینکارو مکنه.
    فقط تو این حلقه که میام مدام spdr رو میخونم یه اتفاقی میفته. عدد که وارد میشه میره میوفته تو spdr و نمایش میده و چون حلقه بی نهایته میاد دوباره spdr رو میخونه که چون عدد وارد نشده خالیه توش و خالی رو seg,ent میکنه- مشکلم اینه. عدد هر بار که میزنم درست نشون میده- ولی یه بار- و چون حلقه بی نهایته میاد دوباره بالا چون spdr خالی خالی رو نشون میده- segment هم باید بی نهایت باشه. مشکلم اینجای کاره. تونستم برسونم؟

    while (1)
    {
    segment(number);

    num_h=spi(0x00); //take upper bits
    number=num_h;
    number=(number<<8);
    num_l=spi(0x00); //take lower bits
    number=(number|num_l); //create number by bits
    }

    }



    حتی اومدم گفتم که وقتی spdr خالی نیست عدد رو بگیره که بازم ج نداد. بفرم زیر:


    if(SPDR!=NULL){
    num_h=spi(0x00); //take upper bits
    number=num_h;
    number=(number<<8);
    num_l=spi(0x00); //take lower bits
    number=(number|num_l); //create number by bits
    }

    یعنی مثلا 32 رو میزنم میره تو spdr منتقل میشه و تو سلیو تو حلقه بی نهایت تابع عدد رو نشون میده میره پایین حلقه میاد دوباره تکرار شه چون عدد وارد نشده و spdr خالی شده لذا خالی رو نشون میده- بعد دوباره مثلا 89 رو میزنم اونو میریزه تو spdr نشون میده ولی حلقه ک تکرار میشه دیگه داخل spdr خالیه و خالی رو نشون میده. باید دستوری بدم که وقتی spdr پره اینکارو بکنه که از null! استفاده کردم اونم نشد. یا کاری کنم spdr رو خوند خالی نکنه یا همچین چیزی.
    شما بیا هر باری که اطلاعات جدید وارد میشه، حالا چه با سرویس وقفه چه با چک کردن پرچم، داده روی SPDR رو بریز روی یه متغیر و به سون سگمنت دستور بده با این متغیر کار کنه. پیشنهادم بازم همون وقفه اس. یعنی توی سرویس وقفه داده SPDR منتقل بشه به متغیر

    Sent from my LG-H870S using Tapatalk
  7. #27
    2014/07/10
    54
    1

    پاسخ : پروتكل ارتباطي spi بين دو ميكرو براي انتقال محتوايي يك متغير

    یعنی :

    while (1)
    {
    segment(number);
    سرویس وقفه رو ایجاد کنم اینجا {
    num_h=spi(0x00);
    number=num_h;
    number=(number<<8);
    num_l=spi(0x00);
    number=(number|num_l);
    }


    یعنی تو حلقه بی نهایتم تابع سگمنت باشه ، و توش یه وقفه ایجاد کنم وقفه spi و تو آن دستوراتو بنویسم؟
    نقل قول نوشته اصلی توسط hossein.m98

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    شما بیا هر باری که اطلاعات جدید وارد میشه، حالا چه با سرویس وقفه چه با چک کردن پرچم، داده روی SPDR رو بریز روی یه متغیر و به سون سگمنت دستور بده با این متغیر کار کنه. پیشنهادم بازم همون وقفه اس. یعنی توی سرویس وقفه داده SPDR منتقل بشه به متغیر

    Sent from my LG-H870S using Tapatalk
    ویرایش توسط aashkanpasha : 2019/08/13 در ساعت 22:07
  8. #28
    2017/06/13
    502
    261

    پاسخ : پروتكل ارتباطي spi بين دو ميكرو براي انتقال محتوايي يك متغير

    نقل قول نوشته اصلی توسط aashkanpasha

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    یعنی :

    while (1)
    {
    segment(number);
    سرویس وقفه رو ایجاد کنم اینجا {
    num_h=spi(0x00);
    number=num_h;
    number=(number<<8);
    num_l=spi(0x00);
    number=(number|num_l);
    }


    یعنی تو حلقه بی نهایتم تابع سگمنت باشه ، و توش یه وقفه ایجاد کنم وقفه spi و تو آن دستوراتو بنویسم؟
    اصلا میدونید وقفه چیه ماهیتا؟؟؟ توی تابع وقفه ایجاد کردن معنی نداره!
    عرض کردم یک متغیر عمومی میسازید مثلا به اسم data (محل تعریفش باید بالاتر از سرویس وقفه باشه که توی سرویس وقفه هم در دسترس باشه). وقفه spi رو هم فعال میکنید. توی وقفه خیلی ساده مینویسید ;data = SPDR. حالا شمایید و DATA و کاری که میخوایید باهاش بکنید. تا زمانی هم که خودتون تغییرش ندید یا داده جدیدی نرسه و وقفه تحریک نشه، مقدارش تغییر نمیکنه. به گمونم گفتید مشکلتون فقط پاک شدن SPDR بود.
    البته از اونجایی که داده هاتون 16 بیتیه، بهتره توی همون زیر روال وقفه ترفندی بزنید و دوتا داده رو بهم بچسبونید.
  9. #29
    2014/07/10
    54
    1

    پاسخ : پروتكل ارتباطي spi بين دو ميكرو براي انتقال محتوايي يك متغير

    نقل قول نوشته اصلی توسط hossein.m98

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    اصلا میدونید وقفه چیه ماهیتا؟؟؟ توی تابع وقفه ایجاد کردن معنی نداره!
    عرض کردم یک متغیر عمومی میسازید مثلا به اسم data (محل تعریفش باید بالاتر از سرویس وقفه باشه که توی سرویس وقفه هم در دسترس باشه). وقفه spi رو هم فعال میکنید. توی وقفه خیلی ساده مینویسید ;data = SPDR. حالا شمایید و DATA و کاری که میخوایید باهاش بکنید. تا زمانی هم که خودتون تغییرش ندید یا داده جدیدی نرسه و وقفه تحریک نشه، مقدارش تغییر نمیکنه. به گمونم گفتید مشکلتون فقط پاک شدن SPDR بود.
    البته از اونجایی که داده هاتون 16 بیتیه، بهتره توی همون زیر روال وقفه ترفندی بزنید و دوتا داده رو بهم بچسبونید.
    بله. من بايد قبل تابع int main يه تابع وقفه بسازم. بعد توي int main و قبل while بايد وقفه رو فعاب كنم . و توي while هم كار دايم خودمو انجام بدم. با اينكار segment(number) هميشه اجرا ميشه و اگر ديتا اومد وقفه ايجاد ميشه و ميره اون تابع اجرا ميشه. درسته؟
    فارسيش اينه.
    توي سليو:


    interrupt [SPI_STC] void spi_isr(void)
    {
    unsigned char data;
    data=SPDR;
    // Place your code here


    }

    اين تعريف تابع وقفس.

    اينم فعال كردن وقفس قبل whil

    // Clear the SPI interrupt flag
    #asm
    in r30,spsr
    in r30,spdr
    #endasm


    // Global enable interrupts
    #asm("sei")


    تو while هم فقط egment(data) ميكنم.


    قبل اون هم توي مستر هم تو سليو تو كانفيگ رجيسترها بيت وقفه رو ١ مكنم. درسته؟

    توي مستر ديگه كاري نمكنم. همين.
    درسته؟

    اگه دزسته اتمل معادل اينكارا رو بايد كدشو بيابم
  10. #30
    2017/06/13
    502
    261

    پاسخ : پروتكل ارتباطي spi بين دو ميكرو براي انتقال محتوايي يك متغير

    نقل قول نوشته اصلی توسط aashkanpasha

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    بله. من بايد قبل تابع int main يه تابع وقفه بسازم. بعد توي int main و قبل while بايد وقفه رو فعاب كنم . و توي while هم كار دايم خودمو انجام بدم. با اينكار segment(number) هميشه اجرا ميشه و اگر ديتا اومد وقفه ايجاد ميشه و ميره اون تابع اجرا ميشه. درسته؟
    فارسيش اينه.
    توي سليو:


    interrupt [SPI_STC] void spi_isr(void)
    {
    unsigned char data;
    data=SPDR;
    // Place your code here


    }

    اين تعريف تابع وقفس.

    اينم فعال كردن وقفس قبل whil

    // Clear the SPI interrupt flag
    #asm
    in r30,spsr
    in r30,spdr
    #endasm


    // Global enable interrupts
    #asm("sei")


    تو while هم فقط egment(data) ميكنم.


    قبل اون هم توي مستر هم تو سليو تو كانفيگ رجيسترها بيت وقفه رو ١ مكنم. درسته؟

    توي مستر ديگه كاري نمكنم. همين.
    درسته؟

    اگه دزسته اتمل معادل اينكارا رو بايد كدشو بيابم
    این قطعه کد برای کدویژنه. توی اتمل استودیو کمی تعریف سرویس وقفه فرق میکنه. برای فعال کردن وقفه واحد spi کافیه بیت SPE (یا SPIE، دقیق یادم نیست) از رجیستر SPCR رو یک کنید و نیازی به اون قطعه کد اسمبلی نیست. ضمنا فعال کردن پاسخ گویی به وقفه هم فراموش نشه؛ برای این کار توی اتمل استودیو باید بنویسید ()sei.
    در مورد باقی کد هم خوب باید ببینید برنامتون به چه شکله و به همون صورت عمل کنید.

    Sent from my LG-H870S using Tapatalk
صفحه 3 از 4 نخست 1234 آخرین
نمایش نتایج: از 21 به 30 از 34

موضوعات مشابه

  1. پروتكل ارتباطي بين ميكروكنترلرها و ماژول در يك سيستم وايرلس
    توسط aashkanpasha در انجمن میکروکنترلرهای AVR
    پاسخ: 9
    آخرين نوشته: 2019/08/10, 22:00
  2. شبكه كردن ميكرو AVR توسط پروتكل RS232
    توسط mohammadcheeta در انجمن میکروکنترلرهای AVR
    پاسخ: 13
    آخرين نوشته: 2014/08/12, 11:52
  3. انتقال يک متغير بين دو فرم در #C
    توسط Mahdi.Faani در انجمن C , C++ , C#
    پاسخ: 7
    آخرين نوشته: 2014/04/29, 22:35
  4. کدام پروتکل ارتباطي براي ارتباط بين چند ميکرو بهتر است ؟
    توسط pesar.sabz.shad در انجمن سایر مطالب مرتبط با ميکرو ها و پروسسورها
    پاسخ: 1
    آخرين نوشته: 2011/04/11, 20:55
  5. پروتكل سريال با ميكرو كنترلر
    توسط kv_rahimi در انجمن 8051
    پاسخ: 2
    آخرين نوشته: 2011/02/03, 05:02

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •