PDA

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



leylijoon
18-08-2012, 09:06
سلام دوستان من میخوام یک کلیدی رو که به یک پین میکرو متصل کردم بخونم و اگر 1 شد عدد 1 رو ارسال کنم از طریق سریال به میکرو دیگر
حالا تو گیرنده چی بنویسم که دقیقا همون عدد رو بخونه؟؟
if pinb.0=1 then print 1

تو گیرنده
a=inkey
if a=1 then port c.1=1
ولی نمیشه

leylijoon
18-08-2012, 16:07
دوستان لطفا مرا یاری دهید

shayanmelody
18-08-2012, 22:15
سلام
موقع كامپايل ازت خطا ميگيره ؟ چون ايني كه الآن نوشتي صحيح نيست

leylijoon
18-08-2012, 22:38
نه خطا نگرفته ازم
شما صحیحشو راهنمایی کنید لطفا

من توگیرنده میخوام دقیقا اون چیزی که فرستادم بخونم مثلا 1 فرستادم توگیرنده بگم if a=1 then folan ولی نمیشه باید بگم if a>0 then folan این و قبول میکنه

shayanmelody
18-08-2012, 22:57
اين واس فرستنده :



do
while pinb.0=1
print "1"
wend
loop
اينم برا گيرنده :




dim a as string*1
do
input a
if a="1" then portc.1=1
loop
به همين راحتي :0013:

leylijoon
19-08-2012, 21:08
سلام سوال اول رو چه حساب string ضربدر 1 کردی ؟؟؟بخاطر طول رشته اس؟؟
من تو برنامم به این شکل نوشتم تو ترمینال مجازی پروتوسم نشون میده ولی تو گیرنده عمل نمیکنه یعنی با گرفتن اون عدد عملیات خواسته شده رو انجلم نمیده....

agape
19-08-2012, 22:11
سلام دایی جان - قطعا برنامه درست و چیز خاصی نداره که نخواد جواب بده - احتمال میدم که گیرنده شما به دلیل داده رو دریافت نمی کنه - فیوز بیت ها و فرکانس کاری رو حتما چک کن و البته اتصالات مدار رو

leylijoon
20-08-2012, 14:04
فرکانسم 12 مگاهرتز کریستال خارجیه
فیوز بیتم رو 1111 گذاشتم
گیرندمم خروجی رو میگیره ولی دستور شرط رو اجرا نمیکنه

من print "1" رو میفرستم ولی توگیرندهinput a
if a="1" then portb.0=1 رو انجام نمیده
حتما باید بگم if a>0 then portb.0=1 اینو اجرا میکنه
من میخام دقیقا رو چیزی که فرستادم مانور بدم

agape
20-08-2012, 14:45
خوب شما اول فرستنده رو وصل کن به کامپیوتر ببین کارکتر 1 رو ارسال میکنه یا نه - که حداقل از یه طرف ماجرا مطمئن باشی ! در ضمن تو برنامه حتما مقدار کریستال و نرخ ارسال (باوود) رو ست کن - بیسکام کار نکردم و نمی دونم دقیقا چی میشه و چطوری باید ستش کرد ولی فکر کنم


$baud
$crystal

باشه

leylijoon
20-08-2012, 14:52
این هارم که انجام دادم
تو کامپیوترم ارسال نمیشه چون دارم با لب ویو میخونم که اونم ارور میده

agape
20-08-2012, 14:56
چرا از هایپرترمینال یا tera term استفاده نمیکنی برای نمایش داده دریافتی از طریق سریال
پس با این حساب که داده ای رو از کامپیوتر دریافت نمیکنی حتما یه جای کار میلنگه !
در ضمن برای اتصال میکرو به کامپیوتر باید از مطابقت دهنده سطح استفاده کنی مثل max232اینو که گذاشتی حتما و ترتیب پایه ها رو رعایت کردی دیگه

