اطلاعیه

Collapse
No announcement yet.

طراحی شمارنده 0_99 برای atmega16 و 7seg چهارتایی

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

    طراحی شمارنده 0_99 برای atmega16 و 7seg چهارتایی

    سلام دوستان اگه کسی میتونه یه شمارنده 0 تا 99 برای شکل زیر به زبان c بنویسه دریغ نکنه . یه دنیا ممنونش میشم. atmega16

    mortezaomidi66@yahoo.com

    #2
    پاسخ : طراحی شمارنده 0_99 برای atmega16 و 7seg چهارتایی

    سلام
    دوست عزیز منظوزت از شمارنده چیه؟
    میخوای ثانیه شمار باشه یا اینکه مثلا با اینتراپت چیزی رو بشماره؟
    انقدر احمق نیستم که فکر کنم کارم تموم شده

    دیدگاه


      #3
      پاسخ : طراحی شمارنده 0_99 برای atmega16 و 7seg چهارتایی

      بله میخوام مثل ثانیه بشماره...
      mortezaomidi66@yahoo.com

      دیدگاه


        #4
        پاسخ : طراحی شمارنده 0_99 برای atmega16 و 7seg چهارتایی

        نوشته اصلی توسط morteza_omidi
        بله میخوام مثل ثانیه بشماره...
        تنظیمات شمارندت که سادس
        اگر کلاک سیستمتو 1000000در نظر بگیری و تایمر 1 را با تقسیم فرکانسی 64 تعریف کنی با تنظیمات زیر
        TCCR1A=0x00;
        TCCR1B=0x03;
        TCNT1H=0xC2;
        TCNT1L=0xFA;
        و تنظیمات وقفه زیر
        interrupt [TIM1_OVF] void timer1_ovf_isr(void)
        {
        // Reinitialize Timer1 value
        TCNT1H=0xC2FA >> 8;
        TCNT1L=0xC2FA & 0xff;
        // Place your code here
        c++;
        }
        هرباری که c زیاد میشه 1ثانیه گذشته
        میتونی 1حلقه 99تایی برایc تعریف کنی که بهتره داخل تابع اصلی اینکارو انجام بدی.
        من تاحالا با 7segment کار نکردم و اطلاعات چندادی ازش ندارم. شما اگر چیزی میدونی بزار تا با هم اون قسمتشم ردیف کنیم(در کل کار ساده ای باید باشه)
        انقدر احمق نیستم که فکر کنم کارم تموم شده

        دیدگاه


          #5
          پاسخ : طراحی شمارنده 0_99 برای atmega16 و 7seg چهارتایی

          خدمت شما: http://www.4shared.com/file/I-G03-MM/7segment_COM_Anode2dig.html

          منبع:
          PICPARS
          هستم اگر می روم گر نروم نیستم

          دیدگاه


            #6
            پاسخ : طراحی شمارنده 0_99 برای atmega16 و 7seg چهارتایی

            دوست عزیز از کمکت ممنون.یه چیزهایی را فهمیدم و این کمک بزرگی بود. اما باز آنچه که من میخواستم نبود اول اینکه سخت افزار با atmega32 نباشه و با 16 باشه دوم اینکه چون من کلاس avr میرم و این را به عنوان تمرین دریافت کردم و حتما بایدبه زبان c انجامش بدم اگه میشه از دستور ref استفاده نکنید و باز هم اگه زحمتی نیست تا 999 بشماره.
            یه دنیا ممنون
            mortezaomidi66@yahoo.com

            دیدگاه


              #7
              پاسخ : طراحی شمارنده 0_99 برای atmega16 و 7seg چهارتایی

              باز اگه کسی میتونه کمک کنه تا 999 به زبان c بشماره لطف بزرگی کرده.
              mortezaomidi66@yahoo.com

              دیدگاه


                #8
                پاسخ : طراحی شمارنده 0_99 برای atmega16 و 7seg چهارتایی

                نوشته اصلی توسط morteza_omidi
                دوست عزیز از کمکت ممنون.یه چیزهایی را فهمیدم و این کمک بزرگی بود. اما باز آنچه که من میخواستم نبود اول اینکه سخت افزار با atmega32 نباشه و با 16 باشه دوم اینکه چون من کلاس avr میرم و این را به عنوان تمرین دریافت کردم و حتما بایدبه زبان c انجامش بدم اگه میشه از دستور ref استفاده نکنید و باز هم اگه زحمتی نیست تا 999 بشماره.
                یه دنیا ممنون
                عزیزم اون ref دستور نیست اسم تابعه (ref_seg) تو اگه باهاش مشکل داری عوضش کن هر چی دلت میخواد بزارش

                اما درباره 999 :
                فکر نکنم زیاد سخت باشه
                همین کارها رو با اضافه کردن یه پورت دیگه انجام میدی


                اما در رابطه با atmega16:
                من خودم فقط با mega32 کار کردم
                اما تا اونجایی که من اطلاع دارم زیاد با هم فرق ندارن

                پس بی زحمت خودت هم یه آستینی بالا بزن و یه کاری بکن
                اگه نشد، چشم. ما در خدمتیم :nerd:
                هستم اگر می روم گر نروم نیستم

                دیدگاه


                  #9
                  پاسخ : طراحی شمارنده 0_99 برای atmega16 و 7seg چهارتایی

                  با عرض سلام خدمت شما دوست عزیز
                  برای کار شمامیکرو mega16 با میکرو mega32 فرقی با هم نمی کنه.
                  برای این که یک ثانیه شمار از 0 تا 999 یا هر عدد دیگری بسازید در ابتدا شما یک شمارنده احتیاج دارید که هر یک ثانیه یکی به مقدار قبلی آن اضافه شود که این کار را می توانید توسط یک تایمر یا توسط یک دستور تاخیر delay ایجاد کنید.
                  سپس این عدد را می بایست بر روی 7seg نمایش بدهید پس بهتر است یک تابع برای آن بنویسید که یک عدد صحیص را دریافت و روی 7seg های شما نمایش دهد.

                  اصول کار برای 7seg ها هم بدین صورت است که سون سگمنت رو را به صورت مولتی پلکسی درایو می کنند.

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

                  به این صورت تمام رقم هایی که می خواهید نمایش بدید را روی سگمنت ها به ترتب باید نمایش بدید.

                  شکل متصل کردن سون سگمنت هاتون هم باید به این صورت باشد که تمام a ها به هم متصل باشند و به یک پین میکروی شما باید متصل باشند و به همین ترتیب همه b ها ..... g ها به هم متصل باشند و به پین دیگر میکروی شما متصل باشند.

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

                  خوب حالا فرض را بر این میگیریم که شما به ترتب زیر عمل کرده اید:

                  a -> PORTB.0

                  b->PORTB.1

                  c->PORTB.2

                  ......

                  g->PORTB.6

                  پایه مشترک هر رقم سون سگمنت شما هم به شکل زیر متصل شده است:

                  segment1 ->PORTC.0

                  segment2 -> PORTC.1

                  ...

                  segmentN -> PORTm.n

                  حال مدار شما آماده است.

                  برای نمایش عدد ها باید کدی که آن رقم را تولید می کند رو بدست بیاورید مثلا برای نمایش عدد 1 باید c , b را روشن کنید که طبق مدار بالا کدی که عدد 1 را می سازد می شود 0x06 برای این کار می تونی از یک آرایه استفاده کنی به شکل زیر:

                  unsigned char digits[]={ 0x3F , 0x06 , 0x2B .... }

                  حالا می توانید در یک تایمر این اعداد رو به ترتیب روی هر سگمنتون نمایش بدید.

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

                  موفق باشید
                  http://www.eDev.ir

                  دیدگاه

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