PDA

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



kendab
19-11-2012, 14:54
سلام
من یه برنامه به زبان بکام میخواهم که
xرابگیرد و دررابطه روبرو قرار دهدy=75x-75
یکان و دهگان و صدگان را جدا کند و هر کردام را روی یک سون سگمنت نشون بدهد
روش کار و دستورات را میدونم ولی شکل کلی برنامه نمیدونم
با تقسم بر 10 باقی مانده بدست میاید میشود یکان
با تقسیم خارج قسمت در مرحله قبل بر 10 صدگان میشود و باقی مانده اش هم دهگان
حال نمیدونم چطور بنویسم
ممنون

behnam6500
19-11-2012, 15:28
برادر فکر نکنم اینجا کسی نشسته باشه تا برای بقیه برنامه بنویسه...

شما شروع کن به نوشتن، همینایی که گفتی، پیاده سازی کن، هرجاش ایرادی داشتی با سورس بزار تا راهنمایی کنند دوستان.

kendab
19-11-2012, 15:45
برادر فکر نکنم اینجا کسی نشسته باشه تا برای بقیه برنامه بنویسه...

شما شروع کن به نوشتن، همینایی که گفتی، پیاده سازی کن، هرجاش ایرادی داشتی با سورس بزار تا راهنمایی کنند دوستان.

ممنون


$regfile = Atmega32
$crystal = 80000
Config Pina.1 = Input
Config Portb = Output
Config Portc = Output
Config Portd = Output
Dim X As Word
Dim Y As Word
Dim Z As Word
Dim Q As Word
Dim W As Word
Dim T As Word
X Alias Pina.1
Y = 75x - 75
Z = Y \ 10
Q = Y Mod 10
W = Z \ 10
T = Z Mod 10

تا اینجا نوشتم نمیدونم چقدر درست هست وچطور t,w,qهر کدام را روی یک سون سگمن نمایش دهم

Doloop
19-11-2012, 16:26
سلام

ابتدا شما باید ورودی رو مثلا یک کیپد در نظر بگیرید
الان مقدار X شما تنها مقدار یک و صفر میتواند داشته باشد
پس اگه توی help , دستور GETKBD رو جستجو کنید یک نمونه برنامه برای طریقه استفاده از این دستور به شما میدهد
از روی اون ورودی رو یک کیپد 4*4 قرار میدهیم...

بعد توی بسکام نمیشه همه عملگر هارو توی یک دستور استفاده کرد...
شما اول x رو در عدد 75 ضرب کنید بعد مقدار حاصل رو در متغیر Y قرار دهید
حالا مقدار 75 رو از متغیر Y کم کنید ودر یک متغیر دیگر مثلا Z قرار دهید
چون شما تا صد گان رو میخواهید بدست بیارید پس مقدار Z حداکثر 999 میباشد



Z = Y \ 10
Q = Y Mod 10
W = Z \ 10
T = Z Mod 10


این قسمت هم درسته مقدار های یکان دهگان و صدگان رو بدست میاره
اگر برای نمایش از سگمت های BCD توی پروتئوس استفاده کنید
هر کدوم از این مقدار هارو که میخاهید نمایش دهید رو برای مثال بریزید روی پورت B
بعد سگمنت BCD رو به چهار پین پائین پورت B وصل کنید عدد مورد نظر رو نمایش میده

اما اگه از سگمنت های باینری استفاده میکنید باید کد های باینری یا هگز هر رقم رو بدست بیارید بعد با دستور LOOKUP (برای جزئیات به HELP مراجعه شود) مقدار هگز یا باینری مورد نظر رو میخونید و میریزید روی هفت پین پائین پورت B
با این اطلاعات برنامه رو کامل تر کنید اگه باز مشکلی باشه حتما پاسخ داده میشه:wink:

موفق با... :o

kendab
19-11-2012, 17:00
سلام

ابتدا شما باید ورودی رو مثلا یک کیپد در نظر بگیرید
الان مقدار X شما تنها مقدار یک و صفر میتواند داشته باشد
پس اگه توی help , دستور GETKBD رو جستجو کنید یک نمونه برنامه برای طریقه استفاده از این دستور به شما میدهد
از روی اون ورودی رو یک کیپد 4*4 قرار میدهیم...

بعد توی بسکام نمیشه همه عملگر هارو توی یک دستور استفاده کرد...
شما اول x رو در عدد 75 ضرب کنید بعد مقدار حاصل رو در متغیر Y قرار دهید
حالا مقدار 75 رو از متغیر Y کم کنید ودر یک متغیر دیگر مثلا Z قرار دهید
چون شما تا صد گان رو میخواهید بدست بیارید پس مقدار Z حداکثر 999 میباشد



