اطلاعیه

Collapse
No announcement yet.

ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

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

    #61
    پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

    این کاری هست که میخوام انجام بدم: :mrgreen:

    من میخوام یک کد 8 بیتی رو از پورت rs232 به میکرو ارسال کنم همین :redface:
    حالا اینکه این کد چی باشه میخوام از vb استفاده کنم

    یعنی مثلا تو vb برنامه بنویسم که اکر روی command1 کلیک شد
    مثلا کد 10010001 رو بفرست به rs232 و میکرو هم دقیقا همین کد رو دریافت کنه :agree:
    :question:سوال اول اینه که چطور از ظریق vb همچین کدی بنویسم؟
    (یعنی همون کد رو بفرسه نه اسکی)
    :question:سوال دوم این که به نظرت بهتره که از کدوم حالت استفاده کنم؟(سخت افزاری یا نرم افزاری؟)
    :question: یه سوال دیکه اینکه تو دستور زیر:
    Config Serialin = Buffered , Size = 20
    enable interrupts
    وقتی میدونیم که کدمون 8 بیتی هست چرا سایز رو 20 مینویسیم؟
    :question:این دستور رو وقتی نرم افزاری هست هم میتونیم بنویسیم یا فقط واسه سخت افزاری ؟

    دیدگاه


      #62
      پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

      آقا ... اذیت میکنی ...

      میگم کد در قالب اسکی ... یعنی اگه میخوای عدد 200 رو بفرستی بهتره اینجوری بفرستی:

      dim ss as string
      dim a as byte
      a=200
      ss=str(a)
      MSComm1.Output=ss

      نه بنویسی:
      MSComm1.Output=chr(200)

      توی دریافت هم مینویسی :

      dim ss as string*10
      input ss
      lcd ss

      یه چیز تو این مایه ها
      به وبلاگم سر بزنید

      دیدگاه


        #63
        پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

        سلام احسان
        این درس و مشق مگه میذاره ادم یه نفس راحت بکشه :cry:
        اول اینکه وقتی از دستور chr (50)d استفاده می کنید .کاراکتر مربوط به کد 50 توی جدول کاراکتر ا****** براتون ارسال می شه یعنی یه کاراکتر ارسال می کنه براتوون ..ودر نهایت اینکه تابع chr می تونه از 0 تا 255 رو قبول کنه که معادل کاراکتری اون رو می تونید توی bascom کلیک راست کنید توی اخرین گزینه که زده ascii ببینید
        حالا اگه بزنید فقط 54 خود مقدار 54 رو ارسال می کنه
        با عرض پوزش از اقای alitaroosheh اینکه شما ورودی com1 رو به صورت binary و نرم افزاری تعریف کردید ..واین هیچ ربطی به interrupt ورودی شما نداره که نرم افزاری با شه یا سخت افزاری ..چون در هر صورت شما خود com1 رو به صورت نرم افزاری تعریف کردید ..نه پورت دیگه ای رو پس از interrrupt اون هم می تونید استفاده کنید ..من همین الان رو به روم یه برد با همین روش در حال انجام وظیفه است بدون هیچ خطائی

        اقا احسان اول برای اینکه از جهت درست بودن ارتباطمون با میکرو خیالمون راحت باشه یه دونه کریستال خارجی حتما" استفاده کن .و اگه 11.059200 باشه از جهت درست بودن دیتا مطمئن می شوییییییییییییییییییییییییییییم :redface:

        مرحله ی بعد اینه که مطمئن بشیم max232 رو توی مدار درست بستید ..یه نیگا بکن ببین خازن ها رو درست گذاشتید

        مرحله ی بعد اینه که برنامه باید اصولی نوشته بشه . یعنی اینکه بر نامه میکرو این طور باشه بهتره
        $regfile = "M32def.dat "
        $crystal = 11059200
        $baud = 9600
        Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
        Config Lcd = 16 * 2

        Dim F As Byte
        dim r as byte
        Enable Interrupts
        On Urxc Computer
        Enable Urxc

        Open "com1:9600,8,n,1" For Binary As #2
        cls
        do

        if r=1 then
        cls
        home
        lcd "hellooooooo"
        r=0
        end if

        if r=2 then
        cls
        home
        lcd "byeeeeeeee"
        r=0
        end if

        if r=3 then
        cls
        home
        lcd "ronak is good"
        r=0
        end if



        loop
        end
        Computer:
        F = Udr
        Disable Urxc
        if f= 50 then
        r=1
        elseif f=60 then
        r=2
        elseif f=20 then
        r=3
        end if
        Enable Urxc
        Return
        اگه این کار ها رو که گفتم انجام بدی 100 در 100 جواب می گیری
        وقتی از این جواب گرفتی می ریم طرف ار سال 10 تا بایت

        دیدگاه


          #64
          پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

          سلام...
          یه برنا مه با vb برات نوشتم که یه بایت بهش می دی اونم برات bit به bit می فرسته اینم cod



          Dim bit(8) As Byte
          Dim com_number As Integer
          Dim i As Long
          Dim number_bit As Integer

          Private Sub Command1_Click()

          If number_bit <> 0 Then
          For i = 1 To number_bit
          MSComm1.Output = Chr(bit(i))
          Next
          End If

          End Sub

          Private Sub Command2_Click()
          var = CStr(Text1.Text)
          number_bit = Len(var)
          Text10.Text = number_bit
          If number_bit <> 0 Then
          For i = 1 To number_bit
          If Mid(var, i, 1) <> 0 And Mid(var, i, 1) <> 1 Then
          MsgBox "Please enter 0 or 1 "
          Mid(var, i, 1) = 0
          End If
          bit(i) = Mid(var, i, 1)
          Next
          End If
          Text2.Text = bit(1)
          Text3.Text = bit(2)
          Text4.Text = bit(3)
          Text5.Text = bit(4)
          Text6.Text = bit(5)
          Text7.Text = bit(6)
          Text8.Text = bit(7)
          Text9.Text = bit(8)

          End Sub


          Private Sub Command3_Click()
          com_number = Combo1.ListIndex + 1
          MSComm1.CommPort = com_number
          MSComm1.PortOpen = True
          MSComm1.Settings = "9600,n,8,1"

          End Sub

          Private Sub Form_Load()
          Combo1.ListIndex = 0
          End Sub

          دیدگاه


            #65
            پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

            راستی این روش که اقای alitaroosheh گفتند .به این صورت،،، به هیچ وجه ارتباط ایمن و صنعتی نیست ......
            اول این که حد اقل برای استفاده از input باید از interrupt ورودی استفاده کنیم .تا مشخص بشه اصلا" داده ای ارسال می شه که ما بگیریمش
            و بدون دلیل توی حلقله ی اصلی نباید input رو قرار بدیم .یا اصلا" می خوایم که با ترمینال کار کنیم که در اون صورت هم از input همراه با دستور استفاده می کنیم Input "Use this to ask a question " , V
            در هر صورت به نظر من وقتی که قراره ما از کامپیوتر دیتا برای فرمان بگیریم .نه برای مونیتورینگ باید از interrupt استفاده کنیم تا به روند برنامه داخل میکرو اسیبی نرسه
            چون میکرو قرار نیست فقط دیتا دریافت کنه .قراره بر اساس دیتایی که میگیره کاری رو انجام بده
            از نظر قابل انجام بودن هم قابل انجام هست چون من با استفاده از همین روش 6تا atmega128 رو با هم شبکه کردم . که با کمترین نرخ خطا در حال کار هستند

            دیدگاه


              #66
              پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

              راستی احسان اگه خواستی از روشی که من می گم استفاده کنی بگو تا یه فکری به حال دریافت اطلاعات طرف میکرو هم بکنم .
              در ضمن بیشتر اگه توضیح بدی برنامه ای رو که می خوای مینویسم میذارم ..بعدش خودت خواستی اصلاحش کن ..
              در مورد برنامه ی vb هم اگه کامل متوجه نشدی بگو اصل برنا مه رو بذارم

              دیدگاه


                #67
                پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

                نوشته اصلی توسط روناک
                راستی احسان اگه خواستی از روشی که من می گم استفاده کنی بگو تا یه فکری به حال دریافت اطلاعات طرف میکرو هم بکنم .
                سلام روناک
                واقعا نمیدونم چطور تشکر کنم
                من از روش شما استفاده میکنم :agree:
                تو مرحله اول هدفم اینه که اطلاعات رو صحیح به میکرو بدم با برنامه زیر:
                نوشته اصلی توسط احسان *


                (پایه tx پورت rs232 رو به پایه 13 max232 زدم و پایه 12 max232 رو به پایه 14 میکرو یعنی rx زدم)

                ولی بازم مشکل دارم :angry: :angry: :angry:

                برنامه vb به صورت زیر هست :

                Private Sub Command1_Click()
                MSComm1.Output = Chr(20)
                End Sub

                Private Sub Command2_Click()
                MSComm1.Output = Chr(40)
                End Sub

                Private Sub Form_Load()
                MSComm1.CommPort = 1
                MSComm1.PortOpen = True
                MSComm1.Settings = "9600,n,8,1"
                End Sub

                برنامه میکرو هم اینه :

                $regfile = "M32def.dat "
                $crystal = 1000000
                $baud = 9600
                Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
                Config Lcd = 16 * 2

                Dim F As Byte

                Enable Interrupts
                On Urxc Computer
                Enable Urxc

                Open "com1:9600,8,n,1" For Binary As #2

                Computer:
                F = Udr
                Disable Urxc
                Cls
                lcd f
                Enable Urxc
                Return

                میخوام هر چی میگیره رو lcd نشون بده

                مشکل اینه که هر بار که command1 یا command2 رو میزنم رو lcd یه چیز متفاوت نشون میده

                یعنی مثلا بار اول که command1 رو میزنم رو lcd مینویسه 132 بعد command2 رو میزنم مینویسه 148 حالا دوباره command1 رو میزنم مینویسه 152
                برنامه اصلی که تو vb میخوام رو بعد از این مرحله روش کار میکنم(با همکاری شما)
                فعلا تو مرحله اول میخوام مشکل زیر رو رفع کنم:

                نوشته اصلی توسط احسان *
                میخوام هر چی میگیره رو lcd نشون بده

                مشکل اینه که هر بار که command1 یا command2 رو میزنم رو lcd یه چیز متفاوت نشون میده

                یعنی مثلا بار اول که command1 رو میزنم رو lcd مینویسه 132 بعد command2 رو میزنم مینویسه 148 حالا دوباره command1 رو میزنم مینویسه 152
                اون کارایی که گفتین (کریستال خارجی و تصحیح برنامه دریافت تو میکرو) رو انجام میدم و نتیجشو میگم
                خواهش میکنم تو این یکی دو روزه به تاپیک سر بزنین
                اگه چیزی به فکرتون رسید لظفا بگین

                دیدگاه


                  #68
                  پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

                  در مورد مدار هم:
                  نوشته اصلی توسط احسان *
                  حالا max232 استفاده کردم (پایه tx پورت rs232 رو به پایه 13 max232 زدم و پایه 12 max232 رو به پایه 14 میکرو یعنی rx زدم)
                  4 تا خازن هم مثل کتاب کاهه وصل کردم
                  همش 22 میکرو
                  vcc=5
                  همین!!!!
                  کریستال رو داخلی استفاده کردم که حالا همون 11059200 قرار میدم و نتیجه رو تا شب می گم

                  دیدگاه


                    #69
                    پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

                    احسان اول اینکه پیشنهاد: :biggrin: مدار مربوط به rs232 رو فعلا" کامل ببند (نه اینکه فقط برای ارسال ) بعد از این که مدار رو تست کردید و از همه جهت خیالمون راحت شد اون موقع اگه خواستی مدار رو ناقص کن :biggrin:
                    بعد هم که از کریستال خارجی استفاده کردی ..حتما" دوتا خازن 33p رو براش بزار
                    در اخر هم اینکه توی قسمت فیوز بیت ها باید 101111:Ext. Crystal/Resonator High Freq.; Start-up time: 16K CK + 4 ms; [CKSEL=1111 SUT=10] رو انتخاب کنید :agree:
                    من مدار رو همین حالا بستم البته با max485 و کاملا" درست کار میکنه بدوووووووووووووووووووووووووووووون هیچ خطا یی :biggrin:
                    راستی برای تغذیه قطعات روی مدارت lمثل lcd خازن 100n مولتی لایر
                    برای تغذیه اصلی مدار رگولاتور استفاده کن از سوییچینگ استفاده نکن اینایی که توی بازار هست خیلی روی مدار نویز میندازه .حتما" از ترانس استفاده کن
                    چهار گوشه ی پل دیود چهار ت خازن 100n مولتی لایر بذار
                    قبل بعد از رگولاتور حتما" دو تا خازن با ظرفیت بالا بذار اگه حوسلم شد شماتیک برات می ذارم
                    توی مدارایی که می خوای از rs232 یا rs485 یا........................ استفاده کنی تغذیه خیلی مهمههههههههههههههههههه :redface:

                    دیدگاه


                      #70
                      پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

                      سلام روناک
                      شما کدوم برنامه رو جواب گرفتین؟(کدوم برنامه میکرو و کدوم برنامه vb )

                      دیدگاه


                        #71
                        پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

                        اول اینکه من lcd کاراکتری ندارم برای همین توی این برنامه ارتباط رو چک کردم
                        $regfile = "M64def.dat "
                        $crystal = 11059200
                        $baud = 38400
                        $baud1 = 38400

                        Dim F As Byte
                        Dim R As Integer

                        Config Portc = Output
                        Config Pinf.2 = Output
                        Config Pinf.3 = Output

                        Sa Alias Portc.0
                        Sb Alias Portc.1
                        Sc Alias Portc.2

                        Open "com1:38400,8,n,1" For Binary As #2

                        Enable Interrupts
                        On Urxc Comp
                        Enable Urxc



                        do

                        If R = 1 Then
                        Set Sa
                        Reset Sb
                        Reset Sc
                        end if

                        If R = 2 Then
                        Reset Sa
                        Set Sb
                        Reset Sc
                        end if

                        If R = 3 Then
                        Reset Sa
                        Reset Sb
                        Set Sc

                        End If

                        Loop

                        End

                        Comp:

                        F = Udr
                        Disable Urxc
                        If F = 50 Then
                        R = 1
                        Elseif F = 51 Then
                        R = 2
                        Elseif F = 52 Then
                        R = 3
                        end if
                        Enable Urxc

                        Return
                        این برنامه باید جواب بده چون همین الان جلو روی من داره جواب میده با max485 و atmega64
                        برای vb هم همون برنامه که خودت گذاشتی ارسال با chr
                        توی این برنامه من به جای baud 9600 از 38400 استفاده کردم که با این شرایط هم جواب می ده
                        شک ندارم از نظر سخت افزاری بردت ایراد داره
                        برنامه ها هیچ مشکلی ندارند :biggrin: :biggrin: :biggrin: :biggrin: :biggrin:
                        حالا پیدا کنید خربزه فرووش را

                        دیدگاه


                          #72
                          پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

                          اقا احسان این برنامه که گذاشتم رو دقیقا" همین طور بدون lcd تست کن .بعد ولتاژ پایه های c رو چک کن ببین set می شند .وقتی برا میکرو دیتا می فرستی .اگه هم به vb شک داری بگو تا اصل برنامه رو برات بزارم
                          شب بخیر
                          فردا صبح یه سر می زنم
                          پیروز باشی

                          دیدگاه


                            #73
                            پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

                            نوشته اصلی توسط روناک
                            حالا پیدا کنید خربزه فرووش را
                            پرتقال فروشو که هر چی گشتم پیدا نکردم ولی ایشالا خربزه فروشو حتما پیداش میکنم
                            شما هم اگه پیداش کردین خبر بدین :applause:

                            شب بخیر

                            دیدگاه


                              #74
                              پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

                              من نمیدونم چرا جواب نمیده :cry2:

                              این برنامه vb هست:

                              Private Sub Command1_Click()
                              MSComm1.Output = Chr(20)
                              End Sub

                              Private Sub Command2_Click()
                              MSComm1.Output = Chr(50)
                              End Sub

                              Private Sub Command3_Click()
                              MSComm1.Output = Chr(60)
                              End Sub

                              Private Sub Form_Load()
                              MSComm1.CommPort = 1
                              MSComm1.PortOpen = True
                              MSComm1.Settings = "9600,n,8,1"
                              End Sub

                              فکر نکنم ساده تر از این برنامه وجود داشته باشه

                              اینم برنامه میکرو :

                              $regfile = "M32def.dat "
                              $crystal = 11059200
                              $baud = 9600
                              Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
                              Config Lcd = 16 * 2

                              Dim F As Byte
                              Dim R As Byte
                              Enable Interrupts
                              On Urxc Computer
                              Enable Urxc

                              Open "com1:9600,8,n,1" For Binary As #2
                              Cls
                              Do

                              If R = 1 Then
                              Cls
                              Home
                              Lcd "hellooooooo"
                              R = 0
                              End If

                              If R = 2 Then
                              Cls
                              Home
                              Lcd "byeeeeeeee"
                              R = 0
                              End If

                              If R = 3 Then
                              Cls
                              Home
                              Lcd "ronak is good"
                              R = 0
                              End If
                              If R = 4 Then
                              Cls
                              Home
                              Lcd "nothing" ; F
                              R = 0
                              End If




                              Loop
                              End
                              Computer:
                              F = Udr
                              Disable Urxc
                              If F = 50 Then
                              R = 1
                              Elseif F = 60 Then
                              R = 2
                              Elseif F = 20 Then
                              R = 3
                              Else
                              R = 4
                              End If
                              Enable Urxc
                              Return

                              نتیجه اینکه :همیشه r=4 هست و وقتی میخواد f رو نشون بده به ترتیب زیر هست :

                              وقتی command1 رو بزنیم روی lcd مینویسه : nothing 249
                              وقتیcommand2 رو بزنیم روی lcd مینویسه : nothing 250
                              وقتی command3 رو بزنیم روی lcd مینویسه : nothing 251

                              :angry: :angry: :angry: :angry:

                              نکته جالب اینکه اکر برنامه vb رو یه تغییر جزیی زیر بدیم :

                              Private Sub Command1_Click()
                              MSComm1.Output = Chr(180)
                              End Sub

                              Private Sub Command2_Click()
                              MSComm1.Output = Chr(190)
                              End Sub

                              Private Sub Command3_Click()
                              MSComm1.Output = Chr(250)
                              End Sub

                              Private Sub Form_Load()
                              MSComm1.CommPort = 1
                              MSComm1.PortOpen = True
                              MSComm1.Settings = "9600,n,8,1"
                              End Sub

                              نتایج به صورت زیر میشه که از قبلیه عجیب تره :angry:

                              وقتی command1 رو بزنیم روی lcd مینویسه : nothing 255
                              وقتیcommand2 رو بزنیم روی lcd بازم مینویسه : nothing255
                              وقتی command3 رو بزنیم روی lcd مینویسه : nothing 254

                              دیدگاه


                                #75
                                پاسخ : ویژوال بیسیک و ارتباط کامپیوتر (پورتrs232) با میکرو

                                اصلا یه سوال بنیادی :

                                وقتی مینویسیم MSComm1.Output = Chr(20)
                                و کد اسکی 20 رو میفرستیم
                                بعد تو میکرو متغیر f تعریف کردیم
                                تو متغیر f مقدار udr هست
                                سوال اینکه تو udr چی هست ؟
                                همون 20 یا معادل hex کد اسکی 20 (که میشه 14)
                                اصلا وقتی مینویسیم MSComm1.Output = Chr(20)
                                8 بیت udr چی هستن ؟

                                دیدگاه

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