PDA

View Full Version : max232 in vb



saz20120
چهارشنبه 19 خرداد 1389, 14:26 عصر
سلام دوستان

میخوام یه برنامه با وی بی بنویسم که وقتی از تراشه ی max232 که به پورت سریال وصل میشه مقدار صفر دریافت میکنه یه تایمر شروع کنه به ثانیه انداختن.باید چیکار کنم؟؟؟؟:ناراحت:

نزدیک یک ساعت داشتم توی انجمن جستجو میکردم.(خواهشا دیگه نگید قبلا بحث شده)

Mehran.GH
چهارشنبه 19 خرداد 1389, 17:22 عصر
دقیقا کجای کار مشکل داری؟

با فرض اینکه 0 یا 1 از طرف میکرو ارسال میشه به pc

1- یک Timer و یک MSComm میندازی رو فرم Vb

برای دریافت دیتا از پورت سریال که کد مثال زیاد هست در نت مثلا این

http://www.activevb.de/tutorials/tut_com/downloads/Com.zip

2- بعد که در این تابع دیتای وارد شده را که به صورت string است دریافت کردی تبدیل می کنی به Integer

3- بعد یک شرط قرار می دی که اگر صفر بود مثلا Timer1.Enabled = True

4- تایمر هم بعد از سپری شدن زمان تعریف شده در Interval یک تابع () Timer1_Timer را صدا می کند که می توانی در این قسمت یک کارهای دیگری که بعد از سپری شدن زمان لازم است انجام شود بنویسی

یک چنین چیزی منظور هست خودت تکمیل کن




Private Sub MSComm1_OnComm()
Dim str As String
Dim num As Integer

Select Case MSComm1.CommEvent
Case comOverrun: MsgBox "Datenverlust!"
Case comRxOver: MsgBox "Datenverlust!"
Case comEvReceive: str = MSComm1.Input
End Select

num = Val(str)

If (num = 0) Then
Timer1.Enabled = True
End If


End Sub



اگر دیتای دریافتی از میکرو فرمت دیگری دارد و نمی توانی فقط صفر و یا یک بفرستی و مثلا یک رشته از صفر و یک هاست که هر کدام معنی یک رله یا چیزی مشابه را دارد و باید جداگانه صفر و یک شود که :

باید maskbit تعریف کنی یعنی مثلا اگر دیتای ورودی به کامپوتر 0000 1000 باشد و می خواهی تشخیص دهی که بیت 8 ست شده یا نه و مثلا بعد تایمر مربوط به رله 8 فعال شود و ....

برای تشخیص , این رشته وارده را با 0000 1000 که اسمش را می گذاریم mask عمل And منطقی انجام می دهی و اگر حاصل یک بود که یعنی بیت 8 ست است و روتین مربوط یه آن را انجام می دهی و اگر حاصل این َAnd منطقی صفر یود یعنی ست نشده و بیتهای بعدی را هم به همین ترتیب چک می کنی.

دیتای ورودی به پورت سریال هم به ترتیب برعکس می آید یعنی در میکرو می فرستی 000 1000 و در Pc دریافت می کنی 0001 000 که باید این را در نظر داشته باشی و کل رشته را بر عکس کنی با توابعی که هست (شاید هم ترتیب دیگری در طراحی انجام دادی بنده اطلاعی از جزییات پروژه ات ندارم اما معمولا این داستان بر عکس شدن اتفاق می افتد!)

اگر مشکل حل نشد دقیق بنویس کدوم قسمت مشکل داری تا دقیقتر بتوان جواب داد.

saz20120
چهارشنبه 19 خرداد 1389, 19:03 عصر
ممنون که راهنمایی کردی.شرمنده که وقتتو میگیرم.

اما من تازه وی بی رو شروع کردم و خیلی کم ازش میدونم.
کاری که من میخوام انجام بدم اینه که خروجی یه رله(وقتی که ارتباط دو پایه برقرار میشه) بدم به یه آی سی max232 که فقط واسم صفر و یک تولید کنه.تا ایجاش تموم شده و عکساش هم میزارم ببینید.

ولی من میخوام که وقتی به پورت کام صفر ارسال شد تایمر ثانیه بندازه و وقتی دوباره یک ارسال شد تایمر بایستد

یه نمونه هم قبلا یکی واسم نوشته بود که نمیدونم چرا کارنمیکنه اونم میزارم


راستی وقتی با برنامه ی basecom-avr تست میکنم و رله رو قطع و وصل میکنم یه سری شکل های نامعلوم بهم نمایش میده

Mehran.GH
چهارشنبه 19 خرداد 1389, 20:42 عصر
این اشکال عجیب موقعی مشاهده می شود که Boaudrate یا سرعت انتقال داده بین دو وسیله یکسان نباشد
در کد ویژوال بیسیک 2400 تعریف شده در Form_load می توانی تغییر بدهی

این خط را

MSComm1.Settings = "2400,N,8,1"

را تبدیل کن به

MSComm1.Settings = "9600,N,8,1"



و در Terminal Emulator بنده یک 115200 می بینم که آن را هم تغییر بده در کد میکرو و هر دو را بذار 9600

اول این را امتهان کن تا کد وی بی را نگاهی بیندازم (البته به نظرم مشکلی ندارد)


نکته 1 : سیگنال قطع و وصل بودن رله را می فرستی به میکروکنترلر و میکرو کنترلر از طریق یک max232 سطح ولتاژ TTL را تبدیل می کند به RS-232 تا برای pc سطح سیگنال قابل فهم باشد و این که نوشتی خروجی یه رله را بدهی به یه آی سی max232 کمی علمی تخیلی بود!

max232 فقط یک level converter در حالی که برای انتقال سریال نیاز به یک کارهای بیشتری است که یک میکروکنترلر باید انجام دهد.


نکته 2 : برای تست اول از یک نرم افزار مثل Hyperterminal که در ویندوز به صورت پیش فرض نصب شده استفاده کن و بررسی کن که :
آیا داده ای که از طرف میکرو می آید درست است یا نه و بعد نرم افزار نوشته شده در وی بی را تست کن. دو بخش جداگانه هستند اینها.