sadmonew
20-08-2012, 16:54
فرکانسم 12 مگاهرتز کریستال خارجیه
سلام مهندس
دست دوستان درد نكنه كه اون چيزايي كه لازم ميشده رو گفتن.
فقط يه نكته ديگه:
اگه ميخواين تو ارتباط سريال ديتايي كه ارسال/دريافت ميكنيد بدون خطا باشه بهتره از كريستال هايي با فركانس هاي 11.0592 يا 14.7456 يا 7.3728 مگاهرتز استفاده كنيد.

leylijoon
20-08-2012, 17:55
سلام مهندس
دست دوستان درد نكنه كه اون چيزايي كه لازم ميشده رو گفتن.
فقط يه نكته ديگه:
اگه ميخواين تو ارتباط سريال ديتايي كه ارسال/دريافت ميكنيد بدون خطا باشه بهتره از كريستال هايي با فركانس هاي 11.0592 يا 14.7456 يا 7.3728 مگاهرتز استفاده كنيد.


hyper terminal که تو ویندوز7 ندارم
tera term هم نمی دونم چیه ..
بله از 11.0592 استفاده می کنم
من دیتا هام رو وصل کردم به یک مبدل سریال به یو اس بی که تو فروشگاه سایت هست و بعد اومدم دیتا هام رو ببینم

ok????
از tx میکرو به پایه 3 و زمینشم که به پایه 5 مبدل

leylijoon
21-08-2012, 00:05
دوستان من یکسره پا کامم یکی یه لطف کنه

agape
21-08-2012, 01:56
خوب دوست من شما عینا دو تا پروژه رو بذار ببینیم چکار کردی و چی به چی هست
البته اگه بتونی یه مداری هم از اونچه بستی رو قرار بدی عالی میشه

leylijoon
21-08-2012, 09:50
You can see links before reply
این فایلش که براتون گذاشتم لطف کنید بررسی کنید

morteza_rk
21-08-2012, 14:56
سلام

با تشکر از همه ی دوستانی که به این دوست عزیزمون کمک کردن.

قضیه از این قراره : باز دل من دوباره.... اِ... اِ... اِ... قاطی کردما!!؟

در هنگام ارسال متغیر یا بایت توسط دستور Print دو کاراکتر اینتر و لاین فید هم ارسال میشه! (بطور پنهان) وقتی شما در طرف گیرنده بایت ارسالی رو دریافت می کنید درواقع فقط دارید لاین فید رو دریافت می کنید! چون کاراکتر لاین فید (که کد دسیمالس 10 هست) به ابتدای بایت ارسالی چسبیده و انتهای بایت ارسالی هم کاراکتر اینتر (که کد اسکیش 13 هست) چسبیده! درواقع اون چیزی که شما دریافت می کنید دقیقا همون چیزی که ارسال کردید نیست! بلکه یه سری متعلقات هم داره.

البته توجه داشته باشید که این نوع ارسال اصلا یک ضعف نیست و با هایپر ترمینال یا ترمینال بسکام و حتی ترمینال کدویژن کاملا همخوانی داره. حتی توی برنامه های ویژوالی که می نویسید هم مشکلی پیش نمیاد.

حالا برای رفع این حالت باید در انتهای دستور Print از کاراکتر ; استفاده کنید. در اینصورت دیگه کاراکتر های لاین فید و اینتر به ابتدا و انتهای بایت ارسالی شما نمی چسبن!

مثال : ;Print 1 به همین راحتی

شما تا اینجارو تست کن و نتیجه رو بگو تا بعدا بیشتر راجع بهش بحث کنیم.

leylijoon
21-08-2012, 17:20
ممنون برار
ولی من متغییر رو تو فرستنده string تعریف کردم حالا تبدیل به بایت کنم و بگم

print 1;
و تو گیرنده متغییر رو از جنس byte تعریف کنم وبگم

