PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : مشکل در پورت سریال و#c



amin_a_y
18-11-2011, 01:44
سلام دوستان امیدوارم دنیا به کامتون باشه...!:wink:
من یک برنامه با #C برای کامپیوتر نوشتم برای کنترل دو موتور DC...!
من برنامه میکرو رو هم با بسکام نوشتم...!
من برای راه اندازی موتور ها از رشته استفاده می کنم مثلا با فرستادن رشته "w" موتور یک راه اندازی میشه!این کار در Terminal بسکام با تایپ "w" و زدن اینتر به خوبی کار میکنه..!
ولی در #C این طور نیست و عمل اینتر رو با "n\" امتحان کردم نشد ولی با "\r\n" شد!!!
حالا مشکل اینجاست که این کار برای بار اول درست کار میکنه ولی برای بار دوم و سوم و... دیگه نه وقتی رشته ارسالی در مرتبه دوم رو تو LCD دیدم متوجه کاراکتر اضافی "|||" در اول رشته که بار دوم فرستادم شدم!
ممنون میشم من رو راهنمایی کنید.

$regfile = "m16def.dat"
$crystal = 8000000
$baud = 9600
Config Lcdpin = Port , Db7 = Porta.7 , Db6 = Porta.6 , Db5 = Porta.5 , Db4 = Porta.4 , E = Porta.0 , Rs = Porta.1
Enable Interrupts
Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.4 = Output
Config Portd.5 = Output
Portd.2 = 0
Portd.3 = 0
Portd.4 = 0
Portd.5 = 0
Cls
Dim B As Byte
Do
Input B
Locate 1 , 1
Lcd B
Select Case B
Case Back:
Cls
Portd.2 = 1
Portd.3 = 0
Locate 1 , 1
Lcd "Back"
Waitms 50
Case Forword:
Cls
Portd.2 = 0
Portd.3 = 1
Locate 1 , 1
Lcd "Forword"
Waitms 50
Case Lef:
Cls
Portd.4 = 1
Portd.5 = 0
Locate 1 , 1
Lcd "Left"
Case Righ:
Cls
Portd.4 = 0
Portd.5 = 1
Locate 1 , 1
Lcd "Right"
Case Else:
Portd.2 = 0
Portd.3 = 0
Portd.4 = 0

Portd.5 = 0
Locate 1 , 1
Lcd "Waiting ..."
End Select
Loop
End

esisafa
18-11-2011, 02:17
با c# کد asci میفرستین یا نه از کدهای دیگه مثل unicode استفاده میکنین.
یادتون باشه کدهای asci 7 یا 8 بیتی هستن و بقیه 16 بیتی.

کاراکتر ارسال کنین نیازی به \n و \r نیست. فقط کاراکتر بفرستین و دریافت کنین
اگه کد اسکی میفرستین، تو برنامه ی میکرو برای دریافت داده از اینتراپت دریافت داده و بافر استفاده کردین؟؟؟؟ . یا همین جور شانسی دریافت میکنین
منظورم اینه که اگه input b دستور دریافت داده از پورت سریاله از int و buffer استفاده میکنه یا نه

من با بسکام کار نمیکنم و از راه اندازی اون خبر ندارم

ehsanarn
18-11-2011, 10:37
سلام دوست عزیز
تو برنامه بسکام به جای دستور inputاز دستور Waitkey استفاده کن
دیگه نیازی به اینتر نداره
فقط یه چیزی هست شما یه کارکتر را میتونی با این دستور بفرستی
پس باید توی بسکام case را درست کنی
برای مثال برای کلمه back در Caseفقط بنویس b
امیدوارم مشکل تون حل بشه
باز من در خدمتم

amin_a_y
18-11-2011, 12:22
سلام دوست عزیز
تو برنامه بسکام به جای دستور inputاز دستور waitkey استفاده کن
دیگه نیازی به اینتر نداره
فقط یه چیزی هست شما یه کارکتر را میتونی با این دستور بفرستی
پس باید توی بسکام case را درست کنی
برای مثال برای کلمه back در caseفقط بنویس b
امیدوارم مشکل تون حل بشه
باز من در خدمتم

سلام دوست عزیز
ممنون کار کرد ولی روان کار نمی کنه...!

amin_a_y
18-11-2011, 12:22
با c# کد asci میفرستین یا نه از کدهای دیگه مثل unicode استفاده میکنین.
یادتون باشه کدهای asci 7 یا 8 بیتی هستن و بقیه 16 بیتی.

کاراکتر ارسال کنین نیازی به \n و \r نیست. فقط کاراکتر بفرستین و دریافت کنین
اگه کد اسکی میفرستین، تو برنامه ی میکرو برای دریافت داده از اینتراپت دریافت داده و بافر استفاده کردین؟؟؟؟ . یا همین جور شانسی دریافت میکنین
منظورم اینه که اگه input b دستور دریافت داده از پورت سریاله از int و buffer استفاده میکنه یا نه

من با بسکام کار نمیکنم و از راه اندازی اون خبر ندارم
ممنون میشه بیشتر توضیح بدین!

mzarkoob
18-11-2011, 13:18
با سلام
بخشید وسط بحث پارازیت میندازم. این تایپیک را که دیدم یاد یه کاری افتادم در این لینک (You can see links before reply)
با عنوان کنترل رله با AVR و سی شارپ (You can see links before reply)

گفتم شاید به درد بخوره!

esisafa
18-11-2011, 14:07
راه بدون خطا استفاده از اینتراپت دریافت داده و بافر هست
با کدویژن خیلی عالی راه میافته

amin_a_y
18-11-2011, 20:54
حالا با بسکام نمیشه؟

morteza_rk
19-11-2011, 12:45
سلام عزیز جان

با بسکام هم میشه. اون کاراکتری که بصورت ||| مشاهده کردی درواقع کاراکتر LinE Feed هست که میشه سرِ خط خودمون. کد دسیمالش هم عدد 10 هست که اسکیش میشه 00001010 ، این کاراکتر بعداز اولین ارسال به اول ارسالهای بعدی می چسبه تا بگه که رشته ی دریافتی در خط بعدی (سر خط) نمایش داده بشه.

بنابراین شما باید با دستوری مثل MID این کاراکتر رو از اول رشته هات حذف کنی.

mojtaba_sky
24-01-2012, 14:38
با نام یزدان
اگر از inputbin تو بسکام استفاده کنی بهتر نتیجه میگیری. برای این کار باید اینتراپت رسیو تو بسکام تعریف کنین که:


Config Com1 = 1000000 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
On Urxc Dx_resiveint 'RXD0 int
Enable Urxc 'Enable RX0 INT

و

Dx_resiveint:
Inputbin Gparameter_in(rx_temp) , 1
Incr Rx_temp
Return


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

هر جای برنامه اصلی هم که خواستم اطلاعات ارایه رو بخونم بعدش rx_temp رو صفر میکنم که ارایه از اول پر بشه.

موفق باشی.

mojtaba_sky
24-01-2012, 14:40
البته یادم رفت بگم که من با baud برابر 1میلیون بیت که میشه 125کیلو بایت با کامپیوتر ارتباط دارم که حداکثر توان avr هست. برای این کار حتما کریستال باید 16MHz باشه.