اطلاعیه

Collapse
No announcement yet.

مشکل با تایمر بسکام

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

    مشکل با تایمر بسکام

    سلام.من یه پروژه بستم که میخام هر 500ms یک سری داده رو توی sd ذخیره کنم.
    همه چیز درست کار میکنه اما قسمتی که تایمر داره 500ms حساب میکنه که وارد زیر برنامه ذخیره کردن بشه مشکل داره.برنامه رو هم هرچی بررسی میکنم مشکلی نداره!!
    کسی میتونه به کد من یه نگاه کنه و ببینه مشکل کجاست؟
    کد:
    [FONT=Yekan]$regfile = "m32def.dat"[/FONT]$crystal = 16000000
    
    
    $baud = 4800
    $swstack = 32
    $hwstack = 64
    $framesize = 64
    
    
    '***************************config*****************
    $include "CONFIG_AVR-DOS.Bas"
    $include "Config_MMCSD_HC.bas"
    
    
    Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.1 , Db6 = Portc.0 , _
    Db7 = Portd.7 , E = Portc.3 , Rs = Portc.4
    
    
    Config Lcd = 16 * 2
    Config Portb.0 = Output
    Enable Interrupts
    Enable Adc
    Start Adc
    Config Int1 = Rising
    Enable Int1
    
    
    Config Timer0 = Timer , Prescale = 64
    Enable Timer0
    Start Timer0
    Enable Ovf0
    On Ovf0 T_count
    
    
    
    
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    
    
     Declare Sub Record
    
    
    '*************************var********************
    Dim C As Word
    Dim B As Single
    Dim M As String * 10
    Dim V As Single
    Dim P0 As Single , P1 As Single
    Dim P As String * 10
    Dim Eror As Byte
    Dim S As String * 60 , Fl As String * 12 , Ff As Byte
    
    
    Dim H As Byte
    
    
    
    
    Dim Count As Word
    Dim Flok As Byte
    Dim Rev As Word
    Dim Rpm1 As Word
    Dim Rpm2 As Word
    Dim Pulse As Word
    '****************************main*****************
    Main:
    Timer0 = 55
    Count = 0
    Rpm1 = 0
    Rpm2 = 0
    '******************
                 Spiinit
                Cls
        If Driveinit() <> 0 Then
              Lcd "Error Init    "
              Flok = 0
     Else
              Lcd "Init  Ok "
        End If
    
    
        Waitms 500
    
    
                Cls
                Home
    If Initfilesystem(1) <> 0 Then
    Lcd "System  Error   "
    Flok = 0
    Else
    Lcd "SD  ok "
    Flok = 1
    End If
    
    
    
    
               Waitms 500
    
    
    
    
    Firr:
                Cls
                Home
    If Initfilesystem(1) <> 0 Then
    Lcd "system   error   "
    Flok = 0
    Else
    Lcd "SD  ok "
    Flok = 1
    End If
    Waitms 500
    '************************
    
    
    
    
    Do
    'Start Timer0
    
    
    
    
    H = Timer0
    
    
    C = Getadc(0)
    B = C / 204.6
    M = Fusing(b , "#.##")
    V = Val(m)
    
    
    If 0.0197 <= V And V <= 0.29228 Then
    P0 = V + 0.1042
    P1 = P0 / 0.2478
    Elseif V > 0.197 And 0.38978 <= V And V <= 2.8866 Then
    P0 = V + 2.3003
    P1 = P0 / 1.5824
    Elseif V > 2.8866 And 2.4707 <= V And V <= 4.07765 Then
    P0 = V + 2.8858
    P1 = P0 / 1.7855
    Elseif V > 4.07765 And 4.2966 <= V And V <= 4.87326 Then
    P0 = V - 1.0014
    P1 = P0 / 0.8238
    Elseif V > 4.87326 And 4.87314 <= V And V <= 5 Then
    P0 = V - 4.2405
    P1 = P0 / 0.1318
    
    
    End If
    
    
    P = Fusing(p1 , "#.##")
    
    
     On Int1 Velocity
    Cursor Off
    
    
      Cls
    Lcd "Speed:" ; Rpm2 ; "rpm"
    Locate 2 , 1
    Lcd "P:" ; P ; "cm"
    Pulse = 0
    Waitms 1000
    Rev = Pulse / 100
    Rpm1 = Rev * 60
    Rpm2 = Rpm1 / 9.1
    
    
    If Count = 625 Then Set Portb.0
    
    
       'Toggle Portb.0
    
    
    '           Fl = "REC1.xlsx"
    '          Open Fl For Append As #1
    
    
    
    
    'Print #1 , "Position= " ; P ; " Speed= " ; Rpm2
    
    
    
    
    '          Close #1
    
    
    '  Set Portb.0
    '  Waitms 500
    '  Reset Portb.0
    '  Waitms 500
    
    
    'T_count = 0
    'Timer1 = 0
    
    
         Loop
    
    
    End                                                         'end program
    
    
    '****************************intrrupt****************
    Velocity:
    Incr Pulse
    Return
    
    
    '**********************sub ovf1***************
    T_count:
    Timer0 = 55
    Incr Count
    'Toggle Portb.0
    Return
    
    
    '**********************Record*****************
    Record:
    
    
    
    
               Fl = "REC1.txt"
              Open Fl For Append As #1
    
    
    
    
    Print #1 , "    Position= " ; P ; "    Speed= " ; Rpm2
    
    
    
    
              Close #1
    
    
      Set Portb.0
      Waitms 500
      Reset Portb.0
      Waitms 500
    
    
    Count = 0
    Timer0 = 55
    [FONT=Yekan]Return[/FONT]

    #2
    پاسخ : مشکل با تایمر بسکام

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

    دیدگاه


      #3
      پاسخ : مشکل با تایمر بسکام

      نوشته اصلی توسط M3R-E نمایش پست ها
      سلام
      نگفتید چه مشکلی داره؟
      برنامه وقفه تایمر که درسته و مشکلی نداره!
      مشکلم اینه که متغییر count بعد سر ریز شدن تایمر یک واحد بهش اضافه میشه و بعد اینکه به عدد 625 رسید باید وارد زیر برنامه record بشه اما این اتفاق نمیفته!!
      نمیدونم دقیقا مشکل کجاست!!

      دیدگاه


        #4
        پاسخ : مشکل با تایمر بسکام

        ببینید شما چون تو حلقه از وقفه 1 ثانیه استفاده کردید به خاطر همین زمانی که متغیر برابر با 625 میشه برنامه داره تو وقفه سیر میکنه(بهتر از این کلمه به ذهنم نرسید)
        شما شرط رو بزار بزرگتر مساوی 625 احتمال زیاد مشکلتون حل شه!
        موفق باشی

        دیدگاه


          #5
          پاسخ : مشکل با تایمر بسکام

          نوشته اصلی توسط M3R-E نمایش پست ها
          ببینید شما چون تو حلقه از وقفه 1 ثانیه استفاده کردید به خاطر همین زمانی که متغیر برابر با 625 میشه برنامه داره تو وقفه سیر میکنه(بهتر از این کلمه به ذهنم نرسید)
          شما شرط رو بزار بزرگتر مساوی 625 احتمال زیاد مشکلتون حل شه!
          موفق باشی
          نمیدونم چرا الان به یه مشکل عجیب خوردم!!برای همین نتونستم برنامه جدید رو چک کنم!
          الان sd رو میزارم روی برد بعد وقتی وصلش میکنم به کامپیوتر sd رو باز نمیکنه و فرمتش هم نمیتونه کنه!
          هر دفعه با برنامه sd Formater درستش میکنم اما باز به مشکل میخورم!
          به نظرتون چرا اینطوری شده؟
          چون قبلا درست کار میکرد همه چی!!

          دیدگاه


            #6
            پاسخ : مشکل با تایمر بسکام

            فرمت کارت sd تون تغییر نکرده؟
            fat32 هست؟

            دیدگاه


              #7
              پاسخ : مشکل با تایمر بسکام

              نوشته اصلی توسط M3R-E نمایش پست ها
              فرمت کارت sd تون تغییر نکرده؟
              fat32 هست؟
              آره همون fat32 هست!
              زیر برنامه ovf0 رو که غیر فعال کردم و برنامه قسمت record رو هم اوردم تو بدنه تابع اصلی برنامه نوشتم مشکلم تقریبا حل شد.یعنی میومد داخل sd فایل متنی که میخاستم رو ایجاد میکرد اما چیزی داخلش نمینوشت.
              اما وقتی که کلا تایمر رو غیر فعال کردم همه چیز درست شد!!!!
              حالا به نظر شما من که میخام هر 500ms داخل sd اطلاعات ذخیره بشه باید چیکار کنم؟!

              دیدگاه

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