Z = Y \ 10
Q = Y Mod 10
W = Z \ 10
T = Z Mod 10
این قسمت هم درسته مقدار های یکان دهگان و صدگان رو بدست میاره
اگر برای نمایش از سگمت های BCD توی پروتئوس استفاده کنید
هر کدوم از این مقدار هارو که میخاهید نمایش دهید رو برای مثال بریزید روی پورت B
بعد سگمنت BCD رو به چهار پین پائین پورت B وصل کنید عدد مورد نظر رو نمایش میده

اما اگه از سگمنت های باینری استفاده میکنید باید کد های باینری یا هگز هر رقم رو بدست بیارید بعد با دستور LOOKUP (برای جزئیات به HELP مراجعه شود) مقدار هگز یا باینری مورد نظر رو میخونید و میریزید روی هفت پین پائین پورت B
با این اطلاعات برنامه رو کامل تر کنید اگه باز مشکلی باشه حتما پاسخ داده میشه:wink:

موفق با... :o
ممنون از راهنمایتون
ورودی ما یه جریان متغییر 4میلی تا 20 میلی امپر هست که با یک مقاومت250 اهم به ولتاژ یک تا 5 ولت تبدیل میشه که ورودی ما حساب میاد
باید بریزم رو سون سگمنت باینری
مشکل دیگه ام الان که اجرا میکنم به خط 3 که ورودی را تعریف کردم ارور میدهد
ارورش همcanot find HW-register[DDRA

Shapour_Ardebil
19-11-2012, 17:42
با سلام

من یک نمونه برنامه با بیسکام در آدرس زیر قرار دادم که فایل پروتئوس هم داره در ضمن یک نرم افزار هم با #C گذاشتم که میتوانید کدهای سون سگمنت خود را با آن در بیاورید امیدوارم مفید باشد .


نرم افزار کد سون سگمنت - ایـــــــــران میـــــــکرو ™ (You can see links before reply)

Doloop
19-11-2012, 22:09
مشکل دیگه ام الان که اجرا میکنم به خط 3 که ورودی را تعریف کردم ارور میدهد

خوب برای این که شما باید از ADC میکرو استفاده کنید که من توی برنامه ندیدم ADC کانفیگ بشه یا مقدارش خونده بشه

بازم میگم توی Help عبارت GetADC رو جستجو کنید نحوه کاربردش موجود هست :wink:

kendab
20-11-2012, 00:41
خوب برای این که شما باید از ADC میکرو استفاده کنید که من توی برنامه ندیدم ADC کانفیگ بشه یا مقدارش خونده بشه

بازم میگم توی Help عبارت GetADC رو جستجو کنید نحوه کاربردش موجود هست :wink:
سلام
والا من از helpنتونستم چسزی بفهمم
امکان راهنمایی بیشتر دارد
ممنون

Doloop
20-11-2012, 07:18
سلام مهندس

ADC به شما به ازای مقدار ورودی 0 تا 5 ولت مقدار 0 تا 1024 رو میده
خط اول ADC کانفیگ میشه
خط دوم شروع به کار میکنه
خط سوم مقدار ADC0 (پورت A.0) خونده میشه و در متغیر W ذخیره میشه



Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
W = Getadc(0)



در مورد Help هم بگم اگه دستورات رو توی قسمت Index جستجو کنید حتما پیدا میشه (نمونه برنامه هم هست)

morteza_rk
20-11-2012, 13:38
سلام

لطفا پروژه ی زیر رو یه بررسی بکن. همون کارائی هست که باید انجام بدی.

ایـــــــــران میـــــــکرو ™ - مشاهده یک موضوع - جمع آوري پروژه هاي avr (You can see links before reply)

kendab
20-11-2012, 14:17
سلام مهندس

ADC به شما به ازای مقدار ورودی 0 تا 5 ولت مقدار 0 تا 1024 رو میده
خط اول ADC کانفیگ میشه
خط دوم شروع به کار میکنه
خط سوم مقدار ADC0 (پورت A.0) خونده میشه و در متغیر W ذخیره میشه



Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
W = Getadc(0)

در مورد Help هم بگم اگه دستورات رو توی قسمت Index جستجو کنید حتما پیدا میشه (نمونه برنامه هم هست)
ممنون
این کار را کردم حالا برای نمایش مگر نباید بنویسیم
print c

Doloop
20-11-2012, 21:35
این کار را کردم حالا برای نمایش مگر نباید بنویسیم
print c

نه ...
همونطور که قبلا گفتم باید یک کد باینری یا هگز رو روی پورتی که به سگمنت وصله قرار بدید
نمونه کد سون سگمنت هم زیاده حتی توی صفحه قبل یکی از مهندسا یه برنامه معرفی کردن که اون کد رو برای سگمنت تولید میکنه

دستور Lookup هم اینطوریه...



w=lookup(A,data)
data:
Data &B00000000
Data &B00000000
Data &B00000000
Data &B00000000
Data &B00000000
Data &B00000000
Data &B00000000
Data &B00000000
Data &B00000000
Data &B00000000


مقدار A میتونه از 0 تا 9 باشه (مقدار 0 اولین خط data رو میخونه , 1 دومین خط data و....)و میریزه توی متغیر W
این باینری هایی که من قرار دادم همه مقدارشون صفر هست و چیزی روی سگمنت نمایش نمیده
شما باید باینری هر عدد رو در خونه مناسبش قرار بدید
مثلا باینری 0 در اولین خط data
باینری 1 در دومین خط data
باینری 2 در سومین خط data
الی 9 ...

kendab
21-11-2012, 00:30
نه ...
همونطور که قبلا گفتم باید یک کد باینری یا هگز رو روی پورتی که به سگمنت وصله قرار بدید
نمونه کد سون سگمنت هم زیاده حتی توی صفحه قبل یکی از مهندسا یه برنامه معرفی کردن که اون کد رو برای سگمنت تولید میکنه

دستور lookup هم اینطوریه...



w=lookup(a,data)
data:
Data &b00000000
data &b00000000
data &b00000000
data &b00000000
data &b00000000
data &b00000000
data &b00000000
data &b00000000
data &b00000000
data &b00000000
مقدار a میتونه از 0 تا 9 باشه (مقدار 0 اولین خط data رو میخونه , 1 دومین خط data و....)و میریزه توی متغیر w
این باینری هایی که من قرار دادم همه مقدارشون صفر هست و چیزی روی سگمنت نمایش نمیده
شما باید باینری هر عدد رو در خونه مناسبش قرار بدید
مثلا باینری 0 در اولین خط data
باینری 1 در دومین خط data
باینری 2 در سومین خط data
الی 9 ...
سلام
ممنون
یه سوال ما نمیتونیم تشخیص بدیم که خروجی چه عددی باید باشد باید از رابطه و اینکه یکان یا دهگان یا صدگان هست سون سگمن نشون بدهد

Doloop
21-11-2012, 02:29
یه سوال ما نمیتونیم تشخیص بدیم که خروجی چه عددی باید باشد

منظورت رو خوب متوجه نشدم؟
ولی اگه میخای با محاسبات خروجی رو بدونی چقدره؟
میدونی ورودی از 1 تا 5 ولته
مقدار adc هم 0 تا 1024
حالا با یه نسبت بستن
ورودی رو بر حسب میلی ولت محاسبه میکنیم که حداکثر میشه 5000 میلی ولت و حداقل 1000 میلی
مقدار 1024 برای حداکثر ورودی هست یعنی 5000 میلی
پس اگه 1024 تقسیم بر 5000 کنی مقدار adc به ازای هر یک میلی ولت بدست میاد
فرضا میشه 1/5
میزاری توی رابطه حل میشه

kendab
21-11-2012, 16:02
منظورت رو خوب متوجه نشدم؟
ولی اگه میخای با محاسبات خروجی رو بدونی چقدره؟
میدونی ورودی از 1 تا 5 ولته
مقدار adc هم 0 تا 1024
حالا با یه نسبت بستن
ورودی رو بر حسب میلی ولت محاسبه میکنیم که حداکثر میشه 5000 میلی ولت و حداقل 1000 میلی
مقدار 1024 برای حداکثر ورودی هست یعنی 5000 میلی
پس اگه 1024 تقسیم بر 5000 کنی مقدار adc به ازای هر یک میلی ولت بدست میاد
فرضا میشه 1/5
میزاری توی رابطه حل میشه
سلام
راستشو بخواهید نفهمیدم چی شد
امکان داره راهنمایی بیشتر کنید
ممنون

Doloop
21-11-2012, 23:29
Adc به ازای ورودی 0 ولت مقدار صفر را میدهد و به ازای ورودی 5 ولت مقدار 1024 را میدهد
از اونجایی که ورودی شما از 1 شروع میشود لذا شما باید مقدار adc به ازای ورودی 1 ولت را محاسبه کنید
اگر 1024 را تقسیم بر 5 کنید مقدار adc به ازای هر یک ولت بدست میاد (204 میشه)
یعنی اگه ورودی شما 1 ولت باشه مقدار adc میشه 204
اگه ورودی شما 2 ولت باشه مقدار adc میشه 408
اگه ورودی شما 3 ولت باشه مقدار adc میشه 612
اگه ورودی شما 4 ولت باشه مقدار adc میشه 816
ووو...
شما باید شرط بزاری اگه مقدار ADC فرضا 408 بود متغیر X باشه 2
اگه 816 بود X باشه 4
ولی اگه با رابطه بدست بیاری میتونی برای تمام مقادیر ورودی مثلا 2.85 ولت هم بدست بیاری
با یه نسبت بستن میتونی راحت بدست بیاری



P = 5X /1024

ممکنه P اعشار هم داشته باشه که توی بسکام فکر کنم با دستور زیر میشه مقدار صحیح رو برداشت




K =RND(P)



الان K همون عددیه که باید بزاری توی رابطه زیر تا مقدار جریان رو بدست بیاری




Y = 75K - 75



من کل رابطه رو توی یک خط نوشتم
ولی یادت باشه توی بسکام هر دستور فقط یک عمل محاسباتی انجام میده
یعنی یه دستور برای ضرب کردن 75 در K و یک دستور هم برای تفریق باید بنویسی :wink:

موفق با ...:o

kendab
27-11-2012, 22:55
Adc به ازای ورودی 0 ولت مقدار صفر را میدهد و به ازای ورودی 5 ولت مقدار 1024 را میدهد
از اونجایی که ورودی شما از 1 شروع میشود لذا شما باید مقدار adc به ازای ورودی 1 ولت را محاسبه کنید
اگر 1024 را تقسیم بر 5 کنید مقدار adc به ازای هر یک ولت بدست میاد (204 میشه)
یعنی اگه ورودی شما 1 ولت باشه مقدار adc میشه 204
اگه ورودی شما 2 ولت باشه مقدار adc میشه 408
اگه ورودی شما 3 ولت باشه مقدار adc میشه 612
اگه ورودی شما 4 ولت باشه مقدار adc میشه 816
ووو...
شما باید شرط بزاری اگه مقدار ADC فرضا 408 بود متغیر X باشه 2
اگه 816 بود X باشه 4
ولی اگه با رابطه بدست بیاری میتونی برای تمام مقادیر ورودی مثلا 2.85 ولت هم بدست بیاری
با یه نسبت بستن میتونی راحت بدست بیاری


ممکنه P اعشار هم داشته باشه که توی بسکام فکر کنم با دستور زیر میشه مقدار صحیح رو برداشت




K =RND(P)

الان K همون عددیه که باید بزاری توی رابطه زیر تا مقدار جریان رو بدست بیاری




Y = 75K - 75

من کل رابطه رو توی یک خط نوشتم
ولی یادت باشه توی بسکام هر دستور فقط یک عمل محاسباتی انجام میده
یعنی یه دستور برای ضرب کردن 75 در K و یک دستور هم برای تفریق باید بنویسی :wink:

موفق با ...:o
سلام
معذرت ایا نباید در رباطه برا yنوشتید 75 را تبدیل کنم مثل 5 به 1024تبدیل کردیم
بعد چطوری yرا به پورت خروجی معرفی کنیم که بتواند سون سگمنت را روشن کند
ممنون

Doloop
28-11-2012, 02:37
معذرت ایا نباید در رباطه برا yنوشتید 75 را تبدیل کنم مثل 5 به 1024تبدیل کردیم

نه مهندس
این تبدیل فقط شامل مقداری میشه که داری با ADC میخونی

اون رابطه 75X-75 رو هم خودتون گفته بودید
شما مگه نمیخواهید بدونید میزان جریان عبوری فلان جای مدار چقدره؟
خوب برای اینکه به ADC باید ولتاژ بدیم جریان رو با مقاومت به ولتاژ تبدیل کردیم
حالا میزان ولتاژ رو با رابطمون به همون جریان تبدیل میکنیم
علت این تبدیل فقط اینه که ADC ورودی ولتاژ قبول میکنه نه جریان

گفتید سگمنتتون باینری هست...
برای این کار باید کد باینری تک تک اعداد 0 تا 9 رو بدست بیارید (برای سون سگمنت)که در این رابطه برنامه توی نت سرچ کنید فراوونه و فقط کافیه کدش رو کپی کنید
دوم برای خوندن هر عدد و نمایش از دستور lookup استفاده کنید(قبلا توضیح دادم)




for A=0 To 9
W=Lookup(A,data)
portb=W
Waitms 30
Next

end

data:
data &b01010101
data &b10101010
data &b01110010
...
...



وقتی توی حلقه for مقدار A=0 دستور Lookup میاد اولین دیتای باینری رو میخونه میریزه توی متغیر W بعدش هم که متغیر W رو برای نمایش میریزه روی پورت B که به سگمنت وصله
وقتی توی حلقه for مقدار A=1 دستور Lookup میاد دومین دیتای باینری رو میخونه میریزه توی متغیر W
این روال تا عدد 9 صورت میگیره
حالا شما توی اون رابطه هر عددی رو که بدست اوردی میزاری جای متغیر A تا باینری همون عدد خونده بشه

فقط توی قسمت data هم یادت باشه باید باینری های اعداد به ترتیب باشه
اولین دیتا برای عدد 0
دومین دیتا برای عدد 1
الی ... 9