اطلاعیه

Collapse
No announcement yet.

ارتباط دوطرفه بین AVR و کامپیوتر Bascom AVR + VB.NET2010 فقط با USB TO COM

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

    #16
    پاسخ : ارتباط دوطرفه بین AVR و کامپیوتر Bascom AVR + VB.NET2010 فقط با USB TO COM

    سلام آقای چمنی
    برای ارسال داده دقیقا همانطوری که خودتون اشاره کردین باید از activex سریال که در visual studio هست استفاده کنین.برای پیکربندی این اکتیوکس چند تا نکته مهم رو مد نظر داشته باشین

    1-هیچ گاه پورت کامها رو کمتر از 6 تعیین نکنین و کامهای سخت افزاری رو تغییر شماره ندین (یعنی به جای اینکه کام پورت 33 رو یک بگیرین بهتر هست که با همون 33 برای ابتدای کار استفاده کنین

    2-خطای زیر
    Access to the port 'COM1' is denied.
    را بیشتر جایی دریافت می کنین که
    الف:یک برنامه دیگر از این پورت در حال استفاده است
    ب:ریجستر رو به درستی تنظیم نکردین یا بافر سریال از بس پر شده است دسترسی را محدود می کند
    پ:در ویندوز ، خود ویندوز یا سایر برنامه محافظتی دسترسی رو محدود کردن

    برای شروع کار ابتدا کنترل serialport روی سینی visual studio قرار بدین

    حالا یک دکمه قرار بدین و این برنامه رو روی دکمه بنویسین

    کد:
        With SerialPort1
          .BaudRate = 9600
          .Handshake = IO.Ports.Handshake.None
          .StopBits = IO.Ports.StopBits.One
          .Parity = IO.Ports.Parity.None
          .PortName = "Com33"
          Try
            If .IsOpen = True Then .Close()
            .Open()
            MsgBox("Connected")
          Catch ex As Exception
            MsgBox("error")
            MsgBox(Err.Description)
          End Try
        End With
    در ابتدا همون پورت 33 رو من به برنامه معرفی کردم که شما هم سعی کنین بدون تغییر پورت ابتدا ارتباط برقرار کنین و سپس به کارای دیگه برسین
    اگر برنامه کانت نوشت که تا اینجا مشکلی نیست اما اگر خطایی بود مرحله به مرحله در رفع خطا سعی می کنیم
    هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

    دیدگاه


      #17
      پاسخ : ارتباط دوطرفه بین AVR و کامپیوتر Bascom AVR + VB.NET2010 فقط با USB TO COM

      نوشته اصلی توسط hadi_hashemi_85
      مهران جان اینطوری که نمی شه آخه . خودت هم باید یه حرکتی بکنی . من یه برنامه آماده دارم که دو سال پیش توی VB.net نوشتم .اگه می خوای بذارمش . ولی مطمئنم به هیچ دردت نمی خوره . باید خودت از بنا بنویسیش .
      این برنامه پروژه ی کارشناسیم بود . ولی اگه بخوای ازش استفاده کنی صددرصد همون تجربه های قبلی رو می کنی و بعدش میگی خرابه یا اشتباهه . و کار نمی کنه . در ضمن مقاصد تو با اون برنامه ها آماده که گیر میاری فرق می کنن .
      الان از جناب مرتصی رحیمی ( حتما مقالشون رو در این زمینه خوندین ) داشتم حل مشگل میگرفتم
      یه مداری دادن که بعد از کلی زیر و بالا کردن و تغییر دادنش تونستم 3تا LED رو روشن و خاموش کنم
      فقط فایل VB.NET که بهم دادن باز میشه ولی نمیتونم توش دستکاریش کنم
      مشگلم 30% حل شده

      نوشته اصلی توسط hadi_hashemi_85
      دقیقا مشکل تو کجاست . وقتی کامپورتو تو VB تعریف می کنی ، کار میکنه ؟
      باید baud rate و stop bit های کامپیوتر و میکرو یکی باشه .
      مشگل من اینجاس که اصلا و عبدا حتی یه ذره بلد نیستم که با پورت سریال تو vb.net کار کنم.
      1-چه دستورات ثابتی باید اول برنامه بزارم برای معرفی پورت سریال؟
      2-دستورات متغیری که برای ارسال استفاده میشه چیه؟
      3-دستورات متغیری که برای دریافت استفاده میشه چیه؟

      4-از میکرو چطوری adc رو بفرستم و در vb.net دریافت کنم و در صورت امکان مقدار دما رو توی label نمایش بدم ؟
      هنگامی که چیزی مینویسی، کاری نکن تنها کسی که از مغزش استفاده کرده باشد ،مدادت باشد .

      \|/_\/_

      دیدگاه


        #18
        پاسخ : ارتباط دوطرفه بین AVR و کامپیوتر Bascom AVR + VB.NET2010 فقط با USB TO COM

        ایــــــــــــــــول ............ایــــــــــــــــــــــــــــول
        داش baby رو ایول :wow: :wow: :wow:

        ایول ایوله.....داش baby یله

        آفرین داداش...دمت گرم....خدا خیرت بده....خدا از شر مشگلاتت آزاد کنه که به ما کمک کردی...

        ممنونم....آره مسیج باکس پیام کانکت رو داد
        بعد از کانکت اگه دوباره کلید رو بزنم برنامه قفل میکنه چون هنوز کانکت بوده....البته میشه همزمان با باز شدن مسیج باکس بگیم کلید خاموش بشه...




        خوب خوب....بعدش چکار کنم ؟ :bye

        هنگامی که چیزی مینویسی، کاری نکن تنها کسی که از مغزش استفاده کرده باشد ،مدادت باشد .

        \|/_\/_

        دیدگاه


          #19
          پاسخ : ارتباط دوطرفه بین AVR و کامپیوتر Bascom AVR + VB.NET2010 فقط با USB TO COM

          سلام
          خدا رو شکر تا اینجا خوب عمل کردین
          حالا برای ارسال بعد از ایجاد ارتباط با پورت کام ، می بایست از متدهای write کلاس سریال استفاده کنین برای این منظور یک دکمه جدید تعریف کنین

          و در آن دستور زیر رو بنویسین

          SerialPort1.Write("A&quot

          با این دستور کارکتر A برای میکرو ارسال می شود ، پیشنهاد می کنم داده دریافتی رو بعد از دریافت بر روی lcd نمایش بدین تا بدونین که دقیقا در میکرو چه چیزی رو دریافت می کنین

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

          SerialPort1.WriteLine("Hello &quot

          برای پردازش این رشته باید یک رشته رو تعریف و هر کارکتر دریافتی را در آرایه یا در انتهای رشته اضافه کنین

          در این مرحله ببینین که داده رو درست دریافت می کنین یا خیر؟ و دقیقا مشخص کنین که به ازای دریافت کارکتر A مقدار عددی این کارکتر دریافتی چیست
          هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

          دیدگاه


            #20
            پاسخ : ارتباط دوطرفه بین AVR و کامپیوتر Bascom AVR + VB.NET2010 فقط با USB TO COM

            ممنونم ازت baby جان
            آقا خوب مارو راه انداختی دمت گرررررم
            فرم تمرین رو به این صورت طراحی کردم تا ساده تر باشه و قدم قدم پیش بریم:



            فعلا برنامه میکرو هم به این صورت نوشتم :

            کد:
            $regfile "m16def.dat"
            $crystal = 11059200
            $baud = 9600
            
            Config Porta.0 = Input
            Config Porta.1 = Input
            Config Porta.2 = Input
            Config Porta.3 = Input
            
            Config Portc = Output
            
            
            Portc.0 = 0
            
            Porta.1 = 1
            Porta.2 = 1
            Porta.3 = 1
            Porta.4 = 1
            
            Dim New_serial As Bit
            Dim Receive_data As Byte
            
            Enable Interrupts
            Enable Urxc
            On Urxc Receive_label
            
            Portc = &B11111111
            Waitms 500
            Portc = &B00000000
            Waitms 500
            Portc = &B11111111
            Waitms 1000
            Portc = &B00000000
            
            ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            Do
            
            If New_serial = 1 Then
            
              If Receive_data = "a" Then
               Portc = &B00000111
              End If
            
              If Receive_data = "b" Then
               Portc = &B00111100
              End If
            
              If Receive_data = "c" Then
               Portc = &B11100000
              End If
            
              New_serial = 0
              Receive_data = 0
            
            End If
            Loop
            
            ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            Receive_label:
            Receive_data = Udr
            New_serial = 1
            
            Return
            
            End

            برنامه VB.NET رو هم به این صورت نوشتم:

            کد:
            Public Class form1
              Dim Enter As Char = Chr(13)
              Dim aa As String
              Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
                With SerialPort1
                  .BaudRate = 9600
                  .Handshake = IO.Ports.Handshake.None
                  .StopBits = IO.Ports.StopBits.One
                  .Parity = IO.Ports.Parity.None
                  .PortName = "Com33"
                  Try
                    If .IsOpen = True Then .Close()
                    .Open()
                    MsgBox("Connected")
                  Catch ex As Exception
                    MsgBox("error")
                    MsgBox(Err.Description)
                  End Try
                End With
            
                GroupBox1.Enabled = True
                GroupBox2.Enabled = True
                GroupBox3.Enabled = True
                Button1.Enabled = False
            
              End Sub
            
              ''----------------------------------seand----------------------------------------
            
              Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
                SerialPort1.Write("a" + Enter)
              End Sub
            
              Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
                SerialPort1.Write("b" + Enter)
              End Sub
            
              Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
                SerialPort1.Write("c" + Enter)
              End Sub
            
              ''-----------------------------------resive---------------------------------------------
            
              Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
            
                If SerialPort1.ReadLine() = "d" Then
                  CheckBox1.Checked = True
                End If
            
                If SerialPort1.ReadLine() = "e" Then
                  CheckBox2.Checked = True
                End If
            
                If SerialPort1.ReadLine() = "f" Then
                  CheckBox3.Checked = True
                End If
              End Sub
            
            End Class
            اون چند خط آخر که برای رسیو فایل بود رو تقریبا به کمک کتابخونه vb.net بود و بقیش هم من دراوردی :icon_razz:
            درسته یا مشگل داره ؟

            برای ارسال فرمان از میکرو به کامپیوتر چیزی به ذهنم نرسید...این بخششم راهنمایی کنید لطفا....

            در آخر هم به بخش ADC میپردازیم

            ممنووووووووووووووووووووووووون
            هنگامی که چیزی مینویسی، کاری نکن تنها کسی که از مغزش استفاده کرده باشد ،مدادت باشد .

            \|/_\/_

            دیدگاه


              #21
              پاسخ : ارتباط دوطرفه بین AVR و کامپیوتر Bascom AVR + VB.NET2010 فقط با USB TO COM

              سلام آقای چمنی
              فقط چند تا مشکل:
              1-برای رسیو کردن داده توسط تابع SerialPort1_DataReceived باید از روش ریسمانها برنامه نویسی رو تکمیل کنین که این رو بزارین جلوتر بریم بهتون بگم
              2-دستور write تنها برای ارسال یک بایت به کار می رود و بیشتر از آن باید از دستور writeline استفاده کنین
              3-برای ارسال کارکترهای کنترلی باید از دستور chr و عدد ASCII استفاده کنین یعنی برای ارسال کارکتر اینتر باید از جدول اسکی کد آن را پیدا کرده و سپس توسط chr آن را ارسال کنین فرم صحیح به این صورت هست

              SerialPort1.Writeline("b" + chr(13))

              که عدد 13 معادل اسکی اینتر هست البته می تونین از کدهای معادل شده هم استفاده کنین یعنی به جای دستور بالا بنویسین
              SerialPort1.Writeline("b" + vbcrlf)
              4-یک ال سی دی رو به بردتون اضافه کنین تا مرحله به مرحله تست به خوبی جواب بده
              تا اینجا ارسال رو چک کردین؟
              هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

              دیدگاه


                #22
                پاسخ : ارتباط دوطرفه بین AVR و کامپیوتر Bascom AVR + VB.NET2010 فقط با USB TO COM

                نوشته اصلی توسط baby_1
                سلام آقای چمنی
                فقط چند تا مشکل:
                1-برای رسیو کردن داده توسط تابع SerialPort1_DataReceived باید از روش ریسمانها برنامه نویسی رو تکمیل کنین که این رو بزارین جلوتر بریم بهتون بگم
                2-دستور write تنها برای ارسال یک بایت به کار می رود و بیشتر از آن باید از دستور writeline استفاده کنین
                3-برای ارسال کارکترهای کنترلی باید از دستور chr و عدد ASCII استفاده کنین یعنی برای ارسال کارکتر اینتر باید از جدول اسکی کد آن را پیدا کرده و سپس توسط chr آن را ارسال کنین فرم صحیح به این صورت هست

                SerialPort1.Writeline("b" + chr(13))

                که عدد 13 معادل اسکی اینتر هست البته می تونین از کدهای معادل شده هم استفاده کنین یعنی به جای دستور بالا بنویسین
                SerialPort1.Writeline("b" + vbcrlf)
                4-یک ال سی دی رو به بردتون اضافه کنین تا مرحله به مرحله تست به خوبی جواب بده
                تا اینجا ارسال رو چک کردین؟
                سلام صبح بخیر :biggrin:
                1-باشه هروقت وقتش شد بگید.
                2-ممنون متوجه شدم.
                3-ولی همین دستور جواب داد !!! رو برد برد mega16 گذاشتم و 8 تا led به پورت c اون وصل کردم.
                وقتی از کامپیوتر کلید ها رو میزنم همونطوری که برنامه led ها رو دادم ...اونها هم خاموش و روشن میشن و مشگلی نیست !
                پس همین دستور ( SerialPort1.Write("b" + Enter بخوبی داره جواب میده که میشه به نظرم اینطوری هم نوشت:
                SerialPort1.Writeline("b &quot
                چون خود Writeline یک دستور بعد از اینکه b رو فرستاد میفرسته که یعنی همینقدر بوده...
                توی تست اون هم led همزمان با کلید روشن میشد و باز خاموش میشد.
                ولی احتمال میدم توی دستور Write بدون enter دیتا bbbbbbbbb بدون انتها فرستاده بشه و led یکسره روشن بمونه !

                lcd دیگه ندارم و به صرفه هم نیست که تهیه کنم ! شده بیشتر از 9000تومن !

                4- بله مدارم با همون کد ها و formی که براتون گذاشتم کار میکنه و هیچ مشگلی نداره

                ولی یک چیز دیگه تا اینجای کار کم داره
                توی دستورم پورت سریال رو باز و بسته نکردم !!! یعنی نمیدونم کجاها بزارم !
                بهتر نیست وقتی که کاری با مدار نداریم پورت سریال بسته بشه و زمانی که کار داریم باز بشه ؟!

                هنگامی که چیزی مینویسی، کاری نکن تنها کسی که از مغزش استفاده کرده باشد ،مدادت باشد .

                \|/_\/_

                دیدگاه


                  #23
                  پاسخ : ارتباط دوطرفه بین AVR و کامپیوتر Bascom AVR + VB.NET2010 فقط با USB TO COM

                  نوشته اصلی توسط مهران چمنی
                  سلام صبح بخیر :biggrin:
                  1-باشه هروقت وقتش شد بگید.
                  2-ممنون متوجه شدم.
                  3-ولی همین دستور جواب داد !!! رو برد برد mega16 گذاشتم و 8 تا led به پورت c اون وصل کردم.
                  وقتی از کامپیوتر کلید ها رو میزنم همونطوری که برنامه led ها رو دادم ...اونها هم خاموش و روشن میشن و مشگلی نیست !
                  پس همین دستور ( SerialPort1.Write("b" + Enter بخوبی داره جواب میده که میشه به نظرم اینطوری هم نوشت:
                  SerialPort1.Writeline("b &quot
                  چون خود Writeline یک دستور بعد از اینکه b رو فرستاد میفرسته که یعنی همینقدر بوده...
                  توی تست اون هم led همزمان با کلید روشن میشد و باز خاموش میشد.
                  ولی احتمال میدم توی دستور Write بدون enter دیتا bbbbbbbbb بدون انتها فرستاده بشه و led یکسره روشن بمونه !

                  lcd دیگه ندارم و به صرفه هم نیست که تهیه کنم ! شده بیشتر از 9000تومن !

                  4- بله مدارم با همون کد ها و formی که براتون گذاشتم کار میکنه و هیچ مشگلی نداره

                  ولی یک چیز دیگه تا اینجای کار کم داره
                  توی دستورم پورت سریال رو باز و بسته نکردم !!! یعنی نمیدونم کجاها بزارم !
                  بهتر نیست وقتی که کاری با مدار نداریم پورت سریال بسته بشه و زمانی که کار داریم باز بشه ؟!
                  سلام
                  در برنامه ای که شما نوشتین به صورت پیش فرض هر چند بیشتر از یک کارکتر هم به تابع write بدین تنها کارکتر اول رشته ارسال می شود و بابت همین هم هست که دستورتون کار می کند(چون در میکرو هم با اولین کارکتر شروع به پردازش می کنین)
                  برای دریافت :
                  1-ابتدا یک متغییر به صورت سراسری تعریف کنین به عنوان مثال
                  کد:
                  dim b as string
                  2-یک تابع به نام دلخواه ایجاد کنین مثلا
                  کد:
                    Private Sub baby()
                  
                    End Sub
                  این تابع بعد از هر بار دریافت فعال می شود یعنی اگر پردازشی و ... روی داده های رسیده هست باید در این تابع این عملیات رو انجام بدین ، چون من می خوام داده ها در texbox نمایش داده شود پس یک texbox قرار داده و داده ها رو توسط این تابع در texbox می ریزم

                  متغییر سراسری یعنی همون B بیانگر رشته دریافتی از پورت سریال هست(بهتر هست بعد از هر ارسال از سمت میکرو به کامپیوتر در انتهای رشته کارکتر اینتر را جهت شناسایی پایان رشته ارسال کنین

                  پس تابع من شد:
                  کد:
                    Private Sub baby()
                      TextBox1.Text = b
                    End Sub
                  حالا در پایین دستور .open عبارت زیر رو اضافه کنین
                  کد:
                  AddHandler SerialPort1.DataReceived, AddressOf SerialPort1_DataReceived
                  در خصوصیت کنترل serialport به تابع DataReceived بروین و دستورات زیر رو در این تابع اضافه کنین(همین تابع رو به صورت کامل قرار بدین هم نیازی به پیدا کردن تابع مذبور ندارین)
                  کد:
                  Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
                      Try
                        b = SerialPort1.ReadLine
                        Me.Invoke(New EventHandler(AddressOf baby))
                      Catch ex As Exception
                  
                      End Try
                    End Sub
                  تمام شد
                  تنها کار باقی مانده برای ارسال داده از سمت میکرو استفاده از دستور print هست که به عنوان مثال برای ارسال عدد رشته و ... می تونین استفاده کنید به عنوان مثال
                  کد:
                  print "Hello"
                  یا
                  کد:
                  print "123"
                  برای ارسال اینتر هم مثال قبل با دستور chr(13) کارکتر اینتر رو شبیه سازی و آن را ارسال می کنیم یعنی
                  کد:
                  print "Hello";chr(13)
                  که به جای نوشتن رشته می تونین متغییر خودتون رو قرار و ارسال کنین

                  شکل کلی برنامه:

                  کد:
                  Public Class Form1
                    Dim b As String
                    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
                      With SerialPort1
                        .BaudRate = 9600
                        .Handshake = IO.Ports.Handshake.None
                        .StopBits = IO.Ports.StopBits.One
                        .Parity = IO.Ports.Parity.None
                        .PortName = "Com33"
                        Try
                          If .IsOpen = True Then .Close()
                          .Open()
                          AddHandler SerialPort1.DataReceived, AddressOf SerialPort1_DataReceived
                          MsgBox("Connected")
                        Catch ex As Exception
                          MsgBox("error")
                          MsgBox(Err.Description)
                        End Try
                      End With
                  
                    End Sub
                    Private Sub baby()
                      TextBox1.Text = b
                    End Sub
                  
                    Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
                      Try
                        b = SerialPort1.ReadLine
                        Me.Invoke(New EventHandler(AddressOf baby))
                      Catch ex As Exception
                  
                      End Try
                    End Sub
                  End Class
                  هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

                  دیدگاه


                    #24
                    پاسخ : ارتباط دوطرفه بین AVR و کامپیوتر Bascom AVR + VB.NET2010 فقط با USB TO COM

                    سلام
                    ولی یک چیز دیگه تا اینجای کار کم داره
                    توی دستورم پورت سریال رو باز و بسته نکردم !!! یعنی نمیدونم کجاها بزارم !
                    بهتر نیست وقتی که کاری با مدار نداریم پورت سریال بسته بشه و زمانی که کار داریم باز بشه ؟!
                    این حرفتون رو یادم رفت جواب بدم
                    چون پورت سریال از منابع وقفه خاصی برای چک کردن وضعیت خروجی استفاده نمی کند بهتر هست بعد از یکبار کانکت کردن برای هر ارسال پورت رو باز و سپس بسته نکنین اگر تنها قرار هست که برنامه شما اجرا شود پس بهتره پورت کام زیر نظر شما همیشه متصل باشه چون یکدفعه اگر برنامه دیگری پورت کام رو دست زد شما متحمل خطا در حین کار و همچنین افزایش زمان اتصال و ارسال داده نشین
                    هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

                    دیدگاه


                      #25
                      پاسخ : ارتباط دوطرفه بین AVR و کامپیوتر Bascom AVR + VB.NET2010 فقط با USB TO COM

                      ممنونم از توضیحات خوبت

                      baby جان به مشگل خوردم عجـــیب oo:
                      تا دیشب ساعت 2:30 که داشتم روش کار میکردم مدار درست کار میکرد و led ها خاموش و روشن میشد....
                      اصلا مشگلی نبود....
                      ولی الان که مدار رو دوباره بستم خراب شده و کار نمیکنه :eek:

                      چطوری بگم.....
                      مشگل عجیب قریبیه oo:

                      مدار مبدل ارتباط سریال رو به کامپیوتر وصل نمیکنم ولی وقتی از کامپیوتر connect رو میزنم مسیج باکس پیام میده که کانکت شده
                      وقتی هم دستوری میفرستم برنامه همونجا گیر میکنه و با زدن ضربدر form هم بسته نمیشه error هم نمیده !!!

                      حتی وقتی مبدل رو هم وصل میکنم این اتفاق می افته :surprised:

                      مگه اینکه از vb.net شماره com رو عوض کنم که اگه اون شماره با مبدل یکی نباشه مسیج باکس error میده
                      وقتی هم با شماره vb.net یکیش کنم کانکت میشه ولی باز توی همون دستور گیر میکنه


                      Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
                      SerialPort1.Write("a" + Enter)
                      End Sub

                      خداوکیلی این چش شده آخه !
                      هنگامی که چیزی مینویسی، کاری نکن تنها کسی که از مغزش استفاده کرده باشد ،مدادت باشد .

                      \|/_\/_

                      دیدگاه


                        #26
                        پاسخ : ارتباط دوطرفه بین AVR و کامپیوتر Bascom AVR + VB.NET2010 فقط با USB TO COM

                        خدارو شکر فعلا مشگل رو حل کردم
                        مدار درست کار میکنه
                        یه جور کلک زدم به پورت کام :icon_razz:
                        خوب... جالا برم سر دستور دریافت که فرمودید....بعدا نتیجه رو اعلام میکنم ...
                        هنگامی که چیزی مینویسی، کاری نکن تنها کسی که از مغزش استفاده کرده باشد ،مدادت باشد .

                        \|/_\/_

                        دیدگاه


                          #27
                          پاسخ : ارتباط دوطرفه بین AVR و کامپیوتر Bascom AVR + VB.NET2010 فقط با USB TO COM

                          سلام
                          لطفا مجددا برنامه و کد تراشتون رو قرار بدین
                          اگر بتونین واضح تر نیز مشکل رو بگین ان شالله که ببینیم مشکل از کجاست؟
                          هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

                          دیدگاه


                            #28
                            پاسخ : ارتباط دوطرفه بین AVR و کامپیوتر Bascom AVR + VB.NET2010 فقط با USB TO COM

                            این تصویر فرم فعلی:



                            -امکانات انتحاب چند پورت رو توی کومبووباکس براش گذاشتم
                            -فقط در صورت کانکت شدن صحیح اجازه روشن شدن کلید هارو میده
                            -با روشن شدن کلید های دیگر....کلید های اتصال خاموش خواهند شد و کومبوباکس نیز اسمش به connected تغییر میکنه.

                            اینطوری دیگه اگه پورت رو اشتباه بزنیم برنامه قفل نمیکنه
                            همچنین از اتصال کامپیوتر به مدار مطمئن میشیم :nerd:

                            خوب حالا از این سوسول بازی ها بگذریم و بریم سر اصل مطلب :mrgreen:

                            مهندس جان تا همین الان داشتم روی پروژه کار میکردم...
                            وضعیت الان مارو ببین تو تاریکی oo:





                            هزار تا مشگل خوردم ولی ....از آخر تونستم بنامه رو راه بندازم ( فقط با کمک های شما )
                            یک کلید با دستور debounce در بسکام نوشتم ولی کار نکرد....!
                            کد:
                            do
                            debounce pina.0 ,0 , seand sub
                            loop
                            seand:
                            print "baby";chr(13)
                            مجبور شدم اینطوریشون کنم تا زمانی که از کامپیوتر دستوری میاد و led ها روشن میشه....
                            همزمان یه نوشته ای رو بفرسته...
                            به این صورت:
                            کد:
                            Do
                            Debounce Pina.0 , 0 , Me Sub
                            
                            If New_serial = 1 Then
                            
                              If Receive_data = "a" Then
                               Portc = &B00000111
                                 Print "Hellow" ; Chr(13)
                            
                              End If
                            
                              If Receive_data = "b" Then
                               Portc = &B00111100
                                 Print "baby" ; Chr(13)
                            
                              End If
                            
                              If Receive_data = "c" Then
                               Portc = &B11100000
                                 Print "mehran" ; Chr(13)
                            
                              End If
                            خوب بله این جواب داد....
                            زمانی که با کامپیوتر کلید a یا b یا c رو میزنم نوشته هر کدوم در richtextbox1 ظاهر میشه :icon_razz:

                            کد در vb.net که همون کد هایی که فرمودید هست و فقط کمی تغییر دادم....

                            حالا چطور بیام بگم که کلید از pinA.0 اگه برابر 0 شد دستور پرینت مخصوص خودش ارسال بشه؟
                            با IF هم نتونستم !!!
                            راستی.....
                            توی VB هم IF خیلی مشگل داشت....نمیتونستم از این دستور استفاده کنم و اینطوری میشد IF#
                            مشگل چیه !!!


                            این هم کد کامل میکرو :
                            کد:
                            $regfile "m16def.dat"
                            $crystal = 11059200
                            $baud = 9600
                            
                            Config Porta.0 = Input
                            Config Porta.1 = Input
                            Config Porta.2 = Input
                            Config Porta.3 = Input
                            
                            Config Portc = Output
                            
                            
                            Portc.0 = 0
                            
                            Porta.1 = 1
                            Porta.2 = 1
                            Porta.3 = 1
                            Porta.4 = 1
                            
                            Dim New_serial As Bit
                            Dim Receive_data As Byte
                            
                            Enable Interrupts
                            Enable Urxc
                            On Urxc Receive_label
                            
                            Portc = &B11111111
                            Waitms 500
                            Portc = &B00000000
                            Waitms 500
                            Portc = &B11111111
                            Waitms 1000
                            Portc = &B00000000
                            
                            
                            ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
                            Do
                            Debounce Pina.0 , 0 , Me Sub
                            
                            If New_serial = 1 Then
                            
                              If Receive_data = "a" Then
                               Portc = &B00000111
                                 Print "Hellow" ; Chr(13)
                            
                              End If
                            
                              If Receive_data = "b" Then
                               Portc = &B00111100
                                 Print "baby" ; Chr(13)
                            
                              End If
                            
                              If Receive_data = "c" Then
                               Portc = &B11100000
                                 Print "mehran" ; Chr(13)
                            
                              End If
                            
                              If Receive_data = "g" Then
                               Portc = &B00000000
                               Waitms 500
                               Portc = &B11111111
                               Waitms 500
                               Portc = &B00000000
                            
                              End If
                            
                            
                            
                              New_serial = 0
                              Receive_data = 0
                            
                            End If
                            
                            Loop
                            Me:
                            Print "woooow" ; Chr(13)
                            
                            ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
                            Receive_label:
                            Receive_data = Udr
                            New_serial = 1
                            
                            Return
                            
                            End If
                            و این هم کد کامل VB.NET :

                            کد:
                            Public Class Form1
                            
                              Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
                                With SerialPort1
                                  .BaudRate = 9600
                                  .Handshake = IO.Ports.Handshake.None
                                  .StopBits = IO.Ports.StopBits.One
                                  .Parity = IO.Ports.Parity.None
                                  ' .PortName = "Com2"
                                  .PortName = ComboBox1.Text
                                  Try
                                    If .IsOpen = True Then .Close()
                                    .Open()
                            
                                    AddHandler SerialPort1.DataReceived, AddressOf SerialPort1_DataReceived
                            
                                    MsgBox("Connected")
                                    GroupBox1.Enabled = True
                                    GroupBox2.Enabled = True
                                    GroupBox3.Enabled = True
                                    Button1.Enabled = False
                                    ComboBox1.Text = "Conected"
                                    ComboBox1.Enabled = False
                            
                                  Catch ex As Exception
                                    MsgBox("error")
                                    MsgBox(Err.Description)
                                  End Try
                                End With
                              End Sub
                            
                              ''----------------------------------seand----------------------------------------
                            
                              Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
                                SerialPort1.WriteLine("a")
                              End Sub
                            
                              Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
                                SerialPort1.WriteLine("b")
                              End Sub
                            
                              Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
                                SerialPort1.WriteLine("c")
                              End Sub
                              '-------------------------------exit--------------------------------------
                              Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
                                SerialPort1.WriteLine("g")
                                Me.Close()
                              End Sub
                            
                              ''-----------------------------------resive---------------------------------------------
                              Dim bb As String
                            
                              Private Sub baby()
                                RichTextBox1.Text = bb
                              End Sub
                            
                              Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
                                Try
                                  bb = SerialPort1.ReadLine
                                  Me.Invoke(New EventHandler(AddressOf baby))
                                Catch ex As Exception
                            
                                End Try
                            
                              End Sub
                            
                            End Class
                            مهندس baby عزیز خیلی خیلی ازت ممنونم که اینطور با حوصله تمام به من کمک میکنی....
                            واقعا خدا خیرت بده...
                            ممنون

                            هنگامی که چیزی مینویسی، کاری نکن تنها کسی که از مغزش استفاده کرده باشد ،مدادت باشد .

                            \|/_\/_

                            دیدگاه


                              #29
                              پاسخ : ارتباط دوطرفه بین AVR و کامپیوتر Bascom AVR + VB.NET2010 فقط با USB TO COM

                              واااای ADC هم راه انداختم...... :wow:
                              از میکرو مقدار دما رو پرینت میکنم....
                              از طرف میکرو مقدار دما روی TextBox1 نمایش داده میشه
                              برای اینکه به صورت لحظه ای تغییرات دما رو ببینم ....یک تایمر گذاشتم با مقدار 100میلی ثانیه و h رو برای میکرو میفرستم و میکرو هم با دریافت h مقدار دما رو واسه کامپیوتر میفرسته...یعنی هر 100میلی ثانیه مقدار دما تست و نمایش داده میشه :biggrin:
                              شاگرد زرنگی هستم ! نه؟ :nerd:

                              خوب ...حالا که جلو جلو بحث رو انجام دادم ....به یه مشگل هم خوردم که خالی از چشم پوشی نیست :mrgreen:
                              در form من یک عدد RichTextBox1 دارم و یکدونه TextBox1
                              RichTextBox1 در فرم قسمت resive قرار دادم و TextBox1 در بخش ADC
                              (تصویر فرم در پاسخ قبل رو مشاهده کنید )

                              حالا همزمان هم نوشته هایی که از میکرو فرستاده میشه در TextBox1 نشون داده میشه و بعد از اون مقدار دما میاد
                              یعنی تمامی دستورات داخل TextBox1 نمایش داده میشه

                              میخوام این دوتا متمایز از هم باشد....
                              یعنی تنها مقدار دما توی TextBox1 نمایش داده بشه
                              و مقادیر دیگه داخل RichTextBox1
                              همین
                              هرچی دستور به ذهنم رسید نوشتم ولی جواب نداد
                              چه کنیم baby جان؟؟ :cry:
                              هنگامی که چیزی مینویسی، کاری نکن تنها کسی که از مغزش استفاده کرده باشد ،مدادت باشد .

                              \|/_\/_

                              دیدگاه


                                #30
                                پاسخ : ارتباط دوطرفه بین AVR و کامپیوتر Bascom AVR + VB.NET2010 فقط با USB TO COM

                                سلام
                                مشکلات برنامه میکروتون
                                1-برای تعریف یک پورت به صورت ورودی از شکل زیر استفاده می کنن
                                کد:
                                Config PINA.0 = Input
                                این دلیل اصلی در عدم کار کردن پورت به صورت ورودی یا نشان دادن عکس العمل صحیح آن هست
                                2-پورتی که به صورت ورودی تعریف شده است که مقدار خروجی تعیین نمی شود و برای تعیین وضعیت عادی و یا اولیه از مدار خروجی یا با استفاده از pullup یا pulldown یا با مقاومت داخلی میکرو وضعیت آن را تعیین کنین و از دستورات زیر بپرهیزین
                                کد:
                                Porta.1 = 1
                                Porta.2 = 1
                                Porta.3 = 1
                                Porta.4 = 1
                                3-برای دستور Debounce در صورت استفاده از sub باید پرش به تابع کنید و برای پرش به لیبل احتیاج به نوشتن sub ندارین
                                4-من دستورات if شما رو به select case ساده تر کردم که حجم برنامه و ظاهر آن کمتر شود

                                این برنامه میکرو رو تست کنین
                                کد:
                                $regfile "m16def.dat"
                                $crystal = 11059200
                                $baud = 9600
                                
                                Config PINA.0 = Input
                                Config Pina.1 = Input
                                Config Pina.2 = Input
                                Config Pina.3 = Input
                                Config Portc = Output
                                '==========================
                                Dim New_serial As Bit
                                Dim Receive_data As Byte
                                
                                Enable Interrupts
                                Enable Urxc
                                On Urxc Receive_label
                                '===========================
                                Portc = &B11111111
                                Waitms 500
                                Portc = &B00000000
                                Waitms 500
                                Portc = &B11111111
                                Waitms 1000
                                Portc = &B00000000
                                '=============================
                                
                                Do
                                Debounce Pina.0 , 0 , Baby
                                
                                If New_serial = 1 Then
                                
                                Select Case Receive_data
                                Case "a" : Portc = &B00000111 ; PRINT "Hellow" ; Chr(13)
                                Case "b" : Portc = &B00111100 ; PRINT "baby" ; Chr(13)
                                Case "c" : Portc = &B11100000 ; PRINT "mehran" ; Chr(13)
                                Case "g" :
                                Portc = &B00000000
                                Waitms 500
                                Portc = &B11111111
                                Waitms 500
                                Portc = &B00000000
                                End Select
                                
                                New_serial = 0
                                Receive_data = 0
                                End If
                                
                                Loop
                                
                                '====================
                                Receive_label:
                                Receive_data = Udr
                                New_serial = 1
                                Return
                                '===================
                                Baby:
                                Print "woooow" ; Chr(13)
                                Return

                                میخوام این دوتا متمایز از هم باشد....
                                یعنی تنها مقدار دما توی TextBox1 نمایش داده بشه
                                و مقادیر دیگه داخل RichTextBox1
                                همین
                                برای این منظور چندتا کار می تونین انجام بدین
                                1-داده های ارسالی رو بین دو کارکتر مثلا A , B قرار بدین و آن رو برای کامپیوتر ارسال کنین و کامپیوتر با شناسایی یک رشته که هم در آن A , B هست مقدار داده در بین آن را استخراج کند مثلا داده ارسالی به فرمت
                                A65B
                                باشه شما با دستور
                                کد:
                                if instr(bb,"A")>0 and instr(bb,"B")>0 then
                                bb=replace(bb,"A","")
                                bb=replace(bb,"B","")
                                textbox1.text=bb
                                end if
                                وجود دو کارکتر A و B رو شناسایی می کنین و سپس با حذف آن ، باقی رشته رو در قسمت مناسب چاپ کنین البته این ساده ترین روش هست و بهترین روش هم استفاده از خطایابهای CRC32 و نهایتا REgex کردن برای دستیابی به داده نهایی هست اما همین فرم جوابگوی کار شما هست

                                شاگرد زرنگی هستم ! نه؟
                                آقای چمنی چون هفته پر امتحانی رو دارم احتمالا کمتر می رسم ادامه این بحث رو دنبال کنم و چون استعداد خوبی در یادگیری دارین دیگه فکر کنم مشکلی باقی نماند
                                ان شالله که موفق باشین
                                هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

                                دیدگاه

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