اطلاعیه

Collapse
No announcement yet.

مشکل برنامه نویسی با162اat90usb

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مشکل برنامه نویسی با162اat90usb

    با سلام خدمت دوستان عزیز
    من تازه دارم با این at90usb162 آشنا میشم
    می خوام با کامپیوتر یک سری اعدادی و بفرستم که 7seg های متصل به این میکرو نمایش بدهند.اما...
    خوب با ایجاد ارتباط با pc از طریق usb که مشکل دارم که این قضیه رو دارم تو یک پست دیگه پی گیری میکنم (ممنونم آقای mojtaba_led)
    ولی مشکل فعلی که باهاش دارم و خسته ام کرده اینه که واسه تست یک برنامه ساده تو codevision نوشتم که توش عدد 4 نمایش میده بعده 1000 میلی ثانیه باید عدد 6 رو نشون بده که بعد از پروگرام کردن فقط عدد 4 نشون میده رو سگمنت یعنی دستورهای delay و یا for اجرا نمی کنه !!!!!!!!!!!!!
    کسی می تونه کمکم کنه ؟؟؟؟؟؟؟؟؟؟

    #2
    پاسخ : مشکل برنامه نویسی با162اat90usb

    با سلام
    به نظرم باید برنامتون رو بزارید اینجوری نمیشه اشکال کار رو فهمید
    اگر براتون مقدوره برنامتون رو بزارید تا یه نگاهی بهش بندازیم در غیر اینصورت بیشتر توضیح بدید .

    دیدگاه


      #3
      پاسخ : مشکل برنامه نویسی با162اat90usb

      سلام
      ممنون از توجه تون
      کل کاری کردم تو code vision اینه:


      کد:
      This program was produced by the
      CodeWizardAVR V2.05.0 Evaluation
      Automatic Program Generator
      © Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
      http://www.hpinfotech.com
      
      Project : 
      Version : 
      Date  : 2/20/2012
      Author : Freeware, for evaluation and non-commercial use only
      Company : 
      Comments: 
      
      
      Chip type        : AT90USB162
      Program type      : Boot Loader - Size:512words
      AVR Core Clock frequency: 8.001000 MHz
      Memory model      : Small
      External RAM size    : 0
      Data Stack size     : 128
      *****************************************************/
      
      #include <90usb162.h>
      #include <stdio.h>
      #include <delay.h> 
      int co;
      
      
      // Declare your global variables here
      
      void main(void)
      {
       
      
      // Crystal Oscillator division factor: 1
      #pragma optsize-
      CLKPR=0x80;
      CLKPR=0x00;
      #ifdef _OPTIMIZE_SIZE_
      #pragma optsize+
      #endif
      
      // Input/Output Ports initialization
      // Port B initialization
      // Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=Out Func0=Out 
      // State7=T State6=T State5=T State4=T State3=1 State2=1 State1=1 State0=1 
      PORTB=0x00;
      DDRB=0xF0;
      
      // Port C initialization
      // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
      // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
      PORTC=0x00;
      DDRC=0x00;
      
      // Port D initialization
      // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
      // State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1 
      PORTD=0xFF;
      DDRD=0xFF;
      
      // PLL initialization
      // PLL Enabled: Off
      PLLCSR=0x00;
      
      // Timer/Counter 0 initialization
      // Clock source: System Clock
      // Clock value: Timer 0 Stopped
      // Mode: Normal top=0xFF
      // OC0A output: Disconnected
      // OC0B output: Disconnected
      TCCR0A=0x00;
      TCCR0B=0x00;
      TCNT0=0x00;
      OCR0A=0x00;
      OCR0B=0x00;
      
      // Timer/Counter 1 initialization
      // Clock source: System Clock
      // Clock value: Timer1 Stopped
      // Mode: Normal top=0xFFFF
      // OC1A output: Discon.
      // OC1B output: Discon.
      // OC1C output: Discon.
      // Noise Canceler: Off
      // Input Capture on Falling Edge
      // Timer1 Overflow Interrupt: Off
      // Input Capture Interrupt: Off
      // Compare A Match Interrupt: Off
      // Compare B Match Interrupt: Off
      // Compare C Match Interrupt: Off
      TCCR1A=0x00;
      TCCR1B=0x00;
      TCNT1H=0x00;
      TCNT1L=0x00;
      ICR1H=0x00;
      ICR1L=0x00;
      OCR1AH=0x00;
      OCR1AL=0x00;
      OCR1BH=0x00;
      OCR1BL=0x00;
      OCR1CH=0x00;
      OCR1CL=0x00;
      
      // External Interrupt(s) initialization
      // INT0: Off
      // INT1: Off
      // INT2: Off
      // INT3: Off
      // INT4: Off
      // INT5: Off
      // INT6: Off
      // INT7: Off
      EICRA=0x00;
      EICRB=0x00;
      EIMSK=0x00;
      // PCINT0 interrupt: Off
      // PCINT1 interrupt: Off
      // PCINT2 interrupt: Off
      // PCINT3 interrupt: Off
      // PCINT4 interrupt: Off
      // PCINT5 interrupt: Off
      // PCINT6 interrupt: Off
      // PCINT7 interrupt: Off
      PCMSK0=0x00;
      // PCINT8 interrupt: Off
      // PCINT9 interrupt: Off
      // PCINT10 interrupt: Off
      // PCINT11 interrupt: Off
      // PCINT12 interrupt: Off
      PCMSK1=0x00;
      PCICR=0x00;
      
      // Timer/Counter 0 Interrupt(s) initialization
      TIMSK0=0x00;
      
      // Timer/Counter 1 Interrupt(s) initialization
      TIMSK1=0x00;
      
      // USART1 initialization
      // USART1 disabled
      UCSR1B=0x00;
      
      // Analog Comparator initialization
      // Analog Comparator: Off
      // Analog Comparator Input Capture by Timer/Counter 1: Off
      ACSR=0x80;
      DIDR1=0x00;
      
      // SPI initialization
      // SPI disabled
      SPCR=0x00;
      
      // USB Controller initialization
      // USB Mode: Disabled
      USBCON=0x00;
      
      while (1)
         {  
             
           for(co=0;co<10;co++)  
          { 
            PORTB=0xF0;
          PORTD=0xFC;
          delay_ms(20);
          
          PORTD=0xC0;
          delay_ms(20);
          
          PORTD=0xE6;
          delay_ms(20);
          
          PORTD=0xCA;
          delay_ms(20);
          PORTB=0xFF;
          delay_ms(1300);
          }
          
          
           
      
         }
      که جواب نداد 
      اومدم این کارو کردم:
      
      while (1)
         {  
            
          PORTB=0xF0;
          PORTD=0xFE;
          PORTD=0xEE;
          
      
      
      
         }
      }
      ]که اصولا باید عدد9 تو سگمنت نمایش داده بشه که عدد 8 نشون می ده یعنی خط اول برنامه همیشه اجرا می شه من فکر می کردم از delay اما دیدم نه کلا یک خط از برنامه اجرا می شه حدس مزنم از کلاک باشه .فیوز بیت ها هیچ کدام ست نشدند(1111) هستندو کریستال هم عوض کردم باز نشد خیلی ممنون می شم اگه راهنمایی کنید.

      دیدگاه


        #4
        پاسخ : مشکل برنامه نویسی با162اat90usb

        خوب اول یه چیزی اینکه چرا فرکاستون تو برنامه 8.001000MHZ هست اگه اینطور تنظیم کرده باشید تابع DELAY درست محایبات رو انجام نمیده و زمان DELAY زمان واقعی نیست البته این مسئله زیاد مهم نیست

        یه سوال شما با چی میکرو رو پروگرم میکنید با نرافزار فیلیپ ؟ اگه با فلیپ پروگزم میکنید که باید فرکانس اوسیلاتورتون 8 مگ و از نوع خارجی باشه و البته من فکر نمیکنم که اشکال در اندازه فرکانس اوسیلاتور باشه و خوب باید این رو هم در نظر داشته باشید که برای اینکه تابع DELAY برای اینکه بتونه تاخیر زمانی واقعی رو اعمال کنه باید فرکانسی که برای اون تابع یعنی همون فرکانسی که تو کدویزارد تعیین کردید با فرکانس اوسیلاتور یکی باشه بنابراین پگس فرکانس اوسلاتور باید 8 مگ باشه کم و زیادش نکنید .

        خوب تا اونجا که من متوجه شدم شما پورت D رو به عنوان پورت دیتای 7 سگمنت در نظر گرفتید نقش پورت B چیه ؟
        واینکه آیا سگمنتتون یک رقمیه ؟

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

        دیدگاه


          #5
          پاسخ : مشکل برنامه نویسی با162اat90usb

          من تو کد ویزارد فر کانس و 8.000000 انتخاب کردم نمی دونم چرا اینجوری شده !!!
          من با فلیپ پروگرم کردم و فرکانس هم یکی هستند هر دو 8.MHZ .
          بله کاملا درست متوجه شدید پورت D جهت ارسال دیتا به پایه های کاتد سگمنت و پورت B جهت کنترل پایه های آند (سگمنت آند مشترک) است . سگمنت ها یک رقمی اما کل سیستم 3 رقمی یعنی 3 تا 1 رقمی.
          اما اگه دقت کرده باشید آخر کد فوق توضیح دادم که من delay را حذف فقط دو خط دستور نوشتم که اول عدد 8 رو پورت D می زاره بعد بلافاصله عدد 9 رو می زاره رو پورت یعنی بعد از روشن شدن باید عدد 9 رو ما ببینیم که متاسفانه 8 رو سگمنت یا به عبارتی میکرو فقط یک خط از برنامه رو اجرا می کنه . نتیجه ای من گرفتم از delay نیست و به نظر میاد از کلاک با شه اما نمی دونم از کجا
          :angry:

          دیدگاه


            #6
            پاسخ : مشکل برنامه نویسی با162اat90usb

            ok الان دیدم.
            خوب این مسئله طبیعی چون این سه خط یرنامه داخل یه حلقه بینهایت نوشته شدن و دائما دارند تکرار میشن و خوب چون سرعت اجرا و نهایتا روشن شدن سگمنتها خیلی زیاده چشم انسان نمیتونه خاموش شدن سگمنت اضافی رو تشخیص بده حتی اگر به جای 9 عدد 1 رو بزاردید کلا چشم انسان فلیکر بالای 50 هرتز رو تشخیص نمیده برای اینکه تغییرات رو مشاهده کنید یه delay بالای 20 میلی ثانیه بین دستور دو و سه و بعد از دستور سه قرار بدید

            دیدگاه


              #7
              پاسخ : مشکل برنامه نویسی با162اat90usb

              بله کاملا متوجه ام من هم منظورم اینه طبق فرموده شما من باید عدد 9 رو ببینم اما من فقط 8 یعنی کد اول رو می بینم .
              تازه من قبلا از تا خیر استفاده کرده بودم که جواب نگرفتم
              راهکار چی پیشنهاد می کنید؟

              دیدگاه


                #8
                پاسخ : مشکل برنامه نویسی با162اat90usb

                نه دیگه ب به نظرم چون شما اونطور که خودتون میگید یکی از این سه خط عدد 8 هست پس چون سرعت رفرش شدن عدد خیلی زیاده شما دیگه عدد نه رو نمیتونید ببینید بنابراین طبق گفته خودم بازم باید همون عدد 8 رو ببینید چون سرعت رفرش عدد (7 سگمنت)خیلی بالاست .
                در مورد پیشنهاد بازم همون پیشنهاد پست فبلم رو میدم .
                در مورد حالت اول که با تاخیر نوشتید میگم شاید چون تاخیراتون کم هست متوجه نمیشید که کی 6 میشه چون اگه درست متوجه شده باشم بعد از اینکه 6 میشه 20 مییلی ثانیه بعدش به مدت 1.3 ثانیه سگمنت خاموش میشه !

                دیدگاه


                  #9
                  پاسخ : مشکل برنامه نویسی با162اat90usb

                  بله حق با شما بود
                  من همین برنامه رو با bascom نوشتم جواب داد!!!
                  درسته که تو bascom ham تاخیر 20 میلی تقریبا 7 ثانیه طول کشید اما کار کرد.
                  هر کاری می کنم توخیه منطقی واسش ندارم که چرا delay انقدر نا منظم کار می کنه من هیچ وقفه ا ی هم ندارم نمی دونم؟؟؟؟؟؟؟؟؟؟؟
                  و اینکه چرا codevisin اصلا جواب نداد؟؟؟؟؟؟؟؟؟
                  چیزی به نظرتون میاد؟؟؟؟؟؟؟

                  دیدگاه


                    #10
                    پاسخ : مشکل برنامه نویسی با162اat90usb

                    منظورتون از 20 میلی تو بسکام میشه 7 ثانیه چیه ؟
                    منظورتون از نامنظم بودن چیه و کجا تو کدوم کامپایلر ؟

                    آقا من فکر نمیکنم مشکل از کامپایلر باشه ، شما اون کاری که گفتم کردید ؟ منظورم اینه که بین خط دوم و سوم و بعد از خط سوم یه تاخیر مثلا 1 ثانیه ای قرار بدید بعد نتیجه رو ببنید .

                    دیدگاه


                      #11
                      پاسخ : مشکل برنامه نویسی با162اat90usb

                      منظورم از 20 میلی می شد 7 ثانیه اینه :
                      اصولا تاخیر 20 میلی اصلا با چشم قابل رویت نیست اما من تغیر 7 سگمنت رو می دیدم و حتی تایم گرفتم که شد 7 ثانیه
                      یک خواهشی از شما داشتم البته اگه واستون مقدور
                      می شه راهنمایی بفرمایید من چطوری می تونم یک تا خیر 20-30 میلی ثانیه ای با استفاده از تایمر /کانتر تو کدویژن ایجاد کنم و ازش استفاده کنم
                      ممنون

                      دیدگاه


                        #12
                        پاسخ : مشکل برنامه نویسی با162اat90usb

                        بیایید یه زمان پایه مثلا 10 میلی ثانیه با یه تایمر درست کنید بعد هر کجا که خواستید بعد از یه دستور تاخیر N* 10 میلی ثانیه ایجاد کنید بعد از اون دستور تامیر رو روشن کنید و بعد از دستور روشن شدن تایمر یه حلقه WHILE بزارید که مثلا شرطش این باشه که تا زمانی که متغیر I از N کوچکتر هست حلقه تکرار بشه (تو همون خط درجا بزنه) که حالا این متغیر I داخل روتین وقفه سرریز تایمر هر بار (هر 10 میلی ثانیه) یک واحد اضافه بشه به این ترتیب بعد از گذشت N *10 میلی ثانیه خط بعدی اجرا میشه و برای اینکه تایمر و به عبارت بهتر تاخیر دوباره قابل استفاده بشه بعد از اجرای دستور مورد نظر تایمر رو خاموش و مقدار تایمر و متغیر I رو صفر کنید .

                        دیدگاه


                          #13
                          پاسخ : مشکل برنامه نویسی با162اat90usb

                          سلام دوستان.
                          من این هدر بورد at90usb162 را گرفتم از همین فروشگاه ECA.
                          برنامه رو میریزم توش کار نمیکنه.
                          برنامه خیلی ساده مثلا
                          $regfile = "usb162.dat"
                          $crystal = 100000
                          Config Portd = Output
                          Do

                          Set Portd.1
                          Wait 1
                          Reset Portd.1
                          Wait 1

                          Loop
                          End

                          میکرو فقط میاد کل پورت D رو SET میکنه.همین.
                          مشکل کجاست ؟؟؟
                          این میکرو با زبان بیسیک کار میکنه ؟؟؟

                          ابتدا و شروع هرکاری سخت ترین مرحله آن کار است. برای مثال به عقابها نگاه کن ، حتی اونها هم در ابتدای پرواز ، زیاد بال و پر می زنند، اما هنگامی که اوج می گیرند ، دیگر حتی نیازی به پر زدن هم ندارند ...

                          کافیست اولین قدمها را بدون ترس و با پشتکارِ بالا برداری مطمئن باش بزودی به اوج خواهی رسید و روزهای سخت همیشه نخواهند ماند ...

                          دیدگاه

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