اطلاعیه

Collapse
No announcement yet.

تعیین نوع اسیلاتور در CCS(درخواست کمک)

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

    تعیین نوع اسیلاتور در CCS(درخواست کمک)

    سلام
    در میکرو 2نوع اسیلاتور میتوان تعیین کرد.-1داخلی 2-خارجی(غیب گفتم!!)
    من دارم با کامپایلر سی سی اس کار میکنم که به مشکل برخوردم مشکل اول اینکه بعد از ذخیره برنامه فرکانس اسیلاتور میکرو را باید ست کرد .
    این فرکانس اسیلاتور داخلی است یا خارجی ؟بعد دو نوع دستور وجود دارد
    1)#use delay(Clock=2000000)// oscillator frequency
    2)setup_oscillator(osc_4MHZ)
    خوب من میخوام از اسیلاتور داخلی استفاده کنم باید چه کار کنم؟
    واینکه اگر خواستم از اسیلاتور خارجی استفاده کنم چی؟
    مثلا برنامه زیر رو ببینید که ارور هاش رو هم گذاشتم به نظر شما اشکال از کجاست؟
    یک مشکل دیگه اینکه وقتی بعد از ذخیره کردن برنامه کامپایلر از ما نوع میکرو و فرکانس اسیلاتور را می خواد آیا میشه بعد از تایید اولیه اون رو دوباره عوض کرد؟
    #include <16f877a.h> //micro name
    setup_oscillator(osc_4MHZ);//sets the internal oscillator to 4MHZ
    main()
    {
    set_tris_b(0x00); //set port b as outputs
    while(true)
    {
    delay_ms(1000); //wait 1
    output_high(PIN_B0); //set portb.0 ( turn on led)
    delay_ms(1000); //wait 1
    output_low(PIN_B0) ; //reset portb.0 ( turn off led)
    }
    }

    ارور هاش

    Error12"onoffled.c Line8(1,9)Undefined indentifier delay ms
    Error12"onoffled.c Line10(1,9)Undefined indentifier delay ms

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

    دستور use_delay ربطی به اسیلاتور نداره . فقط شما باید مقدار نهایی فرکانس اسیلاتور (چه داخلی چه خارجی) رو بهش بدین برای زمان بندی دقیقتر دستورات delay . همین . پس واسه تعریف نوع اسیلاتور نیست .
    اگر خواستید از کریستال خارجی استفاده کنید باید از دستور fuses xx# استفاده کنید که xx نوع کریستال رو مشخص میکنه . اگه فرکانس کریستالت کمتر یا مساوی با 4mhz بود باید بجای xx عبارت xt رو قرار بدی و اگر هم مقدار کریستالت بیشتر از 4mhz بود باید به جای xx عبارت hs رو قرار بدی .
    پس تو کامپایلر ccs شما مقدار کریستال رو تعریف نمیکنید بلکه نوع اون رو تعریف میکنید . (یادت باشه که مقدار کریستال فقط در دستور use_delay نوسته میشه .)
    سری 16F اسیلاتور داخلی نداره و از سری 18 به بعد دارن . اگر خواستید اسیلاتور داخلی رو فعال کنید باید از دستور setup_oscillator استفاده کنید . برای هرمیکرو مختلف این تابع آرگومان های متفاوتی هم میگیره . حتما باید به هدر فایل هر میکرو مراجعه کنید تا از آرگومان های این تابع برای این میکرو مطلع بشید . مثلا بعضی از میکرو ها به شما اجازه انتخاب فرکانس اسیلاتور داخلی رو میدن ولی بعضی از میکرو ها فقط اجازه انتخاب منبع اسیلاتور داخلی رو به شما میدن . پس برای آشنایی بیشتر حتما باید به هدر فایل میکرو مراجعه کنید .
    برنامه ای هم که گذاشتید :
    1- میکرو 16F877A اسلاتور داخلی نداره پس دیتور setup_oscillator اشتباهه . باید از دستور fuses xt# استفاده کنید .
    2- چون از دستورات delay در برنامتون استفاده کرده اید پس باید حتما دستور use_delay را قبل از تابع main به کار ببرید و مقدار کریستال رو واسش تعیین کنید .

    دیدگاه


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

      نوشته اصلی توسط محمد ایجی
      اگر خواستید از کریستال خارجی استفاده کنید باید از دستور fuses xx# استفاده کنید که xx نوع کریستال رو مشخص میکنه . اگه فرکانس کریستالت کمتر یا مساوی با 4mhz بود باید بجای xx عبارت xt رو قرار بدی و اگر هم مقدار کریستالت بیشتر از 4mhz بود باید به جای xx عبارت hs رو قرار بدی .
      من تازه با CCS کار میکنم. قبلا با MikroC کار میکرد. ولی آقا محمد من تا اینجایی که با ccs کار کردم اصلا از دستور fuses# استفاده نکردم و موقع کامپایل کردنم اصلا هیچ خطایی رو مشاهده نکردم! الانم یه خورده گیج شدم! oo: موقع شبیه سازی تو پروتئوس هم اون چیزی که میخواستم رو میدیدم! آخه من فکر میکردم با دستور use_delay فرکانس رو تعیین میکنن!

      دیدگاه


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

        سلام
        واسه همینه که من پرسیدم اون فرکانسی که بعد از ذخیره فایل در PIC-WIZARD ست میکنید مربوط به چیه واینکه
        آیا میشه بعدا تییرش داد؟
        نکته بعد اینکه میکروهای 16f87/88 و 16f818/819 اسیلاتور داخلی دارند که ایران میکروهم 819 اش رو داره
        این آقا سعید راست میگه من برنامه هایی رو واسه 16f84 یا 16f877 دیدم که از دستور fuse# استفاده نکرده می شه بیشتر توضیح بدین.
        راستی من یه پروگرامر از نواوران خریدم که باش به مشکل برخوردم کسی از شما باهاش کار کرده؟

        دیدگاه


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

          شما یه برنامه ای که بدون FUSES نوشتید رو لطف میکنید بزارید اینجا؟
          وقتی من fuses رو نمیزارم بهم ارور میده.
          خیر دستور use_delay فقط به منظور استفاده از دستورات DELAY به کار گرفته میشه .

          دیدگاه


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

            اون عددی که در WIZARD به عنوان فرکانس کریستال وارد میکنید مربوط میشه به همون دستور USE_DELAY . بله میتونید تغییرش بدید . اینجور دستورات تو هدر فایل project قرار میگیره.

            دیدگاه


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

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

              #include <16f84.h> //micro name
              #use delay(Clock=20000000) // oscillator frequency
              main()
              {
              set_tris_b(0x00); //set port b as outputs
              while(true)
              {
              delay_ms(1000); //wait 1
              output_high(PIN_B0); //set portb.0 ( turn on led)
              delay_ms(1000); //wait 1
              output_low(PIN_B0) ; //reset portb.0 ( turn off led)
              }
              }

              دیدگاه


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

                آقا ایجی اینم از فایل برنامه ای که اصلا از دستور fuses استفاده نشده و تو پروتئوس هم جواب داده! درضمن من این برنامه رو تو محیط MPLAB نوشتم البته با استفاده از کامپایلر CCS

                http://www.4shared.com/file/251477490/7629386c/LCD_and_LED_and_BUTTON.html

                دیدگاه


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

                  نوشته اصلی توسط masiha308
                  اینم یه برنامه
                  راستی میشه بگین این هدر فایل کجاست؟ آقای ایجی من خیییییلییییی تو PIC مبتدی هستم ومیدونین که تا این قاق ها رو رد کنم یکم کمک می خوام.

                  #include <16f84.h> //micro name
                  #use delay(Clock=20000000) // oscillator frequency
                  main()
                  {
                  set_tris_b(0x00); //set port b as outputs
                  while(true)
                  {
                  delay_ms(1000); //wait 1
                  output_high(PIN_B0); //set portb.0 ( turn on led)
                  delay_ms(1000); //wait 1
                  output_low(PIN_B0) ; //reset portb.0 ( turn off led)
                  }
                  }
                  دوست عزیز شما این برنامه رو کامپایل هم کردین؟؟ بهتون ارور نداد؟ من تاحالا چندین بار امتحان کردم. اصلا امکان نداره. تو HELP خود CCS هم نوشته که هر برنامه باید حداقل یک دستور FUSES باشه.

                  دیدگاه


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

                    نوشته اصلی توسط saeidjabbari
                    آقا ایجی اینم از فایل برنامه ای که اصلا از دستور fuses استفاده نشده و تو پروتئوس هم جواب داده! درضمن من این برنامه رو تو محیط MPLAB نوشتم البته با استفاده از کامپایلر CCS

                    http://www.4shared.com/file/251477490/7629386c/LCD_and_LED_and_BUTTON.html
                    الآن امکان دانلود ندارم. ولی حتما فردا بررسیش میکنم.
                    ببینید دستورات fuses معمولا در هدر فایل project قرار دارن.

                    دیدگاه


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

                      دیدگاه


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

                        نوشته اصلی توسط masiha308

                        #include <16f84.h> //micro name
                        #use delay(Clock=20000000) // oscillator frequency
                        main()
                        {
                        set_tris_b(0x00); //set port b as outputs
                        while(true)
                        {
                        delay_ms(1000); //wait 1
                        output_high(PIN_B0); //set portb.0 ( turn on led)
                        delay_ms(1000); //wait 1
                        output_low(PIN_B0) ; //reset portb.0 ( turn off led)
                        }
                        }
                        آقای ایجی من برنامه بالا رو کامپایل کردم و فقط یه پیغام warnings داد که اونم وقتی ()main رو به ()void main تبدیل کردم درست شد(مثل شکل بالا که masiha308 گذاشته)!!! oo:
                        درضمن آقای ایجی ورژن CCS که شما استفاده میکنید چنده؟ ماله من ورژن 4.105 هست که تو تاپیک زیر گذاشتم:

                        http://www.eca.ir/forum2/index.php?topic=37623.0

                        به نظر شما احتمال داره که از کرک کامپایلرمون باشه؟

                        دیدگاه


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

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

                          دیدگاه


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

                            من فکر کنم مقدار دیفالت در صورت عدم تعیین فرکانس اسیلاتور 4MHz باشه (تو بیسیک که اینجور بود)
                            اینجا رو نمیدونم. اگه کسی می دونه به ما هم بگه ممنون میشم .راستی من جالبه که من وقتی همون برنامه ی ساده رو که قرار دادم با دستور fuse# نوشتم خیلی ارور داد!!!!
                            نظرتون چیه؟

                            دیدگاه


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

                              نوشته اصلی توسط masiha308

                              راستی من جالبه که من وقتی همون برنامه ی ساده رو که قرار دادم با دستور fuse# نوشتم خیلی ارور داد!!!!
                              دوست عزیز منم با دستور FUSES نوشتم ولی هیچ اروری ندیدم و وقتی هم تو پروتئوس شبیه سازیش کردم خوبم جواب داد!

                              نوشته اصلی توسط محمد ایجی
                              ولی نمیدونم وقتی فیوزبیت ها رو واسش تعیین نمیکنیم پس چه مقداری توشون قرار میگیره؟ مقدار دیفالت ندارن که!
                              آقا محمد فکر کنم جوابش رو پیدا کردم تو help کامپایلر دستور osc# رو ببین فکر کنم تمام مشکلامون حل بشه! با این دستور سرعت کلاک میکرو رو تعیین میکنیم ولی اونجا نوشته که بجای این دستور میتونیم از دستور use delay# استفاده کنیم. پس اگر چنین چیزی ممکن باشه به نظر من مشکل حله! حالا ممنون میشم اگه شما هم نظرتون رو بگین

                              دیدگاه

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