برگزیده های پرشین تولز

mscomm کار با توابع

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
سلام
دوست عزيز خوب هستيد
من تا الان فكر ميكردم شما خروجي رو به كامپيوتر ديگر ارسال ميكنيد !!!!!!!!!!!!!!
خوب چنتا سئوال ؟
اولا ميكرو كنترل شما چند مگاهرتزيه 8 - 16 ؟
دو برنامه ميكرو كنترل را به چي نوشته ايد ؟
رو يا ايپرامتون چقدره منظورم اينكه ايا جاي كافي جهت برنامه نويسي وجود داره يا نه بايد برنامه اپتومايز بشه ؟
 

korosh_majd

کاربر تازه وارد
تاریخ عضویت
23 آگوست 2006
نوشته‌ها
42
لایک‌ها
0
سلام
دوست عزيز خوب هستيد
من تا الان فكر ميكردم شما خروجي رو به كامپيوتر ديگر ارسال ميكنيد !!!!!!!!!!!!!!
خوب چنتا سئوال ؟
اولا ميكرو كنترل شما چند مگاهرتزيه 8 - 16 ؟
دو برنامه ميكرو كنترل را به چي نوشته ايد ؟
رو يا ايپرامتون چقدره منظورم اينكه ايا جاي كافي جهت برنامه نويسي وجود داره يا نه بايد برنامه اپتومايز بشه ؟

سلام آقا سعید عزیز
12 مگاهرتز-( البته فعلا)
بیسیک
روی حافظه فلش با کمبود شدید حافظه روبه رو هستم( جای کافی متاسفانه وجود ندارد)

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

korosh_majd

کاربر تازه وارد
تاریخ عضویت
23 آگوست 2006
نوشته‌ها
42
لایک‌ها
0
سلام
دوست عزيز خوب هستيد
من تا الان فكر ميكردم شما خروجي رو به كامپيوتر ديگر ارسال ميكنيد !!!!!!!!!!!!!!
خوب چنتا سئوال ؟
اولا ميكرو كنترل شما چند مگاهرتزيه 8 - 16 ؟
دو برنامه ميكرو كنترل را به چي نوشته ايد ؟
رو يا ايپرامتون چقدره منظورم اينكه ايا جاي كافي جهت برنامه نويسي وجود داره يا نه بايد برنامه اپتومايز بشه ؟

سلام آقا سعید عزیز
12 مگاهرتز-( البته فعلا)
بیسیک
روی حافظه فلش با کمبود شدید حافظه روبه رو هستم( جای کافی متاسفانه وجود ندارد)

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

korosh_majd

کاربر تازه وارد
تاریخ عضویت
23 آگوست 2006
نوشته‌ها
42
لایک‌ها
0
دوست عزیز جناب shockley
با سلام

این روش پیشنهادی شما تعداد زیادی کاراکتر ارسال می کند که در نتیجه وقت زیادی از میکرو گرفته می شود
من می تونم با همان روش ارسال رشته تمامی اعدادی را که به رشته تبدیل شده اند را ارسال کنم سپس درون میکروها رشته ها رو به عدد برگردانم اما مشکل من اینه که مایلم با حداقل ارسال کاراکتر اعداد بیشتری را دریافت کنم به عنوان مثال عدد 100 که 7 بیت است خیلی راحت به صورت باینری و در قالب یک بایت فرستاده می شود اما همین عدد در قالب رشته در سه سری 8 بیتی فرستاده می شود!
درسته؟
مرسی
 

korosh_majd

کاربر تازه وارد
تاریخ عضویت
23 آگوست 2006
نوشته‌ها
42
لایک‌ها
0
دوستان عزیز به سئوال من جواب ندادند به همین خاطر مجددا آن را مطرح می کنم

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

dim bytestosend( o to 1) as byte
dim buffer as variant
butestosend(0)=&h4a
bytestosend(1)=&h23
buffer=bytestosend() w
mscomm1.output=buffer

