ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





صفحه 1 از 3 123 آخرین
  1. #1
    2021/01/06
    10
    0

    تعیین تعداد دفعات انجام کار در میکروکنترلر avr

    سلام خدمت اساتید محترم
    من یک برنامه نوشتم توی بسکام که با میکرو atmega 8 میخوام انجامش بدم
    برنامه اینه من میخوام برنامم به این صورت باشه که یک led رو به تعداد دفعات دلخواه روشن خاموش کنم(یعنی فقط یک خروجی دارم) و این عدد برای بار اول به بعد در حافظه میکرو ذخیره بشه تا اینکه مجدد کلید تنظیم زده بشه و مقدار جدید بدم بهش
    و اینکه 4 تا پوش باتن دارم و یک سون سگمنت 4 دیجیت مالتی پلکس
    یک پوش باتن برای استارت و استاپ برنامه
    یک پوش باتن برای تنظیم تعداد دفعات دلخواه خاموش و روشن شدن led
    و دو پوش باتن بعدی برای آپ و دان شمارنده عدد دلخواهم

    مشکلم اینجاست که میخوام برای ستینگ و نمایشش عددی که وارد می کنم بر روی سون سگمنت، یک sub بذارم اما نمیدونم چکار کنم
    لطفا کمکم کنید برای وارد کردن عدد دلخواهم روی سون سگمنت چکار کنم
    کد:
    $regfile = "m8def.dat"
    $crystal = 800000
    Config Debounce = 50 , Delay = 50
    Declare Sub Eeprom_load
    Declare Sub Show_7seg
    'I/O:
    Config Pinc.0 = Input : Down Alias Pinc.0
    Config Pinc.1 = Input : Set_ Alias Pinc.1
    Config Pinc.2 = Input : Up Alias Pinc.2
    Config Pinb.5 = Input : On_off Alias Pinb.5
    Config Portd = Output : 7seg Alias Portd
    Config Portc.5 = Output : Dp Alias Portc.5
    Config Portb.0 = Output : Dig4 Alias Portb.0
    Config Portb.1 = Output : Dig3 Alias Portb.1
    Config Portb.2 = Output : Dig2 Alias Portb.2
    Config Portb.3 = Output : Dig1 Alias Portb.3
    Config Portb.4 = Output : Led1 Alias Portb.4
    Config Portc.3 = Output : Led2 Alias Portc.3
    Config Portc.4 = Output : Beep2 Alias Portc.4
    
    '**************************************
    'Var:
    Dim I As Byte
    Dim A As Word
    Dim B As Byte
    Dim C As Byte
    Dim D As Single
    Dim E As Byte
    Dim H As Bit
    Dim I_eerom As Byte
    Dim Num As Word
    '*************************** begin **************************************
    Num = 0
    If Num > 0 Then Goto Off_ Else Goto Setting
    
    '******************************** MAIN **********************************
    Off_:
    H = 0
    A = 60000 / Num
    If Set_ = 1 And H = 0 Then H = 1
    Waitms 300
    Goto On_
    On_:
    Do
    Portc.0 = 1
    Portc.1 = 0
    Waitms = A
    Portc.0 = 0
    Portc.1 = 1
    Waitms = A
    Loop Until Set_ = 1 And H = 1
    H = 0
    Goto Off_
    
    
    '*********************************************
    Eeprom_load:
     A = I_eerom
     Num = N_eerom
    Return
    
    '*********************************************
    Eeprom_save:
    I_eerom = A
    N_eerom = Num
    Return
    
    '------------------------------------ SHOW 7SEG --------------------------------
    Show_7seg:
    
    
    
    Return
    
    
     '************************************ SETTING **********************************
    Setting:
    
    goto Eeprom_save 
    Return
    
    '--------------------------------- INCR / DECR ---------------------------------
    Decrease:
    
    
    Return
    '-------------------------------------------------------------------------------
    Increase:
    
    
    Return
    
    '-------------------------------------------------------------------------------
    
    Dta:
    Data &HC0 , &HF9 , &HA4 , &HB0 , &H99 , &H92 , &H82 , &HF8 , &H80 , &H90       'DIGIT
    
    '***************************************END***************************************
    ویرایش توسط pouriyar : 2023/01/25 در ساعت 01:53
  2. #2
    2022/05/14
    578
    999

    پاسخ : تعیین تعداد دفعات انجام کار در میکروکنترلر avr

    دوست عزیز الان مشکل شما مشخصا کدوم بخشه ؟ ( تقرببا هیچکدوم از ساب روتین های اصلی رو ننوشتی )

    مشکلت بخش نمایشگر سون سگمنته یا استراکچر کلی برنامه ؟
    اون حلقه اصلی که نوشتید داره مدام یک پایه رو toggle میکنه ( دو تا بخش اوش هم اصلا اعمال نمیشه )
  3. #3
    2021/01/06
    10
    0

    پاسخ : تعیین تعداد دفعات انجام کار در میکروکنترلر avr

    اساتید کسی نیست بنده رو راهنمایی کنه؟
    من میخوام تعداد خاموش روشن شدن یک led رو توی یک دقیقه خودم تعیین کنم و هربار تغییرش بدم و اینکه اینکار با 3 پوش باتن و یک سون سگمنت 4 دیجیت مالتی پلکس انجام بدم
    خواهش میکنم راهنماییم کنید

    دلیل: ادغام دو پست برای جلوگیری از اسپم

    نقل قول نوشته اصلی توسط Amie.s.m

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    دوست عزیز الان مشکل شما مشخصا کدوم بخشه ؟ ( تقرببا هیچکدوم از ساب روتین های اصلی رو ننوشتی )

    مشکلت بخش نمایشگر سون سگمنته یا استراکچر کلی برنامه ؟
    اون حلقه اصلی که نوشتید داره مدام یک پایه رو toggle میکنه ( دو تا بخش اوش هم اصلا اعمال نمیشه )
    بله من حلقه اصلیم داره همون کار خاموش روشن led رو با تعدادی که وارد میکنم انجام میده
    اما تعداد خاموش روشن شدن یک led رو توی یک دقیقه خودم تعیین کنم و هربار تغییرش بدم و اینکه اینکار با 3 پوش باتن و یک سون سگمنت 4 دیجیت مالتی پلکس انجام بدم حالا من اومدم این برنامه رو فعلا تا اینجا که کدشو نوشتم پیش بردم اما نمیدونم چطور مثلا اعداد رو بالا پایین کنم و روی سون سگمنت به نمایش بذارم و دوباره این عدد سیو بشه تو eeprom و وارد حلقه اصلی بشه برنامه و دوباره اینبار با مقدار جدید led رو خاوش و روشن بکنه
    مثلا میام ستینگ رو میزنم منتظر بمونه تا عدد رو بالا پایین کنم و بعد دوباره ستینگ رو زدم سیو کنه عدد رو و بره داخل حلقه اصلی و تا زمانی که دکمه خاموش شدن برنامه رو نزدم تو لوپ بمونه

    دلیل: ادغام دو پست برای جلوگیری از اسپم

    نقل قول نوشته اصلی توسط Amie.s.m

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    دوست عزیز الان مشکل شما مشخصا کدوم بخشه ؟ ( تقرببا هیچکدوم از ساب روتین های اصلی رو ننوشتی )

    مشکلت بخش نمایشگر سون سگمنته یا استراکچر کلی برنامه ؟
    اون حلقه اصلی که نوشتید داره مدام یک پایه رو toggle میکنه ( دو تا بخش اوش هم اصلا اعمال نمیشه )
    دوست عزیز من میخواستم ساب روتین بذارم اما موندم چطور انجامش بدم فعلا خالی گذاشتم ببینم چکار باید بکنم
    اگر بدون ساب هم میشه نوشت ممنون میشم راهنماییم کنی
    مشکل نمایش مثل عدد 4 رقمی روی سون سگمنت هست و کم و زیاد کردنش و همون بخش ستینگ
    اون حلقه اصلی همون کار تاگل رو باید انجام بده تا زمانی که ستینگ رو بزنیم یا دکمه stop
  4. #4
    2022/05/14
    578
    999

    پاسخ : تعیین تعداد دفعات انجام کار در میکروکنترلر avr

    دوست عزیز متوجه کاری که میخوای انجام بدی هستم ، مساله اینه این کدی که نوشتی عملا هیچی داخلش نیست !

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

    روش درست برنامه نویسی باید با اینتراپت ، تایمر و امثالهم باشه ...نه دیلی و مدام پایه های کلید رو خوندن .
    کلا سیستم سون سگمنتی و مولتی پلکس اینطوری اجرا نمیشه .

    اگر مدار رو نبستی بهتره الگوریتم کلی برنامه ای که میخوای اجرا بشه رو بنویسی ... مبتنی بر الگوریتم برای کسی که بخواد سیستم رو از صفر پیاده کنه خیلی راحت تر و بهتر میشه اجراش کرد تا این چند تا تعریف اولیه ناقص .
  5. #5
    2021/01/06
    10
    0

    پاسخ : تعیین تعداد دفعات انجام کار در میکروکنترلر avr

    نقل قول نوشته اصلی توسط Amie.s.m

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    دوست عزیز متوجه کاری که میخوای انجام بدی هستم ، مساله اینه این کدی که نوشتی عملا هیچی داخلش نیست !

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

    روش درست برنامه نویسی باید با اینتراپت ، تایمر و امثالهم باشه ...نه دیلی و مدام پایه های کلید رو خوندن .
    کلا سیستم سون سگمنتی و مولتی پلکس اینطوری اجرا نمیشه .

    اگر مدار رو نبستی بهتره الگوریتم کلی برنامه ای که میخوای اجرا بشه رو بنویسی ... مبتنی بر الگوریتم برای کسی که بخواد سیستم رو از صفر پیاده کنه خیلی راحت تر و بهتر میشه اجراش کرد تا این چند تا تعریف اولیه ناقص .
    استفاده از اینتراپت و تایمر خود میکرو رو برای این برنامه حقیقت نمیدونم چطور باید انجام بدم
    دانشجو تازه کارم کلا سومین برنامه هست که دارم مینویسم و خیلی چیزا هست که باید یاد بگیرم یکم گیج شدم
    لطفا کمکم کن اگر وقتشو داری ممنونت میشم
    بازر ندارم اون beep که نوشتم کپی از یک برنامه دیگه بوده یادم رفته پاکش کنم فقط 3 تا پوش باتن دارم یکی برای setting و دوتا برای افزایش و کاهش و یک سون سگمنت 4 دیجیت
  6. #6
    2022/05/14
    578
    999

    پاسخ : تعیین تعداد دفعات انجام کار در میکروکنترلر avr

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

    اگر الگوریتم نویسی وارد نیستی بصورت شفاف و دقیق بنویس قراره این سیستم فلان ورودی ها رو بگیره مبتنی بر فلان ورودی ها فلان خروجی ها رو ارائه بده ( هر تعداد بند و ماده و تبصره هم نیازه باید ذکر کنی )
  7. #7
    2021/01/06
    10
    0

    پاسخ : تعیین تعداد دفعات انجام کار در میکروکنترلر avr

    نقل قول نوشته اصلی توسط Amie.s.m

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

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

    اگر الگوریتم نویسی وارد نیستی بصورت شفاف و دقیق بنویس قراره این سیستم فلان ورودی ها رو بگیره مبتنی بر فلان ورودی ها فلان خروجی ها رو ارائه بده ( هر تعداد بند و ماده و تبصره هم نیازه باید ذکر کنی )
    ممنونم

    من شماتیک کار رو توی پروتئوس پیاده کردم که عکسشو گذاشتم این شماتیک رو همینطوری کشیدم یعنی برام مهم نیست کدوم پورت و پین به کجا وصل بشه و همینطور پول آپ و پول دان بودن مهم نیست هرطور دوست داشتی خروجی ها و ورودی ها و همینطور پول آپ و پول دان رو تعریف کن
    برنامه میخوام این کارو انجام بده برای بار اول بیاد عددی که میخوایم توی یک دقیقه led خاموش و روشن بشه رو اگه اولین باره برنامه استارت میشه بگیره و اگر قبلا این عدد رو وارد کردیم قبلش از حافظه فراخوانی کنه و بره تو ساب off منتظر زدن کلید on-off بشه
    اول برنامه num=0 گذاشتم بعد نوشتم اگر بزرگتر از صفر نبود بره تو قسمت ستینگ منتظر بمونه عدد برای بار اول وارد بشه اما اگر این عدد قبلا وارد شده باشه بره تو ساب off بمونه تا زمانی که دکمه on -off زده بشه و بعد زدن دکمه on -off بره تو حلقه on بعد از اون یک متغییر a تعریف کردم که 60000 میلی ثانیه رو تقسیم بر num کنه و تاخیر بین toggle led باشه و تا زمانی که دکمه on - off رو دوباره نزدم از حلقه خارج نشه
    حالا زمانی که مجدد بخوام عدد جدید وارد کنم دکمه set بزنم برنامه وارد ساب set بشه و با دکمه افزایش و کاهش عدد رو تعیین کنم و روی سون سگمنت هم عددی که دارم وارد میکنم رو ببینم بعد عدد جدید ذخیره بشه و دوباره برگردیم به ساب off و منتظر دکمه استارت بمونه
    یک نکته ای هم که هست من بی تجربه و کاراموزم اینم مد نظرتون باشه میخوام زمانم دقیق یک دقیقه باشه اما بطور مستمر ادامه پیدا کنه و متوقف نشه . مثلا اگر عدد 6 وارد کردم 10 ثانیه اول led روشن بشه و 10 ثانیه دوم خاموش بشه و همینطور ادامه پیدا کنه تا دکمه خاموش رو بزنم
  8. #8
    2022/05/14
    578
    999

    پاسخ : تعیین تعداد دفعات انجام کار در میکروکنترلر avr

    این سیستم از نظر سخت افزاری هم طراحی نشده ، اول باید طراحی بشه ...


    سعی میکنم تا فردا شماتیک اصلاح شده با سورس فریمور رو قرار بدم .
    رزولوشن روشن و خاموش شدن led قراره چقدر باشه ؟ یعنی حداکثر در ۱ دقیقه چند بار toggle کنه ؟
    ( از نظر نمایشگر با اعداد دسیمال حداکثرش 9999 سیکل میشه که رزولوشن ۶ میلی ثانیه میده ... اگر عدد رو هگز بخوای نشون بدی تا زیر ۱ میلی ثانیه هم میشه )
    ویرایش توسط Amie.s.m : 2023/01/25 در ساعت 21:48
  9. #9
    2021/01/06
    10
    0

    پاسخ : تعیین تعداد دفعات انجام کار در میکروکنترلر avr

    نقل قول نوشته اصلی توسط Amie.s.m

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    این سیستم از نظر سخت افزاری هم طراحی نشده ، اول باید طراحی بشه ...


    سعی میکنم تا فردا شماتیک اصلاح شده با سورس فریمور رو قرار بدم .
    رزولوشن روشن و خاموش شدن led قراره چقدر باشه ؟ یعنی حداکثر در ۱ دقیقه چند بار toggle کنه ؟
    ( از نظر نمایشگر با اعداد دسیمال حداکثرش 9999 سیکل میشه که رزولوشن ۶ میلی ثانیه میده ... اگر عدد رو هگز بخوای نشون بدی تا زیر ۱ میلی ثانیه هم میشه )
    ممنونم از لطفتون
    تعدادش حداکثر عددی باشه که میشه با سون سگمنت نشون داد یعنی همون 9999
  10. #10
    2022/05/14
    578
    999

    پاسخ : تعیین تعداد دفعات انجام کار در میکروکنترلر avr

    نقل قول نوشته اصلی توسط pouriyar

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    ممنونم از لطفتون
    تعدادش حداکثر عددی باشه که میشه با سون سگمنت نشون داد یعنی همون 9999
    دوست عزیز این کد اولیه اش
    ( جاهایی که نیاز داری هم خالی گذاشتم خودت متغیر مد نظرت رو تعریف کن )

    کد:
    . program LED_7_Seg_Cnt
    ' * Project name:
    '     Seven Segment
    ' * Copyright:
    '     (c) Amir.s.m, 2023
    ' * Revision History:
    '     20230126:
    '       - initial release (PRE);
    ' * Description:
    '     This code demonstrates how to display number on one 7-segment display
    '     (common cathode). Display is connected to PORTB (PB0..PB7, segment A to
    '     PB0, segment B to PB1, etc); common cathode is connected to the pin PC2 to PC5 on
    '
    ' * Test configuration:
    '     MCU:             ATMEGA8
    '     Oscillator:      Internal Clock 02.0000 MHz
    '     Ext. Modules:    None.
    '     SW:              mikroBasic PRO for AVR
    ' * NOTES:
    '
    ' *
    
    
    dim shifter, portd_index , digit as byte
                     g_time , number as word
                         portd_array as byte[4]
                         _led as sbit at DDRD.4
                         
                         _up as sbit at PIND0_bit
                         _down as sbit at PIND1_bit
                         _ok as sbit at PIND2_bit
    
    sub procedure show
      PORTC  = 0                          ' turn off all 7seg displays
      PORTB = portd_array[portd_index]   ' bring appropriate value to PORTB
      PORTC = shifter                    ' turn on appropriate 7seg. display
    
      ' move shifter to next digit
      shifter= shifter << 1
      if (shifter > 32) then
        shifter = 4
      end if
      ' increment portd_index
      Inc(portd_index)
      if (portd_index > 3) then
        portd_index = 0                  ' turn on 1st, turn off 2nd 7seg.
      end if
    end sub
    
    sub function mask(dim num as byte) as byte
      select case num
        case 0
          result= 0x3F
        case 1
          result= 0x06
        case 2
          result= 0x5B
        case 3
          result= 0x4F
        case 4
          result= 0x66
        case 5
          result= 0x6D
        case 6
          result= 0x7D
        case 7
          result= 0x07
        case 8
          result= 0x7F
        case 9
          result= 0x6F
      end select
    end sub
    
    sub procedure refresh
        digit = number / 1000               ' extract thousands digit
        portd_array[3] = mask(digit)        ' and store it to PORTB array
        digit = (number / 100) mod 10       ' extract hundreds digit
        portd_array[2] = mask(digit)        ' and store it to PORTB array
        digit = (number / 10) mod 10        ' extract tens digit
        portd_array[1] = mask(digit)        ' and store it to PORTB array
        digit = number mod 10               ' extract ones digit
        portd_array[0] = mask(digit)        ' and store it to PORTB array
    '    Inc(number)                         ' increment number
        if ( number > 9999 ) then
          number = 9999
        end if
        if ( number < 1 ) then
          number = 1
        end if
        if  ( GICR.6 = 0 ) then                  'Check INT0 STS
           GICR.6 = 1                            'Enable INT0
        end if
    end sub
    
    
    sub procedure run(dim num as word)
    
    
    end sub
    
    
    sub procedure KeyPress() iv IVT_ADDR_INT0 ics ICS_AUTO
        dim _key , _time as byte
    
        GICR.6 = 0                  'Disable INT0
        g_time = 1                  'reset general time
        _time = 11                  'set debunce time
        while ( g_time < _time )
            _key = PORTD and 0x07   'Read PD.2,1,0
        wend                        '10ms debunce elapsed
    
     select case _key
     case 0                         'Up AND Down
        exit                        'cancel change
     case 1                         'Down
        dec(number)
     case 2                         'Up
        inc(number)
     case 3                         'Ok
        run(number)
     case else
     exit                           'Release Keys
     end select
     
    end sub
    
    sub procedure Timer0Overflow_ISR() org IVT_ADDR_TIMER0_OVF '(1,024ms)
    
      inc(g_time)
      if ( g_time>= 58594) then        '(60K ms)
       g_time = 0
      end if
      
      if (g_time mod 10 = 0) then      '10ms interval time
       show                            'show multiplex segments
        if (g_time mod 100 = 0) then   '100ms interval time
         refresh                       'refresh parameters
        end if
      end if
      
    end sub
    
    sub procedure boot_init
      DDRB = 0xFF                 ' Configure PORTB as output on all pins
      PORTB = 0                   ' Clear PORTB
      
      DDRC = 0x3C                 ' Configure PORTC as output on PC.5,4,3,2
      PORTC = 0                   ' Clear PORTC
      
      DDRD.4 = 1                  ' Configure PD.4 as output LED
      
      PORTD = 7                   ' Pull up on PD.2,1,0
    
      g_time = 0
      digit = 0
      portd_index = 0
      shifter = 4
    
      number = 1234               ' Initial number value
    
      TCCR0 = 0x02                ' ClkI/O/8 (From prescaler)
      
    
      MCUCR.0 = 0
      MCUCR.1 = 0                 'Low level IRQ INT0 for Keys
      GICR.6 = 1                  'Enable INT0
    
      TOIE0_bit = 1               ' Timer0 overflow interrupt enable
      
      SREG_I_bit = 1              ' General Interrupt enable
    
    end sub
    
    main:
    boot_init()
    
     while true
      nop
     wend
    end.
    اینم شماتیک سیستم

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    ویرایش توسط Amie.s.m : 2023/01/27 در ساعت 19:20
صفحه 1 از 3 123 آخرین
نمایش نتایج: از 1 به 10 از 22

موضوعات مشابه

  1. تعیین تعداد دفعات روشن و خاموش کردن LED
    توسط fmicro در انجمن میکروکنترلرهای AVR
    پاسخ: 2
    آخرين نوشته: 2019/11/29, 11:35
  2. تعداد دفعات R/W در EEPROM میکرو از مرز 500000 بار گذشت !
    توسط حامد رحیمی در انجمن میکروکنترلرهای AVR
    پاسخ: 13
    آخرين نوشته: 2018/03/12, 07:44
  3. تعداد دفعات پروگرام کردن fpga ?????
    توسط md3848 در انجمن PLD , SPLD , GAL , CPLD , FPGA
    پاسخ: 1
    آخرين نوشته: 2014/12/14, 15:57
  4. پاسخ: 8
    آخرين نوشته: 2014/10/14, 13:35
  5. تعداد دفعات خواندن از eprom چقدره ؟
    توسط mehrdad3264 در انجمن میکروکنترلرهای AVR
    پاسخ: 14
    آخرين نوشته: 2014/03/17, 10:38

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •