اطلاعیه

Collapse
No announcement yet.

فوری!!!!درخواست کمک برای برنامه نویسی BASCOM AVR

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

    فوری!!!!درخواست کمک برای برنامه نویسی BASCOM AVR

    سلام
    من میخوام یه برنامه بنویسم که بوسیله تایمر میکرو یک خروجی رو به طور متناوب خاموش و روشن کنم
    و این خاموش و روشن شدن ها طبق یک روال از پیش تعیین شده باشند
    من برای اون پنج حالت در نظر گرفتم، که در هر حالتی خروجی تا مدت معینی روشن باشد سپس برای مدتی هر یک ثانیه خاموش و روشن بشه
    میخوام بوسیله پنج کلیدی که دارم هر کدام از حالت ها را انتخاب کرده و میکرو شروع به انجام دستورات ان بکند
    مشکلی که دارم اینه که:
    1-کلید ها رو با اینکه در حلقه LOOP گذاشتم ولی فقط در ابتدای برنامه کار می کنند و وقتی که یک کلید را فشار میدهیم برنامه همان اجرا شده بقیه از کار می افتد
    2- و مشکل اساسی این که چه طور میشه با تایمر برنامه های ترکیبی نوشت؟ مثلا بگیم این رو یک دقیقه روشن کن بعد سه دقیقه چشمکز کن. اون هم با تاخیر یک ثانیه
    3- چه جوری باید تایمر رو در حالتهای مختلف تعریف کنم؟؟
    چون همون اول که معرفی می کنی یک وقفه سرریزی بیشتر نمیشه داد و من چند تا کار ازش میخوام


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



    کد:
    'IN THE NAME OF GOD
    $regfile = "m8def.dat"
    $crystal = 16000000
    Config Portb = Output
    Led1 Alias Pinb.0
    Led2 Alias Pinb.1
    Led3 Alias Pinb.2
    Led4 Alias Pinb.3
    Led5 Alias Pinb.4
    Config Pinc.0 = Output : Mot Alias Pinc.0
    Config Pinc.1 = Output : Boogh Alias Portc.1 : Reset Boogh
    Config Pind.0 = Input : Kelid1 Alias Pind.0
    Config Pind.1 = Input : Kelid2 Alias Pind.1
    Config Pind.2 = Input : Kelid3 Alias Pind.2
    Config Pind.3 = Input : Kelid4 Alias Pind.3
    Config Pind.4 = Input : Kelid5 Alias Pind.4
    Dim Count1 As Byte
    Dim M As Byte
    Dim S As Byte
    Declare Sub Incr_h1
    Declare Sub Incr_h2
    Declare Sub Incr_h3
    Declare Sub Incr_h4
    Declare Sub Incr_h5
    'TIMER SETTING
    '-------------------------------------------------------------------------------
    Config Timer2 = Timer , Async = On , Prescale = 128
    Enable Timer2
    Enable Ovf2
    Enable Interrupts
    On Ovf2 Overflow
    '-------------------------------------------------------------------------------
    Program_start:
    S = 0 : M = 0
    If Kelid1 = 0 Then
    Set Lamp
    Set Led1
    Call Incr_h1
    End If
    'If Kelid2 = 1 Then Call Incr_h2
    'If Kelid3 = 1 Then Call Incr_h3
    'If Kelid4 = 1 Then Call Incr_h4
    'If Kelid5 = 1 Then Call Incr_h5
    '-------------------------------------------------------------------------------
    'SHOROOE BARNAME----------------------------------------------------------------
    Overflow:
    Stop Timer2
    Incr S
    If S >= 30 Then
    Reset MOT
    S = 0 
    End If
    Return
    END
    این یه قسمت از کدی که نوشتم
    زیاد بود خیلی جاهاشو حذف کردم
    چه جوری میشه کلید ها رو همیشه اسکن کنه و به تغیر اونها حساس باشه؟
    و دوم اینه که من میخوام در حالت یک به مدت سی ثانیه روشن نگه داشته بشه بعد خاموش کنم
    در حالت دو هم خروجی 10 دقیقه روشن باشه
    در حالت سه یک دقیقه روشن باشه و سه دقیقه با فواصل یک ثانیه قطع و وصل بشه بعد هم یک دقیقه با فواصل نیم ثانیه
    اگر یه تیکه ش رو هم درست کنید ببینم چه جوریه بقیه اش رو خودم یه کاریش میکنم

    #2
    پاسخ : فوری!!!!درخواست کمک برای برنامه نویسی BASCOM AVR

    نوشته اصلی توسط matinm
    این یه قسمت از کدی که نوشتم
    زیاد بود خیلی جاهاشو حذف کردم
    چه جوری میشه کلید ها رو همیشه اسکن کنه و به تغیر اونها حساس باشه؟
    و دوم اینه که من میخوام در حالت یک به مدت سی ثانیه روشن نگه داشته بشه بعد خاموش کنم
    در حالت دو هم خروجی 10 دقیقه روشن باشه
    در حالت سه یک دقیقه روشن باشه و سه دقیقه با فواصل یک ثانیه قطع و وصل بشه بعد هم یک دقیقه با فواصل نیم ثانیه
    اگر یه تیکه ش رو هم درست کنید ببینم چه جوریه بقیه اش رو خودم یه کاریش میکنم
    سلام
    من این سه تایی رو که گفته بودی برنامتو کمی تغییر دادم بقیش هم خودت بنویس کاری نداره
    کلید های یک تا 3 کار می کنه بقیه رو تعریف نکردم چون شرطاشون رو نگفته بودی
    موفق باشید
    دانلود فایل پروتیوس و بسکام
    http://www.uplooder.net/cgi-bin/dl.c...d2a5a0b3f19d52



    کد:
    'IN THE NAME OF GOD
    $regfile = "m8def.dat"
    $crystal = 8000000
    Config Portb = Output
    Led1 Alias Portb.0
    Led2 Alias Portb.1
    Led3 Alias Portb.2
    Led4 Alias Portb.3
    Led5 Alias Portb.4
    Config Portc.3 = Output
    Powerled Alias Portc.3
    Set Powerled
    Config Portc.0 = Output : Motor Alias Portc.0
    Config Portc.1 = Output : Boogh Alias Portc.1 : Reset Boogh
    Config Pind.0 = Input : Kelid1 Alias Pind.0
    Config Pind.1 = Input : Kelid2 Alias Pind.1
    Config Pind.2 = Input : Kelid3 Alias Pind.2
    Config Pind.3 = Input : Kelid4 Alias Pind.3
    Config Pind.4 = Input : Kelid5 Alias Pind.4
    Dim Count1 As Byte
    Dim M As Byte , B As Byte , R As Word , F As Byte , V As Byte
    Dim S As Byte , Z1 As Bit , Z2 As Bit , Z3 As Bit
    Dim A As Byte
    '-------------------------------------------------------------------------------
    Config Timer1 = Timer , Prescale = 256
    Enable Timer1
    Enable Ovf1
    Enable Interrupts
    On Ovf1 Overflow1
    '-------------------------------------------------------------------------------
    Program_start:
    S = 0 : M = 0 : A = 0 : B = 0 : R = 0 : F = 0 : V = 0
    Stop Timer1
    Do
    Set Powerled
    If Kelid1 = 1 Then Z1 = 0
    If Kelid2 = 1 Then Z2 = 0
    If Kelid3 = 1 Then Z3 = 0
    If Kelid1 = 0 And Z1 = 0 Then
    A = 1
    S = 0
    M = 0
    B = 0
    R = 0
    V = 0
    F = 0
     Timer1 = 34285
    Start Timer1
    Z1 = 1
     End If
    If A = 1 Then
    Set Motor
    Set Led1
    Else
    Reset Led1
    End If
    '--------------------------------
    If Kelid2 = 0 And Z2 = 0 Then
    A = 2
    S = 0
    M = 0
    B = 0
    R = 0
    V = 0
    F = 0
    Timer1 = 34285
    Start Timer1
    Z2 = 1
    End If
    If A = 2 Then
    Set Motor
    Set Led2
    Else
    Reset Led2
    End If
    '--------------------------------
    If Kelid3 = 0 And Z3 = 0 Then
    A = 3
    S = 0
    M = 0
    B = 0
    R = 0
    V = 0
    F = 0
    Timer1 = 34285
    Start Timer1
    Z3 = 1
    End If
    If A = 3 Then
    If B = 0 Then Set Motor
    Set Led3
    Else
    Reset Led3
    End If
    
    Loop
    '-------------------------------------------------------------------------------
    'SHOROOE BARNAME----------------------------------------------------------------
    Overflow1:
    If B <= 2 Then Incr S
    If S >= 30 And A = 1 Then
    Reset Motor
    Reset Led1
    S = 0
    A = 0
    M = 0
    R = 0
    V = 0
    F = 0
    Stop Timer1
    End If
    '--------------------------------
    If A = 2 Then
    If S > 59 Then
    S = 0
    Incr M
    End If
    If M => 10 Then
    Reset Motor
    Reset Led2
    M = 0
    S = 0
    A = 0
    R = 0
    V = 0
    F = 0
    Stop Timer1
    End If
    End If
    '--------------------------------
    If A = 3 Then
    If B = 0 And S > 59 Then
    S = 0
    B = 1
    M = 0
    R = 0
    V = 0
    F = 0
    End If
    '-------------
    If B = 1 Then
    If S > 59 Then
    Incr M
    If M = 4 Then
    M = 0
    S = 0
    B = 2
    R = 0
    V = 0
    F = 0
    End If
    S = 0
    End If
    If M <= 3 Then
    R = S Mod 2
    If R = 0 Then
    Set Motor
    Else
    Reset Motor
    End If
    End If
    End If
    '-------------
    If B = 2 Then
    Stop Timer1
    Config Timer1 = Timer , Prescale = 64
    Timer1 = 3035
    Start Timer1
    B = 3
    S = 0
    M = 0
    R = 0
    V = 0
    F = 0
    End If
    End If
    '-------------
    If B = 3 Then
    Incr V
    Incr F
    If F >= 2 Then
     F = 0
    Incr S
    End If
    If S <= 59 Then
    R = V Mod 2
    If R = 0 Then
    Set Motor
    Else
    Reset Motor
    End If
    Else
    Reset Led3
    Reset Motor
    Stop Timer1
    Config Timer1 = Timer , Prescale = 256
    Stop Timer1
    Timer1 = 34285
    B = 0
    S = 0
    M = 0
    R = 0
    V = 0
    F = 0
    A = 0
    End If
    End If
    If B < 2 Then Timer1 = 34285
    If B > 2 Then Timer1 = 3035
    Return
    End
    '-------------------------------------------------------------------------------
    برد جوجه کشی:
    مطالعه پست 1 (حتما مطالعه کنید)


    مطالعه پست 2 (برای مطلع شدن از تغییرات برنامه مطالعه کنید)

    دانلود

    توجه:
    این برد نیمه صنعتی و خانگی هست...
    برای صنعتی شدن حتما برد مخصوص خودتون رو بزنید...

    آی دی کانال تلگرامی مربوط به برد جوجه کشی : electr0o0nic@

    دیدگاه


      #3
      پاسخ : فوری!!!!درخواست کمک برای برنامه نویسی BASCOM AVR

      من هنوز کامل نفهمیدم قضیه از چه قراره :redface: من چیزی که فهمیدم اینه که یه عملیاته ست و ریست در خروجی می خواد انجام بشه که اول یک زمان معین روشنه و بعد از اون شروع به خاموش روشن شدن با فاصله زمانی یک ثانیه می کنه پس چیزی که بین این 5 حالت فرق میذاره همون مدت زمان اول هست که روشنه و در عین حال شما میخوای هر لحظه کلیدی فشرده شد به یه حالت دیگه بره که یعنی همون مدت زمان اول تغییر کنه
      برای این کار من نظرم اینه شما از یه timer این طوری استفاده کنی که هر 100 یا 200 میلی ثانیه این 5 کلیدرو چک کنه (برای هر کلید هم حتما از دستور bitwait استفاده کنید تا هر وقت کلید فشرده شد منتظر بمونه تا دست از رو کلید برداشته بشه بعد عملیات مربوطه رو انجام بده) و هر کلید این طور باشه که متغییر a (همون مدت زمان معیین اول هست که خروجی روشنه) رو تغییر بده و بره به اول حلقه و اگه خروجی هم تغییر می کنه مشه اونم تغییر داد با یه متغییر دیگه و اول حلقه هم می نویسد که بقیه خروجی ها خاموش بشن
      ------------------------------------------------------------------------------------------------
      اگه هنوز درست هدف شمارو نفهمیدم معذرت می خوام
      اگه نیاز به توضیحات بیشتر و یا برنامه هست بگید، من در خدمتم

      دیدگاه

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