if a=1 then folan....
درسته؟؟
برای من این مهمه که با زدن کلید تو فرستندم یک چیزی برام به میکرو گیرنده بفرسته که بفهمم کلیده اونو زده شده
همین

shayanmelody
21-08-2012, 17:50
سلام
ببين دوست عزيز ، وقتي كه شما مينويسي print 1 مياد كد اسكي 1 كه فكر كنم 46 باشه (اصلا مطمئن نيستم كه چنده) بعدش شما تو گيرنده نوشتي كه if a=1 ! خوب به هيچ وجه اين شرط برقرار نميشه !‌
ساده ترين راه براي حل مشكل شما اين هست كه بياي از رشته استفاده كني ،‌ همون برنامه اي كه تو صفحه قبل قرار دادم
براي محكم كاري بيا قسمت گيرنده يه ال سي دي بزار ببين وقتي كه كيليد زده ميشه رو ال سي دي چي نشون ميده
اميدوارم ديگه اينقدر دور خودت نپيچي :wink:

leylijoon
21-08-2012, 19:47
حاجی به پیر به پیغمبر منم همون کارو کردم
ولی ال سی دی پیشنهاده خوبیه
:wink:

leylijoon
21-08-2012, 21:36
یعنی هوس سقوط آزاد از طبقه چهارمو کردم:unh:


آقا ال سی دی گذاشتم ورودیمو با دستور input گرفتم که فقط صفر نشون میداد یک وفرستادم اصلا نشون نمیداد
متغییرم از نوع byte و string تعریف کردم
بعد اومدم با waitkey گرفتم رو ال سیدی واسه خودش 13 و 56و10 اینا رو نشون میداد که تند تند هم عوض میشد

عیب کار اومد دستم
باید کاری کرد که 1 بدم 1 بگیرم

leylijoon
21-08-2012, 22:08
سلام

با تشکر از همه ی دوستانی که به این دوست عزیزمون کمک کردن.

قضیه از این قراره : باز دل من دوباره.... اِ... اِ... اِ... قاطی کردما!!؟

در هنگام ارسال متغیر یا بایت توسط دستور Print دو کاراکتر اینتر و لاین فید هم ارسال میشه! (بطور پنهان) وقتی شما در طرف گیرنده بایت ارسالی رو دریافت می کنید درواقع فقط دارید لاین فید رو دریافت می کنید! چون کاراکتر لاین فید (که کد دسیمالس 10 هست) به ابتدای بایت ارسالی چسبیده و انتهای بایت ارسالی هم کاراکتر اینتر (که کد اسکیش 13 هست) چسبیده! درواقع اون چیزی که شما دریافت می کنید دقیقا همون چیزی که ارسال کردید نیست! بلکه یه سری متعلقات هم داره.

البته توجه داشته باشید که این نوع ارسال اصلا یک ضعف نیست و با هایپر ترمینال یا ترمینال بسکام و حتی ترمینال کدویژن کاملا همخوانی داره. حتی توی برنامه های ویژوالی که می نویسید هم مشکلی پیش نمیاد.

حالا برای رفع این حالت باید در انتهای دستور Print از کاراکتر ; استفاده کنید. در اینصورت دیگه کاراکتر های لاین فید و اینتر به ابتدا و انتهای بایت ارسالی شما نمی چسبن!

مثال : ;Print 1 به همین راحتی

شما تا اینجارو تست کن و نتیجه رو بگو تا بعدا بیشتر راجع بهش بحث کنیم.
آقا من این حرکتو تست کردم انگار کل کاراکتر ارسالیو غیب میکنه
فکر میکنم اون مورد که شما میگی برا میکرو هم مثل اون برنامه ها
حالا جالبه من دستور printbin رو نوشتم و تو گیرنده با waitkey خوندم که درست شد و دقیقا اونچه که ارسال کردم رو دریافت کردم

shayanmelody
21-08-2012, 22:39
شما فعلا تو قسمت فرستنده اصلا با كليد كار نكن ،‌يه عدد رو بفست كه اونور هم همون عدد رو بگيري

