اطلاعیه

Collapse
No announcement yet.

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

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

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

    بازم شلام.کسی میدونه تایمر 1 و صفر و 2 میتونن همزمان کار کنن یا نه؟؟؟
    طب اسلامی

    دیدگاه


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

      نوشته اصلی توسط mahdifaheca
      بازم شلام.کسی میدونه تایمر 1 و صفر و 2 میتونن همزمان کار کنن یا نه؟؟؟
      سلام
      کلیه تایمر های میکروکنترلر ها عملاَ ماژول هستند ، و ویژگی ماژول ها نیز کارکرد مستقل از cpu و مستقل از یکدیگر می باشد .
      بنابراین اگر شما تمامی تایمر های یک میکروکنترلر را فعال نمایید ، کاملا مستقل از یکدیگر و به طور همزمان شمارش خواهند کرد .

      دیدگاه


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

        سلام
        من با بیسیک کار میکردم و تازه CCS رو شروع کردم
        مشکل این برنامه چیه؟؟قراره چند تا led رو خاموش روشن کنه...



        :angry: :angry:


        اضافه شده در تاریخ :
        مشکل برنامه بالا حل شد . می خواستم حذفش کنم
        ولی گفتم شاید به درد یک تازه کار مثل خودم بخوره :mrgreen:
        مشکل اول نگذاشتن فاصله در
        include <16F877
        مشکل دوم هم گذاشتن * به جای x در
        output_b (0x7
        میدونم اشتباهات مضحکی بود
        حالا میرم سراغ راه اندازی LCD کارکتری
        من نبودم آنکه از من در خیالت ساختی ...
        پس تو هم چون دیگران چندان مرا نشناختی

        دیدگاه


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

          سلام
          یه سوال در مورد زبان c:
          من به دلیل کمبود rom می خوام از تکرار توابع خودداری کنم.
          برای همین هر جا که یه تابع چند بار تکرار میشه -مثل این-
          کد:
          switch(situation)
          {
            case 1:
             answer1=function(alpha,betha,gama);
            break;
            case 2:
             answer2=function(alef,be  ,pe );
            break;
            case 3:
             answer3=function(var1,var2 , var3);
            break;
          }
          می خوام تبدیل بشه به یه چیزی مثل این
          کد:
          switch(situation)
          {
            case 1:
             &answer=&answer1;
             myvar1=alpha;
             myvar2=betha;
             myvar3=gama ;
            break;
            case 2:
             &answer=&answer2;
             myvar1=alef;
             myvar2=be;
             myvar3=pe ;
            break;
            case 3:
             &answer=&answer3;
             myvar1=var1;
             myvar2=var2;
             myvar3=var3 ;
            break;
          }  
          *answer=function(myvar1,myvar2,myvar3);
          انواع حالات رو انتخاب کردم مثلا
          &answer=answer1;
          *answer=function

          یا

          &answer=&answer1;
          *answer=function


          &answer=&answer1;
          answer=function

          (راستی من نمیدونم با اینکه خیلی از مشکلات انجمن های این سایت با برنامه نویسی هست ، چرا انگلیسی نوشتن سایت درست نمیشه و همه چی خرچنگ قورباغه خونده می شه :question: :question: :question
          دوستان عزیزم تصمیم گرفتم تا یه مدت کمتر به تالار سر بزنم . اگر دیر جواب دادم ببخشید.

          دیدگاه


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

            با سلام.
            میخاستم ببینم کسی با تایمر 2 pic تاحالا کار کرده/؟؟؟ آیا میشه باهاش زمان دقیق ایجاد کردش؟؟ من دستم که به آی سی نزدیک میکنم تازه درست کار میکنه.کسی میدونه مشکل از کجاست؟؟؟

            اضافه شده در تاریخ :
            کسی با تایمر 2 و وقفش کار نکرده؟؟
            طب اسلامی

            دیدگاه


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

              سلام.
              با هر تایمری میشه زمان دقیق ایجاد کرد.
              پیشنهاد می کنم که نوع میکروتون رو + نوع برنامه کامپایلرتون رو + قسمتی از برنامه تون رو بگید.
              دو تا حدس برای این مشکل می تونم بزنم: 1- شما تایمر رو تو مد شمارنده counter قرار دادید و نویز دستتون باعث میشه به نحوی low2high یا برعکس اتفاق بیافته و شما فکر می کنید که داره درست کار می کنه. 2- کریستال شما خوب بسته نشده ( شاید خازن هاش رو نذاشتید ) و وقتی دستتون رو میبرید کنارش نویز دستتون باعث میشه کار کنه - زیاد دلیل علمی پشتش نیست ولی دلیل تجربی دارم!!!! - .
              دوستان عزیزم تصمیم گرفتم تا یه مدت کمتر به تالار سر بزنم . اگر دیر جواب دادم ببخشید.

              دیدگاه


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

                با سلام و خسته نباشید . آقا من به این نتیجه رسیدم که با تایمر 2 و نرم افزار ccs به هیچ وجه نمیشه زمان دقیق ایجاد کردش. من تمام کارایی که شما گفنین کردم. 1 ماهه درگیرشم. فقط با تایمر 1 میشه دقیق ایجاد کردش.
                طب اسلامی

                دیدگاه


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

                  آره یه چیزایی یادم میاد در مورد postscaler من هم این مشکل رو داشتم انگار . هر چی مقدار بهش می دادم درست در نمی اومد بلا خره ضریب تنظیم چشمی بهش دادم!!!! :redface:
                  ولی یادم میاد که تو یه تنظیماتی مثلا وقتی prescaller یا postscaller صفر بود یا وقتی مقدار شمارشش به اندازه max (یعنی 255 یا 65535) بود درست کار می کرد.
                  البته این که ربطی به نزیدیک شدن دست نداره!!!!!!!!
                  در ضمن اگر مشکل فقط تو ccs هست ( یا اصلا اگر تو چیزای دیگه هم بود ) خیلی خوبه که شما از اینجا سوال بکنید :
                  http://www.ccsinfo.com/forum
                  اونا متخصصای کار با ccs هستن و آماده اند که سوال بیاد جواب بدن .

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

                  دیدگاه


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

                    آقا من به ccs امیدوار شدم. اصلا موندم. تو سایت خود ccs با زبون داغونم سوالم مطرح کردم سر 1 ساعت نشد جوابم کامل گرفتم. اصلا لازم نبودش من بیتای تایمر 2 رو تنظیم کنم. اگر کسی مشکل من داشت یه نگاه به اینجا بندازه
                    http://www.ccsinfo.com/forum/viewtopic.php?p=170647#170647
                    من به این نتیجه رسیدم که با تایمر 2 هم میشه زمان دقیق ایجاد کردش. خیییییییییییلی راحت. هیچ تنظیمی نمیخادش!!!!!!!!!

                    اضافه شده در تاریخ :
                    با سالم. آقا ما بعد از کلی دردسر کشیدن آخر فهمیدیم زمانی که تایمر داره کار میکنه و از وقفش استفاده میکنیم توی تابع اصلی اگر از دستور if استفاده کرده باشیم هر از چند گاهی برنامه اون if نبینه و دستور توی پرانتز اجرا کنه. به نظرتون به غیر از اینکه میتونیم اون دستور if بیاریم و توی زیر برنامه وقفه تایمر بنویسیم دیگه چیکار میتونیم بکنیم؟؟؟؟؟؟؟/ اگر بخایم توی زیر برنامه وقفه بنویسیم و برناممون طولانی باشه خیلی سخت میشه برنامه نویسی.
                    طب اسلامی

                    دیدگاه


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

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

                      دیدگاه


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

                        نوشته اصلی توسط محمدحسـین
                        سلام آقا مهدی
                        ببینید روال اجرای وقفه اینجوریه که زمانی که یک وقفه برای میکروکنترلر بوجود اومد میکروکنترلر کارهای دیگه اش رو متوقف می کنه و آدرس دقیق جایی که الان توش بوده رو یادداشت می کنه و بعد به سراغ وقفه میره ، اونو تا آخر اجرا می کنه و بعد دوباره میره سراغ همون آدرس و از همون جا دوباره برنامه رو اجرا می کنه .
                        پس ،،، مطمئن باشید که هیچ چیزی اینجا نمی پره و اجرا نشده باقی نمی مونه .
                        پس،،،، باید شما برنامه رو بررسی کنید . حتما یه چیزی توی برنامه اشتباه شده . اگر دوست داشتید برنامه رو بذارید تا من هم یه نگاه بهش بندازم
                        موفق باشید
                        همینجوره که شما میگید ولی انگار بعضی وقتا توی اجرای دستور if اشتباه میکنه. شما برنامه ساده زیر بنویسید و هیچوقت دست به کلید نزنید . بعضی وقتا بعد از 2 یا 3 ساعت led روشن میشه و بعضی وقته بعد از چند روز
                        کد:
                        #define led pin_c5
                        #define shasy pin_b2
                        
                        #int_timer1
                          void Timer1_isr()
                          {
                           
                          tmr1on=1; set_timer1(65216);/// har 64us vaghfe roy nidahad
                         }
                         
                         void main(){int8 i; output_b(0b0);
                         setup_timer_1 ( T1_internal | T1_DIV_BY_1 );
                         enable_interrupts(INT_TIMER1);
                         enable_interrupts(GLOBAL);
                         set_tris_b(0b00000101);set_tris_a(0b0000011);
                         
                          while(true){output_low(led);
                          if (input(shasy)){while(true){output_high(led);}}}
                        طب اسلامی

                        دیدگاه


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

                          سلام ببخشید پابرهنه اومدم وسط :smile:

                          نوشته اصلی توسط mahdifaheca
                          انگار بعضی وقتا توی اجرای دستور if اشتباه میکنه. شما برنامه ساده زیر بنویسید و هیچوقت دست به کلید نزنید. بعضی وقتا بعد از 2 یا 3 ساعت led روشن میشه
                          دوست عزیز باحتمال زیاد مشکل شما سخت افزاریه و ربطی به برنامتون نداره. پایه ای رو که شما با اسم
                          shasy تعریف کردین باید Pullup شده باشه. مثلا با یه مقاومت 1 کیلو
                          برای اینکه مطمئن بشین که دستور if مشکلی نداره میشه یه تست ساده انجام داد.
                          میتونین shasy رو بجای پین یه متغیر از نوع char تعریف کنین و به اون مقدار صفر بدین. حالا اگه بازم
                          led روشن شد میشه به کامپایلر ( کامپایلر که نه به کرک کامپایلر) شک کرد

                          دیدگاه


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

                            نوشته اصلی توسط majid sh
                            سلام ببخشید پابرهنه اومدم وسط :smile:

                            دوست عزیز باحتمال زیاد مشکل شما سخت افزاریه و ربطی به برنامتون نداره. پایه ای رو که شما با اسم
                            shasy تعریف کردین باید Pullup شده باشه. مثلا با یه مقاومت 1 کیلو
                            برای اینکه مطمئن بشین که دستور if مشکلی نداره میشه یه تست ساده انجام داد.
                            میتونین shasy رو بجای پین یه متغیر از نوع char تعریف کنین و به اون مقدار صفر بدین. حالا اگه بازم
                            led روشن شد میشه به کامپایلر ( کامپایلر که نه به کرک کامپایلر) شک کرد

                            والا مقاومت پول پ که یه ده کیلو گذاشتم و مطمینم هستم که از اون نیستش. منکه موندم چیکار کنم!!!!
                            طب اسلامی

                            دیدگاه


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


                              شما که مطمعنی اشکال از دستور if هستش میتونی همونطور که تو پست قبل گفتم بجای پین یه متغییر معمولی بذاری و دوباره برنامه رو تست کنی

                              بازم میگم به احتمال زیاد مشکل فقط سخت افزاریه. من جای شما باشم اون مقاومت 10 کیلو رو یک کیلو میذارم و برنامه رو دوباره تست میکنم :read:

                              دیدگاه


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

                                ببخشید که دیر جواب می دم
                                من هم میگم به احتمال بسیار زیاد مشکل از سخت افزار هستش .( البته تو برنامه ای که اینجا گذاشته شده بود یه آکولاد آخرش کمه- که مهم نیست)
                                حدسایی که من میزنم:
                                1- ممکنه اصلا شما اشتباه مدار شاسی رو وصل کرده باشید . ( برنامه ای که اینجا گذاشتید ، وقتی ال ای دی رو روشن می کنه که پین ورودی ، 5 ولت داشته باشه - ولی از طرف دیگه شما می گید که پول پ کردید! که این باعث میشه همیشه شاسی رو 5 ولت باشه )
                                2- پس ممکنه که مشکل از این باشه که تایمر اونقدر سریع به ما وقفه میده که نمیذاره برنامه به خط مذبور برسه و ال ای دی رو روشن کنه
                                یه کاری کنید : با مقدار تایمر بازی کنید. بجای 65000 بذارید 10 ببینید باز مشکل هست.
                                یه کار دیگه : if(input ) zzz رو به if(!input) zzz تغییر بدید ببینید بازم مشکل هست.
                                3-ممکنه مشکل از نویز باشه.
                                یه خازن با کلیدتون موازی کنید تا نویز کلید رو بگیره ( یا فوقش دوتا تا بهتر بگیره)

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

                                دیدگاه

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