اطلاعیه

Collapse
No announcement yet.

(درخواست) برنامه های خیلی خیلی ساده با CCS

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

    (درخواست) برنامه های خیلی خیلی ساده با CCS

    سلام
    من برای شروع با CCS C مشکل دارم و حتی هنوز نتوانسته ام یک چشمک زن ساده هم بسازم.البته من یه ترم با ++C سر و کله زدم و یه زمانی با AVR یه کارهایی کرده ام. هرچی هم توی اینترنت گشتم نتونستم یه برنامه ی ساده ی چشمک زن با CCS C پیدا کنم بازم صد رحمت به PIC Basic که حداقل تونستم باهاش یه چشمک زن درست کنم.
    در هر صورت از دوستان تقاضا دارم که یه آموزش ابتدایی برای کارهای عادی در CCS C بدهند و حداقل های مورد نیاز در یک برنامه CCS C را بگویند.
    خیلی ممنون. :biggrin:

    #2
    پاسخ : (درخواست) برنامه های خیلی خیلی ساده با CCS

    سلام مگه هنوز کتابی در مورد CCS نیومده؟؟؟؟
    چشمک زن با 16F877 :
    #include <16F877A.h>
    #fuses HS,NOWDT
    #use delay(clock=20MHz)

    void main(void)
    {
    while(True)
    {
    output_high(pin_b0);
    delay_ms(100);
    output_low(pin_b0);
    delay_ms(1000);
    }
    }

    اگه خواستی میکروی دیگه ای استفاده کنی فقط نام آی سی رو تغییر بدهید.موفق باشید
    بعد از مدتها یه سری هم به CCS زدم
    خداوند جهاد را برای سرافرازی اسلام واجب کرد.
    حضرت فاطمه (س)

    دیدگاه


      #3
      پاسخ : (درخواست) برنامه های خیلی خیلی ساده با CCS

      کلاً CCS برای یک پین دستورات زیر رو داره:
      کد:
      output_high(PIN);
      output_low(PIN);
      output_float(PIN);
      output_toggle(PIN);
      
      o
      برای یک چشمک زن می تونی اینو بنویسی:
      کد:
      while(1)
      {
       output_toggle(PIN_A0);
       delay_ms(1000);
      }
      
      o

      دیدگاه


        #4
        پاسخ : (درخواست) برنامه های خیلی خیلی ساده با CCS

        خیلی=X
        1000X ممنون
        مگه هنوز کتابی در مورد CCS نیومده؟؟؟؟
        نمی دونم. آخه با خودم قرار گذاشتم که سعی کنم از منابع انگلیسی استفاده کنم و اگر نشد از منابع فارسی درون وب.
        حالا چند تا سوال
        1) آیا دستور #use delay(clock=20MHz) فرکانس کاری دستگاه را هم تعیین می کند؟
        اگر بله ، اگر نخواهم از delay استفاده کنم و فقط بخواهم فرکانس کاری سیستم را تعیین کنم باید چه دستوری بنویسم؟
        2) آیا دستوری هست که جهتگیری تمام پین های یک پورت را در یک دستور انجام دهد؟ { به جای دستوراتی از قبیل output_high(PIN); که فقط یک پین را به عنوان ورودی یا خروجی تعریف می کند. }
        3)نیازی هست که دستوری بابت محافظت نکردن flash و eeprom نوشت یا به صورت پیش فرض همین طور است؟

        با تشکر

        دیدگاه


          #5
          پاسخ : (درخواست) برنامه های خیلی خیلی ساده با CCS

          این دستور فرکانس کاری دستگاه رو مشخص می کنه یعنی اینجا باید از کریستال 20 مگاهرتز استفاده کنی البته یادت نره به دستور
          کد:
          #feuses HS یا LP یا RC یا XT
          خیلی دقت کنی چون نوع نوسانساز (اکتیو یا پسیو ) و رنج فرکانسی اینجوری مشخص میشه

          نوشته اصلی توسط cisco
          اگر بله ، اگر نخواهم از delay استفاده کنم و فقط بخواهم فرکانس کاری سیستم را تعیین کنم باید چه دستوری بنویسم؟
          یعنی چی از delay استفاده نکنم؟ کلاً دستورش اینه.....
          - شما برای جهت گیری پورت ها باید رجیستر tris رو مقدار دهی کنی مثلاً برای اینکه بخوای همه ی port B به عنوان ورودی تعریف بشه باید از دستور (SET_TRIS_B(0b11111111 استفاده کنی .اما وقتی شما از دستور
          (output_high(PIN_B0 استفاده می کنی این دستور میاد توو رجیستر tris B بیت مربوط به B0 رو 0 میکنه بعد میره تو رجیستر PORTB این PIN رو high میکنه.
          کلاًآ‌ برای محافظت از حافظه در برابر خوندن از دستور
          FUSES NOPROTECT# یا FUSES PROTECT# استفاده می کنن

          دیدگاه


            #6
            پاسخ : (درخواست) برنامه های خیلی خیلی ساده با CCS

            منظورم این بود:
            آیا دستوری هست که تمام پینهای یک پورت را در یک دستور ، به دلخواه 0 یا یک کند؟(آخه دستوری مثل (output_high(PIN_B2 فقط پین B2 را یک می کند و نمی توان با آن همزمان همه پورت را 0و 1 کرد. اما خیلی از کامپایلرها این دستور را دارند: PORTB=0b10101001 )

            دیدگاه


              #7
              پاسخ : (درخواست) برنامه های خیلی خیلی ساده با CCS

              من دست متوجه نشدم .... مطمئاًآ‌ باشید که هست. با دستور زیر می تونید این کار رو انجام بدید:
              (output_X(0bxxxxxxxx -------> که در اینجا X اسم پورت مورد نظر هست. پس طبق اونی که شما نوشتید:
              ( PORTB=0b10101001 -----> output_B(0b10101001

              دیدگاه


                #8
                پاسخ : (درخواست) برنامه های خیلی خیلی ساده با CCS

                سلام
                این کتابها بگیرین واقعا عالیه
                http://mihd.net/4n5t0g9
                http://mihd.net/izvry4x

                دیدگاه


                  #9
                  پاسخ : (درخواست) برنامه های خیلی خیلی ساده با CCS

                  سلام دوست من.
                  من یه تجربه کوچک در خصوص آموزش PIC با CCS دارم. فایل وردی که به اسم Plan برات فرستادم برنامه آموزشی من بوده. فکر کنم اگه روزی یکی دو ساعت با این برنامه کار کنی ظرف مدت 15 روز دست راه بیفته.
                  قبل از هر چیز یه توضیح بدم، آن هم ایه که یه فایل که به زبان C با نرم افزار CCS نوشته شده شامل دو قسمت کلی میشه.
                  فسمت اول) preprocessor ها هست که کار آنها تعریف کردن یه سری چیزها! برای خود کامپایلر. این میتونه شامل تعریف مقادیر ثابت ، تعرف فیوزها ، فرمت سخت افزارها و خیلی چیزهای دیگه باشه.تمام این قسمت از برنامه همگی با کارکتر # شروع می شن. توی help نرم افزار هم وقتی روی علامت سوال (?) (البته به شرط اینکه از ورژن نرم افزارت بالاتر از 4 باشه) کلیک کنی قسمتی با عنوان preprocessor cmds وجود داره که به طور مفصل هر کاند رو توضیح داده. یه توضیح اینکه شما یه فیوز بیت برای انتخاب نوع کریستال داری و یه کامند به شکل #use delay(clock=20000000) که این صرفا برای زمانیه که شما دارید از دستور delay استفاده می کنیو اصلا ربطی به کریستال نداره . یعنی اگه شما به جای 20 میلیون بنویسی 2 میلیون و کریستالت 20 میلیون هرتز باشه delay هایی که استفاده میکنی در عمل 10 برابر کند تره.
                  قسمت دوم) پیکره اصلی برنامه رو شکل میده. که خودش می تونه شامل قسمت های مختلفی باشه

                  شما هر CCS ی که نصب کنی توی مسیر نصب یه فولدر به نام Examples می سازه که شامل تعداد زیادی برنامه ساده است که برای شروع خیلی مناسبه. برای مثال برنامه EX_ICD.c یه برنامه است که توی آن یه LED چشمک میزنه.

                  موفق باشید
                  من موفق نشدم فایلم رو attach کنم! چکاری برای این کار باید انجام بدم.

                  دیدگاه


                    #10
                    پاسخ : (درخواست) برنامه های خیلی خیلی ساده با CCS

                    سلام با عرض معذرت
                    این یه فایل ورده که سر فصل ها توشه. قدم به قدم پیش برو در هر بخش و قسمتی که مشکل داشتی سوال کن

                    http://www.4shared.com/file/62148309/80f8c1ac/plan.html

                    دیدگاه


                      #11
                      پاسخ : (درخواست) برنامه های خیلی خیلی ساده با CCS

                      سلام
                      حالا که تو این تاپیک بحت ccs شده ، میشه اساتید محترم لطف کنند و بگویند برای کار با وقفه ها در ccs چیکار باید کرد .
                      مثلا اگه وقفه ای بوجود آمد ، ادامه برنامه به کدام label جهش کند .
                      تو pic basic دستور on interrupt goto label رو داریم که در زمان وقوع وقفه ادامه برنامه به label جهش پیدا میکند .
                      ممنون :applause:

                      دیدگاه


                        #12
                        پاسخ : (درخواست) برنامه های خیلی خیلی ساده با CCS

                        سلام
                        من یه برنامه با CCS نوشتم اما یه ایرادایی توش داره ، اینم برنامه و فایل پروتیوسش:
                        http://www.filefactory.com/file/85095c/n/ccs_txt
                        http://www.filefactory.com/file/78589a/n/PIC16F877_DSN
                        اینم فایل هگزش:
                        http://www.filefactory.com/file/3e7f1b/n/New2000_HEX
                        توی این برنامه (و سیمولیشنش) سه تا LED وجود دارد. وقتی که برنامه از ابتدا شروع به کار می کنه LED وسطی به مدت 500ms روشن می شه و دوباره خاموش می شه.اگر کلید وسطی فشرده بشه دو تا LED بالا و پایین شروع می کنند به چشمک زدن با دوره تناوب 40ms که به تعداد 100 بار چشمک می زنه و به حالت خاموش می ره. از طرفی کلید بالایی ، کلید وقفه است و هر وقت که فشرده شود باید LED های بالایی و پایینی با دوره تناوب 120ms چشمک بزنند واگر وقفه در حین چشمک زدن LED ها هم که باشد ، باید دوره تناوب چشمک زدن LED ها از 40ms به 120ms افزایش یابد.
                        حالا خودتون مدار پروتیوس من را اجرا کنید و ببیند که چه اشکالاتی داره.
                        1)اگر در حین چشمک زدن عادی ، وقفه روی دهد ، سیستم به چشمک زدن عادی خود ادامه می دهد تا 100 بارش تمام شود و بعد از آن تازه می ره سراغ وقفه و فرکانس چشمک زدن را کم می کنه .
                        2)بعضی وقت ها کلید وسطی عمل نمی کنه و عمل چشمک زدن ، بعد از فشردن کلید وسطی انجام نمی شه.

                        ممنون می شم که بگید ایراد کارم از کجاست.
                        آیا وقفه را درست تعریف و استفاده کرده ام؟

                        دیدگاه


                          #13
                          پاسخ : (درخواست) برنامه های خیلی خیلی ساده با CCS

                          اول یه اشکال جزیی داشتید اونم اینکه نوع اسیلاتور رو HS تعریف کرده بودید که توو پروتیوس 4 مگا گذاشته بودید
                          در مورد سوال 2 که بعضی وقت ها کلید وسطی عمل نمی کنه یه اشکال جزیی تو تابع deboun داشتید اونم اینکه وقتی می خوای صبر کنی برای high شدن PIN_B7 دیگه نباید آکولاد باز کنی باید بعد while سمی کالن بزاری اینجوری :
                          while ( !input(PIN_B7) );
                          o
                          در مورد سوال اول هم شما درست تعریف کردید اینتراپتو و این که این مشکل پیش میاد یه چیز عجیب هست . شاید اشکال از پروتیوس باشه ..... بهتره دوستان دیگه نظر بدن...

                          دیدگاه


                            #14
                            پاسخ : (درخواست) برنامه های خیلی خیلی ساده با CCS

                            اول یه اشکال جزیی داشتید اونم اینکه نوع اسیلاتور رو HS تعریف کرده بودید که توو پروتیوس 4 مگا گذاشته بودید
                            آره راست می گی؛ اونو درست کردم اما فرقی نکرد.
                            در مورد سوال 2 که بعضی وقت ها کلید وسطی عمل نمی کنه یه اشکال جزیی تو تابع deboun داشتید اونم اینکه وقتی می خوای صبر کنی برای high شدن PIN_B7 دیگه نباید آکولاد باز کنی باید بعد while سمی کالن بزاری اینجوری :
                            while ( !input(PIN_B7) );
                            اتفاقا فکر می کنم کار من اصولی تره چون همونجور که از اسم تابع معلومه من عملیات Debounce را برای خواندن کلید انجام می دهم، یعنی پین را 20us بعد دوباره چک می کنم و در صورتی که باز هم یک بود، آنوقت به تابع blink می روم؛ این کار برای جلوگیری از نویزه.
                            در مورد سوال اول هم شما درست تعریف کردید اینتراپتو و این که این مشکل پیش میاد یه چیز عجیب هست . شاید اشکال از پروتیوس باشه .....
                            اگه اشتباه نکنم چند وقت پیش روی برد بورد هم دقیقا همین مشکل را داشت، پس به احتمال زیاد مشکل از برنامه است.
                            بهتره دوستان دیگه نظر بدن... icon_wink
                            امیدوارم :sad:

                            دیدگاه


                              #15
                              پاسخ : (درخواست) برنامه های خیلی خیلی ساده با CCS

                              نوشته اصلی توسط cisco
                              در مورد سوال 2 که بعضی وقت ها کلید وسطی عمل نمی کنه یه اشکال جزیی تو تابع deboun داشتید اونم اینکه وقتی می خوای صبر کنی برای high شدن PIN_B7 دیگه نباید آکولاد باز کنی باید بعد while سمی کالن بزاری اینجوری :
                              while ( !input(PIN_B7) );
                              اتفاقا فکر می کنم کار من اصولی تره چون همونجور که از اسم تابع معلومه من عملیات Debounce را برای خواندن کلید انجام می دهم، یعنی پین را 20us بعد دوباره چک می کنم و در صورتی که باز هم یک بود، آنوقت به تابع blink می روم؛ این کار برای جلوگیری از نویزه.sad:
                              نه . شما درست متوجه نشدید.
                              ببینید این تابع deboun شما این شکلی میشه:
                              while ( !input(PIN_B7) );
                              // waits for B1 to go high
                              if( input(PIN_B7) )
                              {
                              delay_us(20);
                              if( input(PIN_B7) )
                              {
                              k=1;
                              blink();
                              }
                              }
                              o

                              این جوری وقتی وارد این تایع میشید اول صبر میکنه تا زمانی که پین B7 به حالت high در بیاد بعد یه بار دیگه چک میکنه که high باشه ---- 20 میلی ثانیه صبر میکنه بعد دوباره چک میکنه یعنی همون نویز گیری که مد نظزتون هست
                              اما تو تابع قبلی همچین اتفاقی نمی افتاد و در واقع شما شرط ورود به حلقه رو اشتباه تعریف کرده بودید و به همین دلیل اجرای اون حلقه یه جورایی شانسی میشد!!!!!

                              دیدگاه

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