واس شروع هر دو ميكرو رو روي فركانس داخلي 1 مگ تنظيم كن و باودريت هم بزار روي 2400
يكسان بودن باود ريت ها و برابر بودن فركانسي كه تو برنامه مينويسيد با فيوزبيت ها خيلي خيلي مهمه
از اين قسمت آخر شما مطمئني ؟!‌

leylijoon
22-08-2012, 00:20
شما فعلا تو قسمت فرستنده اصلا با كليد كار نكن ،‌يه عدد رو بفست كه اونور هم همون عدد رو بگيري

واس شروع هر دو ميكرو رو روي فركانس داخلي 1 مگ تنظيم كن و باودريت هم بزار روي 2400
يكسان بودن باود ريت ها و برابر بودن فركانسي كه تو برنامه مينويسيد با فيوزبيت ها خيلي خيلي مهمه
از اين قسمت آخر شما مطمئني ؟!‌
نه دیگه درست شد با printbin فرستادم فعلا که فرستنده گیرنده یکی شد
من فرکانس رو 12 مگ گذاشتم که تو عمل 11.0592 میزارم فیوزبیت رو روی کریستال اکسترنال های فرکانس تنظیم کردم

morteza_rk
22-08-2012, 01:29
بعد اومدم با waitkey گرفتم رو ال سیدی واسه خودش 13 و 56و10 اینا رو نشون میداد که تند تند هم عوض میشد

درسته دیگه! 10 و 13 همونائی هستن که من گفتم. ولی 56 کد دسیمال 1 نیست بلکه کد دسیمال 1 مقدار 49 هست.

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

خلاصه خدارو شکر کنید. منم سال 87 داشتم سر همین موضوع دست به خودکشی می زدم! پدرم در اومد تا روش های مختلفو یاد گرفتم.

leylijoon
22-08-2012, 08:16
منون مرتضی جان پس معلومه شماتقریبا 1195 روز از من جلوتری:0013:ولی چون بچه گلستانی بیشتر از دانشت بهره مند میشیم

برام جال بود که وقتی ; رو بعد عدد میزاشتم انگار خود عدد هم فرستاده نمیشد چرا؟ من عدد رو بدون دابل کوتیشن گذاشتما
پس اون موقعه با دستور print برای من دسیمال میفرستاده؟؟؟یا اسکی؟؟؟

leylijoon
22-08-2012, 15:56
سلام دوستان اینجا دیگه به کمکتون نیاز دارم
این پروژه که گذاشتم میخام اطلاعاتشو با مبدل یو اس بی به سریال به کامپی.تر وصل کنم وداده ها رو ذخیره و رسم کنم
اول-لطفا نحوه صحصیح ارسال دیتا به پورت سریال رو بگید
الان مقدار QB نشون میده بجا عدد
You can see links before reply
مرتضی جان مدد

leylijoon
22-08-2012, 21:33
دوستان کجایین؟؟؟

agape
22-08-2012, 21:59
دوست من راه اندازی سریال اینقدر سخت نیست که قضیه به سه صفحه کشیده شده - و اما این که آیا فهمیدید مشکل کار از کجا بوده ؟
در مورد ارسال به کامپیوتر هم شما باید حتما تبدیل سطح ولتاژ رو انجام بدید ! با آیسی هایی مثل max232 که مدارشم به وفر یافت میشه !

leylijoon
22-08-2012, 22:41
مسلما اگه نکته نداشت به 3 صفحه کشیده نمیشد
.من از مبدل سریال به usb استفاده میکنم.دیگه max نیاز نیست. هست؟؟؟
الان اعدادی که تو virtul terminal دیده میشه حروف انگلیسیه 4 تایی مشکل اینه
میخوام عدد باشه

seah60
14-09-2012, 12:40
سلام من میخوام برنامه نویسی یاد بگیرم...بگید چطوری و با چه برنامه ای میتونم