1- چگونه می توانم بفهمم که محتویات متغیر buffer به صورت باینری چی هست؟ به عبارت دیگر محتویات این متغیر را چگونه می توان به صورت باینری نشان داد؟
البته این روشی که من استفاده می کردم جواب نمی ده : text1.text=buffer ( فقط کاراکتر ؟ نشون می ده )

2- اگر بخواهیم یک عدد باینری را به یک متغیر مانند number نسبت بدیم چگونه می بایست به vb اعلام کنیم؟
 

shockley

Registered User
تاریخ عضویت
28 نوامبر 2005
نوشته‌ها
287
لایک‌ها
4
چگونه می توانم بفهمم که محتویات متغیر buffer به صورت باینری چی هست؟ به عبارت دیگر محتویات این متغیر را چگونه می توان به صورت باینری نشان داد؟
البته این روشی که من استفاده می کردم جواب نمی ده : text1.text=buffer ( فقط کاراکتر ؟ نشون می ده )

کنترلر UART اکثر مادربوردهای PC چیپ 8250 (و یا 16450) است که این IC ده رجیستر دارد. آدرس رجیسترهای پورت COM1 از 03F8 شروع شده و به 03FF ختم می شود و آدرس هر رجیستر با یک آفست از آدرس مرجع شروع می شود. به عنوان مثال بافر ارسال (با نام THR) دارای آفست 0 بوده و در نتیجه آدرس آن 03F8 است. برای خواندن این رجیسترها شما باید از زبان های C یا اسمبلی و یا توابع API استفاده کنید. مثلا دسترسی به بافر UART در C++:

کد:
        char  lsr;
        char  rbr;
        char  typeahead[100];
        int   nextPut = 0;
        for ( ;; )
        {
          lsr = inbyte( 0x3FD );
          if ( (lsr & 0x01) != 0 )
          {
            rbr = inbyte( 0x3F8 );
            typehead[ nextPut++ ] = rbr;
          }
        }

در VB می تونید از dll هایی که به این منظور ساخته شده اند استفاده کنید. با استفاده از یکی از این dll ها یه برنامه ساده نوشتم که کاملا یک بایت رو به پورت سریال ارسال میکنه و خودم هم تستش کردم (با UART اول ATMEGA128). این برنامه عدد دسیمال 65 رو به پورت ارسال میکنه (بدون تبدیل شدن به کد اسکی) و فکر می کنم به این ترتیب مشکل شما هم کاملا حل بشه :)
دانلود برنامه
 

korosh_majd

کاربر تازه وارد
تاریخ عضویت
23 آگوست 2006
نوشته‌ها
42
لایک‌ها
0


کد:
        char  lsr;

در VB می تونید از dll هایی که به این منظور ساخته شده اند استفاده کنید. با استفاده از یکی از این dll ها یه برنامه ساده نوشتم که کاملا یک بایت رو به پورت سریال ارسال میکنه و خودم هم تستش کردم (با UART اول ATMEGA128). این برنامه عدد دسیمال 65 رو به پورت ارسال میکنه (بدون تبدیل شدن به کد اسکی) و فکر می کنم به این ترتیب مشکل شما هم کاملا حل بشه :)
دانلود برنامه


دست شما دردنکنه آقای shockley

