اطلاعیه

Collapse
No announcement yet.

مشکل در بافر کردن دیتای ورودی به avr

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

    مشکل در بافر کردن دیتای ورودی به avr

    من یه gsm modem مدل Tc35i دارم که با پورت سریال کار میکنه. من با avr تونستم باهاش اس ام اس بفرستم. و با کامپیوتر تونستم هم اس ام اس بخونم و هم بفرستم. اما مشکل اینجاست که با avr حتی یه بایت درست حسابی هم نمیتونم از جی اس ام بخونم.
    من برای آزمایش اینکه ببینم آیا gsm modem دیتا رو به avr میده یا نه اومدم سیم TX جی اس ام مودم رو به RX کامپیوتر وصل کردم و دیدم جی اس ام مثل هلو داره به avr جواب میده!!! اما این avr خنگ نمیبینه :redface:
    بعد به این شک کردم که شاید avr فقط تو دریافت مشکل داره و اومدم avr رو به کامپیوتر وصل کردم و دیدم که هیچ مشکلی نداره و مثل هلو هم ارسال میکنه و هم دریافت!!!
    من واسه رفع این مشکل اومدم ورودی avr رو بافر کردم. اما این دفعه حتی از کامپیوتر هم چیزی دریافت نکرد!!!!
    یعنی چیزی بافر نمی شد!!!
    در ضمن هم avr رو عوض کرم هم آی سی max232
    از اساتید خواهش میکنم منو راهنمایی کنن!!! آخر ترمه باید پرژه ام رو تحویل بدم.
    پیشاپیش از راهنماییتون ممنونم
    اطلاعات تکمیلی:
    avr=atmega8
    baud=9600
    GSM Modem = Tc35i Serial
    max232=Maxim
    کد:
    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 9600
    Config Serialin = Buffered , Size = 50
      Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
      Config Lcd = 16 * 2
      Dim D As String * 50
      Dim B As Byte
      Dim N As Byte
      Dim J As Byte
      N = 0
      Wait 1
    
      Cls
      D = ""
      N = 0
      Cursor Off
      Lcd "Geting SMS..."
      Waitms 500
      Print "at+cmgf=1"
      Waitms 100
      Print "at+cmgr=1"
      Waitms 500
      Open "comb.1:9600,8,n,1"
      Do
       B = Inkey()
       Incr N
       If N = 49 Then Exit Do
       D = D + Chr(b)
       Waitms 100
       Loop
      Waitms 500
      Cls
      Wait 1
      J = Len(d)
      Lcd J
      Locate 2 , 1
      Lcd D
      End

    #2
    پاسخ : مشکل در بافر کردن دیتای ورودی به avr

    کد:
    $regfile = "m8def.dat"
    $crystal = 8000000
    $baud = 9600
    Config Serialin = Buffered , Size = 50
      Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
      Config Lcd = 16 * 2
      Dim D As String * 50
      Dim B As Byte
      Dim N As Byte
      Dim J As Byte
      N = 0
      Wait 1
    
      Cls
      D = ""
      N = 0
      Cursor Off
      Lcd "Geting SMS..."
      Waitms 500
      Print "at+cmgf=1"
      Waitms 100
      Print "at+cmgr=1"
      Waitms 500
      Open "comb.1:9600,8,n,1"
      Do
       B = Inkey()
       Incr N
       If N = 49 Then Exit Do
       D = D + Chr(b)
       Waitms 100
       Loop
      Waitms 500
      Cls
      Wait 1
      J = Len(d)
      Lcd J
      Locate 2 , 1
      Lcd D
      End

    دیدگاه


      #3
      پاسخ : مشکل در بافر کردن دیتای ورودی به avr

      دوباره همون مشکل قدیمی. شما که با وقفه با سریال ارتباط برقرار نکردی. بنابراین وقتی میگی:
      $baud = 9600

      یعنی حداکثر در هر 1.2 میلی ثانیه یک بایت رد و بدل میشه و شما در حلقه اصلی خودت یک دستور:
      Waitms 100
      گذاشتی که یعنی تا 100 میلی ثانیه هر چی اومد بی خیالش شو یعنی به عبارت دیگه بایت اولو بگیر و 49 بایت بعدی رو بریز دور.
      یا این تاخیر رو بردار یا از وقفه استفاده کن.
      میکروات اطلاعات رو از دست میده.

      دیدگاه


        #4
        پاسخ : مشکل در بافر کردن دیتای ورودی به avr

        من این کار رو هم کردم!!! اما باز هم نشد!!!!
        اصلا چرا وقتی از دستور بافر استفاده میکنم دیگه پورت سریال کار نمیکنه؟
        پس این دستور رو واسه چی گذاشتن؟
        serialin=buffered,size=12
        serialout=baffered,size=12
        وقتی من از این دستور استفاده میکنم چرا اطلاعات بافر نمیشه؟
        اصلا چرا وقتی به کامپیوتر وصل میکنم با همون تاخیر 100 میلی ثانیه مثل هلو کار میکنه؟؟؟؟؟؟
        یکی به دادم برسه 1 هفته اس دارم روش کار میکنم :angry: :angry: :angry:

        دیدگاه


          #5
          پاسخ : مشکل در بافر کردن دیتای ورودی به avr

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

          دیدگاه


            #6
            پاسخ : مشکل در بافر کردن دیتای ورودی به avr

            آره با هیپر ترمینال میفرستم.
            هم با هیپر هم با امولاتور بیسکام
            هر چند تا کاراکتر هم که با کیبورد میزنم با میکرو دریافت میشه چه با داشتن wait تو برنامه چه بدون wait!!!!
            اصلا چرا موقعی که از دستور بافر استفاده میکنم دیگه یوارت کار نمیکنه؟؟؟
            تو مثال های کتاب کاهه همیشه پورت سریال رو بافر کرده!!!! ولی واسه من کار نمیکنه!!! با 11 تا میکرو تست کردم :sad: به خدا :cry:

            دیدگاه


              #7
              پاسخ : مشکل در بافر کردن دیتای ورودی به avr

              مسلما مشکل از میکرو نیست. یه جای کار میلنگه. من هم که بیسیک کار نیستم.

              دیدگاه


                #8
                پاسخ : مشکل در بافر کردن دیتای ورودی به avr

                نیست یاری کننده ای که مرا یاری کند؟ :cry2:

                دیدگاه


                  #9
                  پاسخ : مشکل در بافر کردن دیتای ورودی به avr

                  از اساتید کسی ایده ای نداره؟

                  دیدگاه


                    #10
                    پاسخ : مشکل در بافر کردن دیتای ورودی به avr

                    شماتیک مدارتو میتونی بذاری؟ حداقل بصورت بیت مپ؟

                    دیدگاه


                      #11
                      پاسخ : مشکل در بافر کردن دیتای ورودی به avr

                      مشکل از استفاده از بافر است
                      وقتی شما با کامپیوتر ارتباط برقرار می کنید (چه کامپیوتر و چه میکرو) زمانی که رشته خود را می فرستند در آخر یک 0 (صفر) نیز ارسال می کنند که به معنای پایان جمله (یا همان پایان ارسال) است.
                      زمانی که شما با کامپیوتر ارتباط برقرار می کنید تا زمانی که به بایت پایانی نرسیده باشید می خواهد داده دریافت کند و آن را درون بافر نگه دارد به محض اینکه داده 0 را دریافت کند حال می توانید از بافر بخوانید و آن را نمایش دهید
                      اما زمانی که شما دارید با وسیله غیر از کامپیوتر (یا وسیله هایی که به این صورت کار می کنند مانند یک میکرو دیگر) کار می کنید دیگر در انتهای ارسال داده مقدار صفر را برای شما ارسال نمی کند. اما میکرو شما جوری تنظیم شده (هنگام پیکربندی توسط Bytematchمی توانید مقداری را که بعنوان انتهای رشته است تغییر دهید) که تا ارسال مقدار صفر (به عنوان انتهای رشته) می خواهد دیتاها را درون بافر نگه داری کند واسه همین هیچ وقت صفر نمی آید (مگر اینکه داده شما صفر باشد نه به عنوان انتهای رشته)و برنامه شما کار نمی کند برای هیمن وقتی با چنین دستگاهایی استفاده می کنید بهتر است از دستور INPUTBIN برای گرفتن فقط یک داده تنها استفاده کنید یا از همین دستور برای گرفتن یک تعداد خاص داده ورودی استفاده کنید
                      هیچ کس و هیچ چیز نمی تونه مانع رسیدنت به آرزوهات بشه مگر خودت

                      دیدگاه


                        #12
                        پاسخ : مشکل در بافر کردن دیتای ورودی به avr

                        دیدگاه


                          #13
                          پاسخ : مشکل در بافر کردن دیتای ورودی به avr

                          هنوز نتونستم این مشکل رو حل کنم
                          کسی یه ایده ی کوچولو هم داره کمک کنه :sad:

                          دیدگاه


                            #14
                            پاسخ : مشکل در بافر کردن دیتای ورودی به avr

                            :wow: :wow: :wow: :wow: :wow:
                            بلاخره موفق شدم
                            ایراد رو پیدا کردم
                            enable interrupts
                            این دستور رو باید بعد از کانفیگ کردن بافر ورودی مینوشتم
                            اما واقعا خیلی سخت بود.
                            ممنونم از همه کسایی که این تاپیک رو خوندن و قصد کمک داشتن :job:

                            دیدگاه


                              #15
                              پاسخ : مشکل در بافر کردن دیتای ورودی به avr

                              با سلام مجدد
                              دوستان یه مشکل دیگه
                              من با برنامه قبلی به نتیجه کامل رسیدم، اما حالا تصمیم دارم برنامه ساعت رو هم به برنامه دریافت sms اضافه کنم !
                              پس دیگه نمیتونم از دستور waitkey استفاده کنم. چون با این دستور پروگرام کانتر تو همون خط میمونه
                              تصمیم دارم از دریافت اینتراپتی استفاده کنم
                              URXC و بقیه ماجرا!!! اما یه مشکل بزرگ هست و اونم اینه که وقتی ما از دستور urxc استفاده میکنیم دیگه نمیتونیم برای دیتای ورودی بافر تعیین کنیم!!! حالا چرا نمیشه نمیدونم!!!!
                              از دستور cleare serialin هم نمیتونیم استفاده کنیم.
                              مشکل من اینه که gsm modem خیلی نامنظم دیتا میفرسته و حتمی باید بافر بشه :redface:
                              آخه من چیکار کنم؟
                              دوستان منت بر سر بنده بزارن و جواب بدن :cry2:

                              دیدگاه

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