NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3071 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 13 از 13

موضوع: مشکل در اسکن کی پد

  1. #1
    عضو جدید
    تاریخ عضویت
    Nov 2015
    نوشته ها
    7
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض مشکل در اسکن کی پد

    با سلام خدمت دوستان عزیز

    مشکلی در رابطه با اسکن صفحه کلید داشتم.

    قراره میکرو کی پد رو از پورت B بخونه و روی سون سگمنتی که به پورت D وصله ، کدهای هگزی رو که تعریف شده نشون بده.

    پورت B مقاومت های Pull up ش فعاله در نتیجه از ورودی 0 برای تشخیص سطر و ستون استفاده میکنه.

    از ATmega 32A استفاده میکنم.

    سورس برنامه رو هم تو فایل ضمیمه قرار دادم ولی نمیدونم مشکلم چیه که اصلا سون سگمنت هیچ چیزی رو نشون نمیده و حتی

    تغییری هم نمیکنه.

    ممنون میشم اگه راهنمایی م کنین.
    فايل هاي پيوست شده فايل هاي پيوست شده

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2
    کاربر فعال
    تاریخ عضویت
    Feb 2012
    نام
    مصطفی
    نوشته ها
    273
    تشکر
    195
    تشکر شده 128 بار در 93 پست

    پیش فرض

    سلام
    شما مطمئنی که برنامت کامپایل میشه؟
    1- تو زبان C شما نمیتونی وسط تابع متغیر تعریف کنی و تعریف متغیر حتما باید اول تابع و قبل از دستورات دیگه باشه.
    2- توی اولین شرطی که گذاشتی باید || رو به && تغییر بدی در غیر این صورت شرط همیشه برقراره و هیچ وقت وارد قسمت های بعدی برنامه نمیشه.
    3- بهتره به جای goto از تابع استفاده کنی.
    4- اول سون سگمنت رو امتحان کن و از درست بودن مدار و نمایش اعدادش مطمئن شو.

  4. #3
    عضو جدید
    تاریخ عضویت
    Nov 2015
    نوشته ها
    7
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض

    نقل قول نوشته اصلی توسط mstkmn نمایش پست ها
    سلام
    شما مطمئنی که برنامت کامپایل میشه؟
    1- تو زبان C شما نمیتونی وسط تابع متغیر تعریف کنی و تعریف متغیر حتما باید اول تابع و قبل از دستورات دیگه باشه.
    2- توی اولین شرطی که گذاشتی باید || رو به && تغییر بدی در غیر این صورت شرط همیشه برقراره و هیچ وقت وارد قسمت های بعدی برنامه نمیشه.
    3- بهتره به جای goto از تابع استفاده کنی.
    4- اول سون سگمنت رو امتحان کن و از درست بودن مدار و نمایش اعدادش مطمئن شو.
    جواب:
    0 - کامپایل میشه.
    1 - محل تعریف متغیر ها رو به قبل از شروع تابع main بردم.
    2 - or ( ||) ها رو به and (&& ) تغییر دادم و کامپایل کردم ولی دیگه حتی dot point سون سگمنت هم که روشن میشد هم روشن نشد.
    3 - سون سگمنت رو تست کردم سالمه.


    این هم سورس اصلاح شده که هنوز کار نمیکنه.
    فايل هاي پيوست شده فايل هاي پيوست شده
    ویرایش توسط mohamad20111 : 07-11-2015 در ساعت 12:31

  5. #4
    کاربر فعال
    تاریخ عضویت
    Feb 2012
    نام
    مصطفی
    نوشته ها
    273
    تشکر
    195
    تشکر شده 128 بار در 93 پست

    پیش فرض

    تو قسمت اول تا وقتی که هیچ کلیدی فشار داده نشده شرط اول برقراره و اگه مدار درست باشه باید مقدار 0x10 روی پورد D باشه. پس اگه چیزی نشون نمیده احتمالا باید یه جای مدار مشکلی باشه.
    شما 7سگمنت رو مستقیم مقدار بده و ببین درست کار میکنه یا نه.
    مثلا
    ِِ
    DDRD=0xFF;
    PORTD=0xFF
    باید 7سگمنت رو کامل روشن کنه.

  6. #5
    عضو جدید
    تاریخ عضویت
    Nov 2015
    نوشته ها
    7
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض

    نقل قول نوشته اصلی توسط mstkmn نمایش پست ها
    تو قسمت اول تا وقتی که هیچ کلیدی فشار داده نشده شرط اول برقراره و اگه مدار درست باشه باید مقدار 0x10 روی پورد D باشه. پس اگه چیزی نشون نمیده احتمالا باید یه جای مدار مشکلی باشه.
    شما 7سگمنت رو مستقیم مقدار بده و ببین درست کار میکنه یا نه.
    مثلا

    باید 7سگمنت رو کامل روشن کنه.

    سلام. مجددا چک کردم.ایراد سخت افزاری نداره.اتصالات و سخت افزار درست هستن.
    فکر کنم مشکل از برنامه باشه.
    نظر شما چیه؟

  7. #6
    کاربر فعال
    تاریخ عضویت
    Feb 2012
    نام
    مصطفی
    نوشته ها
    273
    تشکر
    195
    تشکر شده 128 بار در 93 پست

    پیش فرض

    سلام
    اگه ایراد سخت افزاری نداشته باشی تا زمانی که کلیدی رو نزنی با توجه به DDRB=0xF0,PORTB=0x0F شرط اول برقراره
    if ( (PINB0 == 1) && (PINB1 == 1) && (PINB2 == 1) && (PINB3 == 1) )
    { DDRD=0xFF ; PORTD=0x10; goto A; }
    و باید مقدار 0x10 روی پورت D باشه یعنی PORTD.4=1 و بقیه پین های پورت D صفر باشه و پین های PINB.0 تا PINB.3 هم یک باشه. همینطوره؟
    راستی از چه کامپایلری استفاده میکنی؟
    PINB0 درسته یا PINB.0؟

  8. #7
    عضو جدید
    تاریخ عضویت
    Nov 2015
    نوشته ها
    7
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض

    نقل قول نوشته اصلی توسط mstkmn نمایش پست ها
    سلام
    اگه ایراد سخت افزاری نداشته باشی تا زمانی که کلیدی رو نزنی با توجه به DDRB=0xF0,PORTB=0x0F شرط اول برقراره

    و باید مقدار 0x10 روی پورت D باشه یعنی PORTD.4=1 و بقیه پین های پورت D صفر باشه و پین های PINB.0 تا PINB.3 هم یک باشه. همینطوره؟
    راستی از چه کامپایلری استفاده میکنی؟
    PINB0 درسته یا PINB.0؟

    به نظر من هم منطق برنامه همین رو میگه.یعنی وقتی در پورت یا پینی مقاومت های Pull up فعال باشن و پورت یا پین مورد نظر در حالت ورودی باشن (DDRx=0x00,Portx=0xFF) ، وقتی بهشون چیزی وصل نباشه ، یا وصل باشه ولی مثل دکمه ای که فشار داده نشده High Impedance باشه ، باید میکرو یک بخونه.

    در این برنامه هم وقتی دکمه ای هنوز فشار داده نشده باشه برنامه از

    A:
    DDRB = 0xF0;
    PORTB = 0x0F;
    if ( (PINB0 == 1) && (PINB1 == 1) && (PINB2 == 1) && (PINB3 == 1) )
    { DDRD=0xFF ; PORTD=0x10; goto A; }



    خارج نمیشه.

    از کامپایلر AVR Studio 6 استفاده میکنم.تو AVR Studio 6 پین B0 اینجوری نوشته میشه : PINB0.

    به نظر شما آیا منطق و کدهای برنامه مشکلی دارن؟
    ویرایش توسط mohamad20111 : 11-11-2015 در ساعت 00:24

  9. #8
    کاربر فعال
    تاریخ عضویت
    Feb 2012
    نام
    مصطفی
    نوشته ها
    273
    تشکر
    195
    تشکر شده 128 بار در 93 پست

    پیش فرض

    سلام
    منطق برنامه که به نظر درسته فقط اینکه اگه کلیدی زده بشه بعد از رها کردن کلید با یه تاخیر 500ms برنامه به قسمت A میره و دوباره مقدار روی 7سگمنت تغییر میکنه و اگه تنظیمات کلاک درست نباشه ممکنه زمان تاخیر 500ms نباشه.
    یه نکته دیگه اینکه شما 5تا مقدار 0x10 داری یعنی 5 تا از کلید ها این مقدار رو نمایش میدن که چون تو قسمت A هم همین مقدار رو داره اگه هر کدوم از اون کلیدها رو فشار بدی متوجه عملکردش نمیشی.
    شما توی قسمت A هیچ چی روی 7 سگمنت ننویس. این طوری هر مقداری که نشون داده بشه تا کلید دیگه ای زده نشه روی 7 سگمنت باقی میمونه.
    راستی 7سگمن رو مستقیم مقدار دادی؟ تونستی اعداد مختلف رو روش نشون بدی؟

  10. #9
    عضو جدید
    تاریخ عضویت
    Nov 2015
    نوشته ها
    7
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض

    برای کلاک میکرو ، از کلاک داخلی میکرو استفاده میکنم.در فرکانس 1MHz .

    راجع به

    یه نکته دیگه اینکه شما 5تا مقدار 0x10 داری یعنی 5 تا از کلید ها این مقدار رو نمایش میدن که چون تو قسمت A هم همین مقدار رو داره اگه هر کدوم از اون کلیدها رو فشار بدی متوجه عملکردش نمیشی.
    شما توی قسمت A هیچ چی روی 7 سگمنت ننویس. این طوری هر مقداری که نشون داده بشه تا کلید دیگه ای زده نشه روی 7 سگمنت باقی میمونه.
    هم بگم که چون کی پدم 4*4 هستش ، طبیعتا عددای از 0 تا 9 رو داره.واسه بقیه ش چون عددی تعریف نشده همه رو 0x10 گذاشتم . ولی به نظرم

    این که شما میگی چون کدهای سون سگمنت مثل همه ، یعنی چندتاش 0x10 هستن ، متوجه تغییرش نمیشی ، مشکلی نباشه چون برای سایر

    عددها هم تغییری روی سون سگمنت نمی بینم.



    و راجع به

    راستی 7سگمن رو مستقیم مقدار دادی؟ تونستی اعداد مختلف رو روش نشون بدی؟
    باید بگم سون سگمنت سالمه.تونستم مستقیم اعداد مختلف رو روش نشون بدم.

    به نظرتون حالا باید چه کار کنم؟
    ویرایش توسط mohamad20111 : 16-11-2015 در ساعت 12:32

  11. #10
    کاربر فعال
    تاریخ عضویت
    Feb 2012
    نام
    مصطفی
    نوشته ها
    273
    تشکر
    195
    تشکر شده 128 بار در 93 پست

    پیش فرض

    ببین این جواب میده؟
    فايل هاي پيوست شده فايل هاي پيوست شده

  12. #11
    عضو جدید
    تاریخ عضویت
    Nov 2015
    نوشته ها
    7
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض

    نقل قول نوشته اصلی توسط mstkmn نمایش پست ها
    ببین این جواب میده؟
    سلام
    ببخشید که یه هفته ای جوابم دیر نشد.

    امروز برنامه شما رو تست کردم ، ولی نمیدونم چرا هیچ کدوم از سگمنت های سون سگمنت حتی روشن نشد.قبلش با میکرو رو همون سون سگمنت اعداد 0 تا 9 رو روی پورت d نشون داده بودم ، حتی سیم های سون سگمنت رو از میکرو جدا هم نکردم فقط برنامه شما رو ، روش ریختم و کی پد رو به پورت b وصل کردم.

  13. #12
    کاربر فعال
    تاریخ عضویت
    Feb 2012
    نام
    مصطفی
    نوشته ها
    273
    تشکر
    195
    تشکر شده 128 بار در 93 پست

    پیش فرض

    سلام
    پس احتمالا کیپد اصلا کار نمیکنه و به خاطر همین وارد شرط نمیشه و هیچی نشون نمیده.
    راستی کیپد رو چطوری وصل کردی؟
    آماده بوده یا خودت ساختی؟
    بین پینا مقاومت گذاشتی؟
    اگه مقاومت نداشته باشه احتمالا پورت میکرو سوخته.

  14. #13
    عضو جدید
    تاریخ عضویت
    Nov 2015
    نوشته ها
    7
    تشکر
    0
    تشکر شده 0 بار در 0 پست

    پیش فرض

    ضمن عرض سلام مجدد

    فکر کنم حرف شما درست باشه و مشکل از نرم افزار نباشه و ممکنه من اتصالات رو صحیح انجام ندادم.

    اگه ممکن شکل صحیح اتصالات سخت افزاری را upload کنید.

    با تشکر

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

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