راستش را بخواهید من هم قصد داشتم ابتدا از فایل port.dll برای این کار استفاده کنم اما وقتی متوجه شدم vb بدون نیاز به dll این کار را انجام می دهد تصمیم گرفتم از توابع خود این vb حیف نون!( :D ) استفاده کنم ای کاش همچین تصمیمی نگرفته بودم .
چقدر وقت گذاشتم تا تونستم mscomm رو تو برنامه راه بندازم!:(
این بار زور آخرو می زنم اگه نشد حتما از پیشنهاد و راهنمایی شما استفاده می کنم
باز هم متشکرم

چرا کسی جواب سئوالات منو نمی ده؟
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
دوستان عزیز به سئوال من جواب ندادند به همین خاطر مجددا آن را مطرح می کنم

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

dim bytestosend( o to 1) as byte
dim buffer as variant
butestosend(0)=&h4a
bytestosend(1)=&h23
buffer=bytestosend() w
mscomm1.output=buffer

1- چگونه می توانم بفهمم که محتویات متغیر buffer به صورت باینری چی هست؟ به عبارت دیگر محتویات این متغیر را چگونه می توان به صورت باینری نشان داد؟
البته این روشی که من استفاده می کردم جواب نمی ده : text1.text=buffer ( فقط کاراکتر ؟ نشون می ده )

2- اگر بخواهیم یک عدد باینری را به یک متغیر مانند number نسبت بدیم چگونه می بایست به vb اعلام کنیم؟
سلام
خوب هستيد
ببنيد شما ميايد يك متغير واريانت تعريف ميكنيد يعني ديتا بعلاوه متا ديتا كه وي بي بر اساس اون مياد و ميفهمه كه اين متغيير چه چيزي رو در خودش نگه ميداره و بعد دو تا متغير بايت را توش قرار ميديد يعني متغير شما ميشه توي هگزه h00004a23 بعلاوه متا ديتا يعني به اين صورت
کد:
metadata+ &h00004a23
خوب وقتي اون را توي يك تكس باكس قرار ميدهيد وي بي مياد و با استفاده از توابع داخلي اون را تبديل ميكنه به استرينگ يعني در اين حالت استرينگ شما ميشه
کد:
metadata who convert to string + &h00+&h00+&h4a+&h23
منظورم از + يعني نحوه قرار گيري اطلاعات
خوب حالا چه اتفاقي مي افته ؟
قسمت متا ديتا يك كد كه به احتمال زياد كد اسكي اون خارج از محدوده مجازه كه توي تكس باكس ميشن ؟
اما وقتي به كد 00 ميرسيم وي بي خيال ميكنه انتهاي استرينگه و نمايش رو قطع ميكنه ( نال استرينگ كد)
پس شما ؟ ميبنيد به همين راحتي
فكر كنم شما اگر buffer رو بصورت زير تعريف كنيد مشكل نداشته باشيد ( وي بي دم دست نيست تا تست كنم )
کد:
dim buffer as string*2
اما در مورد سئوال 2
فكر كنم درست متوجه سئوالتون نشدم يعني يك متغير يا ارايه از بايت ها را توي متغير از نوع مثلا double قرار دهيم
؟
اگر اين طور است:
1- يك بايت
کد:
dim i as integer
dim b as byte
b=&h24
i=b
2- اگر ارايه است
کد:
dim i as integer 
 dim b() as byte
redim b(0 to 1) as byte
b(0)=&h23
b(1)= &h20
i=b(0)
for j=1 to ubound(b)
i=i*256+b(j)
next

ممكنه روش ديگري هم داشته باشه اما من بلد نيستم

اميدوارم كمك كنه
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
شما فرض كنيم ميخواهيد عدد 1356 رو به ميكرو كنترل ارسال كنيد اين عدد تو هگزه ميشه
054C
خوب اگر اين عدد رو بايت بايت كنيم ميشه
05,4c
اگر استرينگي تعريف كنيم كه اولين متغيير اون كد 05 داشته باشه و دويمن كاركتر كد اسكيش بشه 4c و بعد اين استرينگ رو ارسال كنيم مشكل حل بشه
يعني
کد:
mid(mystr,1,1)=chr(05)
mid(mystr,2,1)=chr(4c)
چون استرينگ توي مموري ميشه
05,4c,00
كه وي بي 00 رو نميفرسته
يعني عددي كه شما ميخواهيد بصورت باينري ارسال ميشه

اگر جواب بده شما ميتونيد از اين كد براي تبديل اعداد به استرينگ بصورت ارائه شده استفاده كنيد
Function cInt2Str(myNum As Double) As String
Dim r As Double
Dim i As Double
Dim j As Double
Dim TempStr As String
i = 1
r = Int(myNum / 256)
While r > 0
i = i + 1
DoEvents
r = r / 256
Wend
TempStr = ""
For j = i To 1 step -1
mid(TempStr,j,1) = Chr(myNum Mod 256)
myNum = Int(myNum / 256)
Next
mid(TempStr,i+1,1)=0
cInt2Str = TempStr
End Function

اميدوارم كمك كنه
 

korosh_majd

کاربر تازه وارد
تاریخ عضویت
23 آگوست 2006
نوشته‌ها
42
لایک‌ها
0
کد:
کد:

کد:
dim buffer as string*2
اما در مورد سئوال 2
فكر كنم درست متوجه سئوالتون نشدم يعني يك متغير يا ارايه از بايت ها را توي متغير از نوع مثلا double قرار دهيم
؟

کد:

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

منظور من اینه که اگر بخوهیم یک عدد باینری مثل 11010100 را به یک متغیر ( از هر نوع ) نسبت دهیم چگونه آن را باید معرفی کنیم؟
مثلا به این شکل ارور می دهد: number=&b11010100 و یا به این شکل number=11010100 ؟
متشکرم
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
سلام
فكر نكنم چيزي داشته باشه !!!!!!!!!!!
ميدونم &O براي اكتال هست اما براي باينري نميدونم
 

shockley

Registered User
تاریخ عضویت
28 نوامبر 2005
نوشته‌ها
287
لایک‌ها
4
متاسفانه ویژوال بیسیک (بجز VB.NET) از لحاظ نوع داده ی باینری بسیار ضعیفه و فکر نمی کنم به طور مستقیم راهی برای این کار که شما می خواهید انجام بدید وجود داشته باشه، باید با محاسبات تبدیل مبنا اول عددتون رو به مبنای 10 ببرید و بعد ذخیره اش کنید. باز هم میگم مطمئن نیستم که آیا راه ساده تری وجود داره یانه.
اما به طور کلی به نظر میاد ویژوال بیسیک برای کاری که شما می خواهید انجام بدید زیاد مناسب نباشه، چرا از C++Builder و یا محیط NET. استفاده نمی کنید؟
 

korosh_majd

کاربر تازه وارد
تاریخ عضویت
23 آگوست 2006
نوشته‌ها
42
لایک‌ها
0
متاسفانه ویژوال بیسیک (بجز VB.NET)
اما به طور کلی به نظر میاد ویژوال بیسیک برای کاری که شما می خواهید انجام بدید زیاد مناسب نباشه، چرا از C++Builder و یا محیط NET. استفاده نمی کنید؟


shockley جان همین vb رو هم به زور تا به اینجا رسوندم اون هم با کمک دوستانی چون شما و از جمله دوست عزیزم بلا

به هر حال فکر کنم می بایست بی خیال mscomm شوم و از port.dll استفاده کنم :blink: :wacko:
 

korosh_majd

کاربر تازه وارد
تاریخ عضویت
23 آگوست 2006
نوشته‌ها
42
لایک‌ها
0
با سلام خدمت همه دوستان

inputmode : cominputmodebin
setting: 9600,n,8,1
-------------------------------------


dim bytestosend( o ) as byte

butestosend(0)=65

mscomm1.output=bytestosend
این کد رو امتحان کردم خوشبختانه جواب می ده
البته برنامه آقای shockly رو هم امتحان کردم اون هم هیچ مشکلی نداره
خوب به هر حال با کمک دوستان مشکل حل شد
خدارا شکر:lol:
ازهمه دوستانی که منو راهنمایی کردند بسیار سپاسگذارم
آقا سعید - آقا shockly- بلا جان و xoex...
خیلی مخلصیم
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
سلام
خوب هستيد خوشحالم مشكلتون حل شد
به اميد ديدار
 
بالا