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





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









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









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





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

نمایش نتایج: از 1 به 10 از 10
  1. #1
    2013/05/02
    89
    0

    برنامه نويسي بسکام

    سلام دوستاي خوبم
    يک سوال داشتم در باره ايجتد يک پالس با فرکانس مشخص روي يک پايه ميکرو و همچنين توليد not اين پالس روي پايه ديگري از ميکرو
    من اين برنامه رو اينطوري نوشتم:
    Reset Portd.2 : Set Portd.1 : Waitus 3.25 : Set Portd.2 : Reset Portd.1 : Waitus 3.25
    البته يک do و loop هم اول و آخرش گذاشتم.
    اما مشکل من اينه که نميخوام اين حلقه تا بينهايت ادامه داشته باشه.
    بلکه ميخوام بعداز يک زمان مشخصي اين ارسال پالس متوقف بشه
    بايد چيکار کنم؟ از تايمر چطور استفاده کنم؟
    ضمن اينکه داخل اين حلقه (يعني همزمان با ارسال پالس) من ميخوام يه چيزايي رو ال سي دي نمايش بدم. که چون حلقه ادامه داره اصلا وارد دستور نمايش نميشه و چيزي نشون نميده!
    چه کنم؟
  2. #2
    2008/12/26
    383
    114

    پاسخ : برنامه نويسي بسکام

    سلام
    اولا که شما اگه بخوای هم ال سی دی رو نمایش بدی و هم پالس رو بسازی میشه در حلقه بکار برد یعنی در یک حلقه اما مسئله اینجاست که کمتر کسی پالس رو در داخل حلقه میسازه چون در برخی موارد بسته به نوع کد نویسی پریود پالس با دستورات دیگه مثل ایجاد شرط ها و دستورات دیگه مثل ال سی دی تغییر میکنه واین درست نیست یا یجوره دیگه دوره تناوب پالس تغییر میکنه
    پس باید از تایمر اون هم از وقفه تایمر استفاده کرد واینکه بخوای پالس تا زمان دلخواه کار کنه با غیر فعال کردن وقفه تایمر , پالس رو هم متوقف کرد
    برنامه زیر رو که به صورت درست هست رو بکار ببر
    کد:
    $regfile = "M8def.dat"
    $crystal = 4000000
    '================================
    Config Portb.0 = Output , Portb.1 = Output
    '================================
    Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.2 , Rs = Portd.0
    Config Lcd = 20 * 4
    '================================
    Cursor Off : Cls : Locate 1 , 1 : Lcd "<( Be Name Allah )>" : Wait 1 : Cls
    '================================
    Dim A As Word , B As Word
    A = 0
    B = 0
    '================================
    Config Timer0 = Timer , Prescale = 1
    Enable Interrupts
    Enable Ovf0
    On Ovf0 Tx_pulse
    
    '================================
    Do
    Locate 1 , 1 : Lcd "pulse conter:" ; B ; " "
    
    If B > 22000 Then Disable Interrupts
     Loop
     End
    
    '================================
    Tx_pulse:
    Incr B
    A = 0
    Portb.1 = 1
    Portb.0 = 0
    Do
    A = A + 1
    Loop Until A = 15
    Portb.1 = 0
    Portb.0 = 1
    A = 0
    Return
    اعجاز سوره یاسین
    http://www.aparat.com/v/SuoTj
  3. #3
    2008/12/26
    383
    114

    پاسخ : برنامه نويسي بسکام

    سلام
    اینم فایل بسکام وپرتئوس که میتونید اجرا کنید

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

    عضویت



    خب یه توضیح برای برنامه بدم
    دستورات اول که مشخصه در خطهای بعدی دستور پیکربندی تایمر 0 و خط بعدی فعال کردن وقفه سراسری هست خط بعد فعال کردن وقفه تایمر 0 هست که ازونجایی که تایمر 0 هشت بیتی هست پس در رجیستر تایمر از 0 تا 255 میشماره وبعد پرچم وقفه تایمر0 بالا میره واجازه وقوع وقفه رو میده در خط بعد زیر برنامه ای که برای وقفه قراره که داخلش پالس تولید بشه رو مینویسیم
    در داخل حلقه که خط اول که معلومه و متغیر b هم کانتر پالس هست که نشون میده چند تا پالس تولید شده نوشتنش ضروری نیست مگه اینکه بخوای تعداد مشخصی پالس بسازی ودر خط بعد شرطی گذاشتیم که اگر ممتغیر b بزرگتر از عدد 22000 شد یا اگه 22000 تا پالس تولید شد اون وقت پالس متوقف بشه
    اما در زیر برنامه وقفه هم که همه چی مشخصه در خط اول یک واحد به متغیر b اضافه میکنیم تا تا تعداد پالس ها رو بشمرهو بعد خاموش و روشن کردن پین های مورد نظر در خط های بعدی هم یه حلقه شرطی گذاشتیم که پهنای پالس یا عرض پالس رو تنظیم کنیم که عدد 15 که برای شرط مساوی متغیر a گذاشتم همینطوری هست که شما نسبت به اندازه پهنای پالستون میتونید تغییرش بدید ودر خط بعدی با ز هم خاموش و روشن کردن پینها ی مورد نظر و در خط بعد هم که متغیر a رو صفرش کردیم که میتونیم هم قبل حلقه شرطی اینکار رو کنیم یا بعدش که شمارش از صفر باشه و خط اخر هم برگشت از زیر برنامه وقفه تایمر0 هست
    این درست ترین راه تولید پالس میباشد و از دوستان عزیز دعوت میکنم ازین برنامه برای ساخت پالس استفاده کنن و تولید پالس در حلقه درست نیست
    تمام
    اعجاز سوره یاسین
    http://www.aparat.com/v/SuoTj
  4. #4
    2013/05/02
    89
    0

    پاسخ : برنامه نويسي بسکام

    تشکر ميکنم از توضيح کامل و باحوصله شما/
    فقط من يه سوالي برام پيش اومد و اون هم اين که من هدفم تنظيم پالس نيست بلکه ميخوام تنظيم فرکانس پالس رو انجام بدم.
    ضمن اين که تعدادپالس هم برام مهم نيست. فقط ميخوام توو زمان مشخصي مثلا در 15 دقيقه پالس ارسال بشه.
    با اين توضيحات فکر ميکنيد اين برنامه مناسب باشه؟
  5. #5
    2008/12/26
    383
    114

    پاسخ : برنامه نويسي بسکام

    سلام خواهش میکنم
    برای تنظیم فرکانس هم میتونید حلقه شرطی دیگه به انتهای حلقه اول در زیر برنامه وقفه اضافی کنید یا در زیر برنامه وقفه رجیستر timer0 رو تغییر بدهید فقط این کار رو باید در زیر برنامه وقفه انجام بدید
    اما اگه میخواهید بصورت دقیقه شمار مثلا 15 دقیقه رو پالس بده وبعد قطع بشه روشهای زیادی هست که به استعداد خود شما در برنامه نویسی بستگی داره ولی میتونید کانفیک ساعت رو راه اندازی کنید که نسبت به زمان یا ساعت خواص و مدت زمان این کار رو انجام بدید
    اعجاز سوره یاسین
    http://www.aparat.com/v/SuoTj
  6. #6
    2013/05/02
    89
    0

    پاسخ : برنامه نويسي بسکام

    ببخشيد منظورتون از کانفيک ساعت چيه؟
    من دقيقا ميخوام همين مثالي که زديد (يعنيي 15 دقيقه پالس ارسال کنه) رو عملي کنم. با همون تايمر 0 چطوري پياده سازي کنم؟
  7. #7
    2013/05/02
    89
    0

    پاسخ : برنامه نويسي بسکام

    بذاريد يه کم دقيق تر سوالمو بپرسم.چ.ن خيلي برام حياتييه.
    من ميخوام با فشردن دکمه اي خاص پالسي با يک فرکانس مشخص روي يک پين ميکرو و not اين پالس روي پين ديگر توليد بشه. وقتي دکمه ديگري را فشردم فرکانس پالسم تغيير کنه.
    تووي اين برنامه اي که گذاشتيد مقدار A رو چي بايد بذارم؟
    و ضمن اينکه اگر دکمه اي فشرده نشه تا همون مثلا 15 دقيقه ارسال پالس ادامه داشته باشه و بعدش متوقف بشه
    اين قسمت از برنامه رو با نمايش روي ال سي دي نميتونم ترکيب کنم.چون يا نمايشم به هم ميريزه يا پالسي که ميخوام صادر نميشه :angry:
  8. #8
    2008/12/26
    383
    114

    پاسخ : برنامه نويسي بسکام

    سلام
    ببینید من گفتم که اگه این 15 دقیقه بر حسب زمان باشه بهتره که از کانفیگ ساعت استفاده بشه مثل ساعت معمولی مثلا ساعت 3 بعد از ظهر شروع و تا 3:15 پالس بزنه بر حسب زمان اما با گفتن نیازتون که اگه یه دگمه زده شه و پالس تولید بشه تا 15 دقیقه این قضیش فرق میکنه
    شما باید دو تایمر رو راه اندازی کنی باوقفه اولی مثل برنامه قبل برای تولید پالس و دومین تایمر و وقفش رو برای زمان مثلا 1 ثانیه تنظیم کنی که برات ثانیه شمار بشه و در زیر برنامه وقفه تایمر دوم یه متغیر از نوع word بذاری که یک واحد بهش اضافه شه یعنی در تایمر دومی زمان اجرای وقفه در هر 1 ثانیه باشه و در زیر برنامش هم متغیری بذاری که هر بار یک واحد بهش اضافه شه پس با اجرای هر 1 ثانیه وقفه یک عدد به متغیر اضافه میشه که این میشه ثانیه شمار شما با این حساب هر 15 دقیقه میشه 900 ثانیه پس یک شرط مینویسی که اگه متغیره بزرگتر از 900 شد وقفه تایمر اولی رو که پالس تولید میکرد رو غیر فعال کنه و برعکس یه شرط دیگه هم میذاری که اگه فلان دکمه زده شد وقفه تایمر اولی رو فعال کنه ب هعلاوه این که متغیر ثانیه شمار رو صفر کنه که دوباره ثانیه شمار شمارشش رو از صفر شرو ع کنه تا 900

    واگه این کار رو نکنی متغیر که قبلا رو 900 بود از همون 900 شروع به شمارش میکنه میشه مثلا 901 تا به بالا ودر شرط اولی که اگه بزرگتر از 900 بود میاد پشت سر هم وقفه تایمر اولی رو غیر فعال میکنه وبرنامه خطا پیدا میکنه پس در شرط دوم که میای وقفه تایمر رو فعال میکنی اون متغیر ثانیه شمار رو هم مقدارشو صفر کن
    تمام
    اعجاز سوره یاسین
    http://www.aparat.com/v/SuoTj
  9. #9
    2008/12/26
    383
    114

    پاسخ : برنامه نويسي بسکام

    در ضمن اون متغیر ثانیه شمار رو میتونی رو السی دی نمایش بدی وهیچ مشکلی پیش نمیاد
    اين قسمت از برنامه رو با نمايش روي ال سي دي نميتونم ترکيب کنم.چون يا نمايشم به هم ميريزه يا پالسي که ميخوام صادر نميشه
    منظورتونو نمیفهمم نباید چنین مشکلی پیش بیاد

    نکته کلیدی برای همه:
    برای کار با متغیر ها در وقفه وتغییر متغیر های وقفه در حلقه do مثلا متغیری در وقفه دارید که باید مقدارشو تغییر بدید چطوری مثلا در داخل حلقه اصلی یه منو تعریف کردی که میخوای متغیر در حلقه مثلا یه منو ساختی و با 2 تا دکمه مقدارشو کم وزیاد کنید که خیلی ها این کار رو میکنن ولی در عمل متغیر چون در وقفه عملیاتی میشه تغییر نمیکنه مثال میزنم تا بهتر متوجه بشید
    فرض کنید در زیر برنامه وقفه یه متغیری به نام F هست که شرط خروج از حلقه شرطی مثل مثال پالس که قبلا گفتم که اگر a=15 شد از شرط خارج شو حالا شما میخوای مقدار اون 15 رو تغییر بدی مثلا بذاری 50 حالا باید چیکار کنیم باید مثلا اون متغیر F رو مساوی a بذاریم به این صورت a=F و مقدار F رو در حلقه do loop با دکمه زیاد و کم کنیم مثلا F رو تنظیم کنیم رو 30 پس با این حساب در زیر برنامه حلقه شرطی انقدر میشماره تا a مساوی F بشه و F هم 30 بود دیگه پس 30 بار حلقه میچرخه وخارج میشه تا اینجا همه چی درسته پس چرا در عمل کار نمیکنه و یا بعضی فقطها که بخوای متغیر F رو هم رو ال سی دی نمایش بدی السی دی بهم میریزه؟ در صورتی که همه چی درسته !
    نکته اینجاست که چه در بسکام وچه کامپایلر های دیگه اکثرا میان متغیر ها رو بعد از کانفیگ تایمر تعریف میکنن که این ااشتباه محضه در این صورت چون تایمر و وقفه اش و زیر برنامه وقفه که میخواد اجرا بشه متغیر ها تعریف نشدن و با اجرای وقفه در زیر برنامه وقفه اصلا متغیر رو نمیشناسه
    در برنامه ای که بالا نوشتم اگه دقت کنی میبینی متغیرها رو قبل از کانفیگ تایمر تعریف کردم تا اول متغیر ها شناسایی شن و باعث بروز مشکلاتی از قبیل تغییر نکردن متغیر ویا به هم خورده گی ال سی دی و غیره نشه
    تمام
    اعجاز سوره یاسین
    http://www.aparat.com/v/SuoTj
  10. #10
    2013/01/30
    82
    4

    پاسخ : برنامه نويسي بسکام

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

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

    عضویت

    سلام
    اینم فایل بسکام وپرتئوس که میتونید اجرا کنید

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

    عضویت



    خب یه توضیح برای برنامه بدم
    دستورات اول که مشخصه در خطهای بعدی دستور پیکربندی تایمر 0 و خط بعدی فعال کردن وقفه سراسری هست خط بعد فعال کردن وقفه تایمر 0 هست که ازونجایی که تایمر 0 هشت بیتی هست پس در رجیستر تایمر از 0 تا 255 میشماره وبعد پرچم وقفه تایمر0 بالا میره واجازه وقوع وقفه رو میده در خط بعد زیر برنامه ای که برای وقفه قراره که داخلش پالس تولید بشه رو مینویسیم
    در داخل حلقه که خط اول که معلومه و متغیر b هم کانتر پالس هست که نشون میده چند تا پالس تولید شده نوشتنش ضروری نیست مگه اینکه بخوای تعداد مشخصی پالس بسازی ودر خط بعد شرطی گذاشتیم که اگر ممتغیر b بزرگتر از عدد 22000 شد یا اگه 22000 تا پالس تولید شد اون وقت پالس متوقف بشه
    اما در زیر برنامه وقفه هم که همه چی مشخصه در خط اول یک واحد به متغیر b اضافه میکنیم تا تا تعداد پالس ها رو بشمرهو بعد خاموش و روشن کردن پین های مورد نظر در خط های بعدی هم یه حلقه شرطی گذاشتیم که پهنای پالس یا عرض پالس رو تنظیم کنیم که عدد 15 که برای شرط مساوی متغیر a گذاشتم همینطوری هست که شما نسبت به اندازه پهنای پالستون میتونید تغییرش بدید ودر خط بعدی با ز هم خاموش و روشن کردن پینها ی مورد نظر و در خط بعد هم که متغیر a رو صفرش کردیم که میتونیم هم قبل حلقه شرطی اینکار رو کنیم یا بعدش که شمارش از صفر باشه و خط اخر هم برگشت از زیر برنامه وقفه تایمر0 هست
    این درست ترین راه تولید پالس میباشد و از دوستان عزیز دعوت میکنم ازین برنامه برای ساخت پالس استفاده کنن و تولید پالس در حلقه درست نیست
    تمام
    سلام ، لینکش منقضی شده . میشه یبار دیگه آپ کنین ؟ممنون
    عظمت را در چشم کسانی دیدم که بی توقع مهربانند .
نمایش نتایج: از 1 به 10 از 10

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

  1. مشکل در برنامه نويسي tiny13 با بسکام
    توسط ابوالفضل نورمحمدي طايمه در انجمن میکروکنترلرهای AVR
    پاسخ: 5
    آخرين نوشته: 2015/11/18, 20:38
  2. برنامه نويسي بسکام
    توسط MARZI MIR در انجمن برنامه نويسي و اينترفيس
    پاسخ: 0
    آخرين نوشته: 2014/07/16, 16:20
  3. برنامه نويسي با بسکام
    توسط Parsila70 در انجمن برنامه نويسي و اينترفيس
    پاسخ: 4
    آخرين نوشته: 2014/06/16, 13:52
  4. برنامه نويسي در بسکام
    توسط isp_tehran در انجمن میکروکنترلرهای AVR
    پاسخ: 1
    آخرين نوشته: 2013/08/28, 10:45
  5. برنامه نويسي در بسکام
    توسط مهرداد_ در انجمن میکروکنترلرهای AVR
    پاسخ: 19
    آخرين نوشته: 2012/01/22, 17:14

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

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

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

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

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