اطلاعیه

Collapse
No announcement yet.

[گفتگو و تبادل نظر] سوالات برنامه نویسی در کامپایلر CCS

Collapse
این موضوع برجسته شده است.
X
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    #46
    پاسخ : سوالات برنامه نویسی در کامپایلر CCS

    نوشته اصلی توسط Robo-amir
    سلام
    من میخوام Watch Dog Timer یه PIC16F883 رو فعال کنم اما تو قسمت Setup اون علاوه بر زمان مورد نظر یه مقدار دیگه هم میگیره .


    setup_wdt(WDT_18MS|???);

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


    WDT_ON
    WDT_OFF
    WDT_DIV_16
    WDT_DIV_8
    WDT_DIV_4
    WDT_DIV_2
    WDT_TIMES_1
    WDT_TIMES_2
    WDT_TIMES_4
    WDT_TIMES_8
    WDT_TIMES_16
    WDT_TIMES_32
    WDT_TIMES_64
    WDT_TIMES_128

    این مقادیر چیه؟
    اینجور اطلاعات رو با مراجعه به دیتاشیت بهتر میشه متوجه شد . واچ داگ این میکرو دارای یک postscaler اضافی هم هست . دقیق نمیدونم ولی فکر میکنم که این بخش های اضافی برای تعیین مقدار این رجیستر باید باشه...

    اضافه شده در تاریخ :
    نوشته اصلی توسط Robo-amir
    سئوالم خیلی پیش پا افتادست یا کسی دوست نداره جواب بده !
    در مراحل برنامه نویسیتون از حلقه های تو در تو و یا دستورات if متوالی و متداخل استفاده کردید؟؟ سعی کنید این ساختار ها رو به حداقل سطح ممکن تقلیل بدید . در برنامتون آرایه دارید؟؟
    اون متغیر هایی که نیاز به تغییر ندارن رو به نوع const تغییر بدید . سعی کنید از دستورات اسمبلی هم بهره ببرید و ...

    دیدگاه


      #47
      پاسخ : سوالات برنامه نویسی در کامپایلر CCS

      نوشته اصلی توسط محمد ایجی
      در مراحل برنامه نویسیتون از حلقه های تو در تو و یا دستورات if متوالی و متداخل استفاده کردید؟؟ سعی کنید این ساختار ها رو به حداقل سطح ممکن تقلیل بدید . در برنامتون آرایه دارید؟؟
      بله ٰ.
      دقیقا هم دستورات if متوالی و متداخل دارم هم آرایه !
      زمان تنها واحد حقیقی اندازه گیریه
      زمان وجود ماده رو اثبات میکنه
      بدون زمان هیچکدوم ما وجود نخواهیم داشت
      زمان یکتاست

      دیدگاه


        #48
        پاسخ : سوالات برنامه نویسی در کامپایلر CCS

        نوشته اصلی توسط Robo-amir
        بله ٰ.
        دقیقا هم دستورات if متوالی و متداخل دارم هم آرایه !
        پس به احتمال 40% پر شدن بیش از حد رم به همین خاطر است!!
        راهکار های پیشنهادی:
        آرایه های فقط خواندنی(مثل آرایه های فونت و ....) را حتما CONST کنید
        تا جایی که میتوانید، دستورات IF متداخل رو با دستور Select case جایگزین کنید
        بیش از حد به فراخوانی توابع مبادرت نکنید
        در سرویس وقفه، تابعی را فراخوانی نکنید.
        سایز متغییر های برنامه را با دقت و وسواس زیادی تعیین کنید
        قدرت استدلال و تکنیک های برنامه نویسی خود را تقویت کنید تا برنامه خود را با استفاده از کمترین متغییر به سرانجام برسانید
        و ....

        دیدگاه


          #49
          پاسخ : سوالات برنامه نویسی در کامپایلر CCS

          نوشته اصلی توسط Robo-amir
          بله ٰ.
          دقیقا هم دستورات if متوالی و متداخل دارم هم آرایه !
          علاوه بر مواردی که اساتید گفتند ، بهتر است تا حد ممکن از توابع استفاده کنید . کارهای تکراری را به توابع بسپارید . وارد منوی کامپایل شده و کال تری را انتخاب کنید . حالا ببینید کدام تابعان دارد حجم زیادی از رام رای میگرید ، از آن تابع شروع به قسمت قسمت کردنش به وسیله ساخت تابع های دیگری کنید . بالای تابع اصلیتان از دستور #separate استفاده کنید . موفق باشید
          هدفهای بزرگ مردان بزرگ می خواهد .

          دیدگاه


            #50
            پاسخ : سوالات برنامه نویسی در کامپایلر CCS

            سلام
            برای Restart کردنWDT چه راههایی وجود داره؟
            من همیشه تو یکی از تایمرام بعد زمان مورد نظر اون رو Restart می کردم اما اگه بخش main برنامه یه جایی گیر کنه تایمر همچنان کار خودشو انجام میده و بعد زمان مورد نظر اون رو Restart می کنه ! :angry:
            اگرم بخوام تو main برنامه Delay مورد نظر رو اعمال کنم و با اون WDT رو Restat کنم روند برنانه هر بار با اون تاخیر پیش میره
            معمولا مهندسین گرامی WDT رو با چی چک و Restat میکنن ?
            ممنون میشم کمک کنید .
            زمان تنها واحد حقیقی اندازه گیریه
            زمان وجود ماده رو اثبات میکنه
            بدون زمان هیچکدوم ما وجود نخواهیم داشت
            زمان یکتاست

            دیدگاه


              #51
              پاسخ : سوالات برنامه نویسی در کامپایلر CCS

              دستور اسمبلی clrwdt رو مابین تعدادی از خطوط برنامه نویسیتون مدام تکرار کنید . مثلا هر 10 خط یک بار دستور clrwdt رو بنویسید .

              دیدگاه


                #52
                پاسخ : سوالات برنامه نویسی در کامپایلر CCS

                سلام
                با نشکر از آقای ایجی که سوالات این تاپیک رو با حوصله جواب میدن :smile:
                آیا میشه علاوه بر پورت سریال سخت افزاری چند تا پورت سریال نرم افزاری به طور همزمان تعریف کنیم؟ (کامپایلر CCS)
                من تو پروژم نیاز به 3 تا TX و 2 تا RX دارم

                دیدگاه


                  #53
                  پاسخ : سوالات برنامه نویسی در کامپایلر CCS

                  نوشته اصلی توسط majid sh
                  سلام
                  با نشکر از آقای ایجی که سوالات این تاپیک رو با حوصله جواب میدن :smile:
                  آیا میشه علاوه بر پورت سریال سخت افزاری چند تا پورت سریال نرم افزاری به طور همزمان تعریف کنیم؟ (کامپایلر CCS)
                  من تو پروژم نیاز به 3 تا TX و 2 تا RX دارم
                  خواهش میکنم . وظیفه است...
                  بله میشه بیش از 1 مورد هم ارتباط سریال نرم افزاری تعریف کرد . و شما با استفاده از عبارت stream می توانید به هرکدام از آنها دسترسی پیدا کنید . به این صورت:
                  نوشته اصلی توسط محمد ایجی
                  درود
                  3- عبارت stream در پیکربندی پورت سریال یک بخش اختیاری است و برای ایجاد وجه تمایز بین پیکربنید های متفاوت می باشد . به طور مثال شما میخواهید که دو نوع ارتباط سریال متفاوت در پروژه خود داشته باشید .یکی بر روی پین های ra1 , ra0 و دیگری بر روی پین های rb5,rb4 . در برنامه نویسی ccs شما باید به نوعی بین این دو کانکشن تفاوت ایجاد کنید تا برای استفاده از دستورات getc و putc و.. به مشکلی بر نخورید . این تفاوت توسط عبارت stream تعیین می شود :
                  کد:
                  #use rs232(baud=9600, xmit=PIN_A0,rcv=PIN_A1,stream=uart1)
                  #use rs232(baud=9600, xmit=PIN_B4,rcv=PIN_B5,stream=uart2)
                  حال اگر خواسته باشم که توسط کانکشن uart1 یک کاراکتر را ارسال کنم به این شکل عمل میکنم :
                  کد:
                  fputc(44,uart1);
                  (دستور فوق مقدار عددی 44 را توسط ارتباط سریال پین های ra1,ra0 ارسال میکند .)
                  و برای دریافت از کانکشن uart2 نیز به این شکل مینویسم :
                  کد:
                  k=fgetc(uart2);

                  دیدگاه


                    #54
                    پاسخ : سوالات برنامه نویسی در کامپایلر CCS

                    :smile: سلام :smile:
                    استاد ایجی عزیز من تو دایرکتوری Devices فایل هدر 18F452 رو ندارم. رو یه کامپیوتر دیگه دوباره CCS رو نصیب کردم ولی اونجا هم هدر 18F452 نبود
                    تو اینترنت هم سرچ کردم چیزی دستگیرم نشد ممنون میشم اگه راهنماییم کنین

                    یه مشکل دیگه هم چون من با 16F877 کار میکنم هر چقدر هم که برنامه رو اضافه میکنم حافظه استفاده شده رو 1% میزنه! البته میکرو بدرستی پروگرام میشه و مشکلی هم نداره
                    ضمنا با یه چیپ 12F که امتحان کردم این مشکل وجود نداشت

                    دیدگاه


                      #55
                      پاسخ : سوالات برنامه نویسی در کامپایلر CCS

                      نوشته اصلی توسط majid sh
                      :smile: سلام :smile:
                      استاد ایجی عزیز من تو دایرکتوری Devices فایل هدر 18F452 رو ندارم. رو یه کامپیوتر دیگه دوباره CCS رو نصیب کردم ولی اونجا هم هدر 18F452 نبود
                      تو اینترنت هم سرچ کردم چیزی دستگیرم نشد ممنون میشم اگه راهنماییم کنین

                      یه مشکل دیگه هم چون من با 16F877 کار میکنم هر چقدر هم که برنامه رو اضافه میکنم حافظه استفاده شده رو 1% میزنه! البته میکرو بدرستی پروگرام میشه و مشکلی هم نداره
                      ضمنا با یه چیپ 12F که امتحان کردم این مشکل وجود نداشت
                      شما یقین دارید؟؟ سرچ کردید؟؟ معمولا این شماره در بین شماره ها بزگتر قرار میگیره که پیدا کردنش با چشم یکم سخته .
                      در هر صورت من براتون این فایل رو اتچ میکنم.
                      در مورد pic16f877a » مهم اینه که شما چطور دستوراتی رو اضافه میکنید؟؟ به طور مثال شما چندین حلقه تو در تو یا if های متوالی بنویسید و نتیجه را مشاهده کنید
                      فایل های پیوست شده

                      دیدگاه


                        #56
                        پاسخ : سوالات برنامه نویسی در کامپایلر CCS


                        آره واقعا سرچ کردم و نبود! حتی تو پروژم بجای #INCLUDE <16F877.H< اینو تایپ کردم #INCLUDE <18F452>
                        ولی NOT FOUND زد!
                        در مورد 16F877 یه پروژه چند فایلیه نزدیک به 300 خط برنامست هر چی کد مینویسم بازم سایز برنامه یک کلام 1%

                        بهر صورت دستت درد نکنه این شب عیدی منو از دردبدری نجات دادی :biggrin:


                        دیدگاه


                          #57
                          پاسخ : سوالات برنامه نویسی در کامپایلر CCS

                          سلام...
                          گفتم بازار سوال گرمه من هم سوالم رو بپرسم.
                          میخواستم داخل eeprom خود میکرو یک سری اطلاعات 1- بنویسم 2- درصورت نیاز بخونم 3- پاک کنم یا تغییر بدم
                          راستی اینجا هم مثل AVR باید متغییر در EEPROM تعریف کنم و ...
                          اگر توابع ای که اینکارها رو انجام میدن رو بهم معرفی کنید خیلی ممنون میشم.
                          مرسی :nerd:

                          دیدگاه


                            #58
                            پاسخ : سوالات برنامه نویسی در کامپایلر CCS

                            نوشته اصلی توسط s_gholamrezaee69
                            سلام...
                            گفتم بازار سوال گرمه من هم سوالم رو بپرسم.
                            میخواستم داخل eeprom خود میکرو یک سری اطلاعات 1- بنویسم 2- درصورت نیاز بخونم 3- پاک کنم یا تغییر بدم
                            راستی اینجا هم مثل AVR باید متغییر در EEPROM تعریف کنم و ...
                            اگر توابع ای که اینکارها رو انجام میدن رو بهم معرفی کنید خیلی ممنون میشم.
                            مرسی :nerd:
                            سلام
                            با دستورات write_eeprom و read_eeprom می توانید بر روی این حافظه در میکروکنترلر های pic بنویسید و بخوانید
                            در اینجا متغیر ها در رم ذخیره می شوند....

                            دیدگاه


                              #59
                              پاسخ : سوالات برنامه نویسی در کامپایلر CCS

                              سلام
                              وقتی یه متغییر رو به صورت volatile تعریف می کنیم چه تاثیری داره ؟
                              آحه یه جا خوندم : (کتاب پروژه های پیشرفته میکروکنترل های PICبه زبانC)
                              متغییر های فرار در برنامه هایی که از وقفه ها استفاده می کنند و دارای توابع ورودی و خروجی هستند بسیار مفید هستند . متغییر های فرار توسط کمپایلر بهینه نمیشوند زیرا ممکن است به صورت ناگهانی تغییر کند .

                              با تشکر
                              زمان تنها واحد حقیقی اندازه گیریه
                              زمان وجود ماده رو اثبات میکنه
                              بدون زمان هیچکدوم ما وجود نخواهیم داشت
                              زمان یکتاست

                              دیدگاه


                                #60
                                پاسخ : سوالات برنامه نویسی در کامپایلر CCS

                                سلام دوستان. من با دستوره if مشکل دارم وقتی شرط رو بینه یه محدوده میزارم اصلا شرطو در نظر نمیگیره و کلا رد میکنه دستورایه تو شرطم نمیگیره ای یه تیکه از برنامست :sad:

                                ;(set_adc_channel(0
                                }(++for(i=0;i<=200;i

                                ;()key=read_adc

                                }(if (900<key<999
                                ;goto check
                                ...
                                { ...
                                {

                                دیدگاه

                                لطفا صبر کنید...
                                X