RE: ---- راهنمایی در برنامه نویسی ----
سلام
شما يه دونه متغير از جنس ورود تعري كنيد و هر يك ميلي ثانيه يك واحد به اون اضافه كنيد ، وقتي كه مقدار متغير به 4000 برسه 4 ثانيه گذشته ، اگه تا اين زمان كليد فشرده شد كه هيچ اگه نشد با شرطي كه نوشتيد به مكان مورد نظر پرش ميشود :
کد:
dim a as word
do
incr a
Debounce Pind.1 , 1 , Roshan , Sub
if a>4000 then
goto e
end if
loop
.
.
.
RE: ---- راهنمایی در برنامه نویسی ----
ممنون کاملش کردم و شد این:
E:
.
.
X = 0
Do
Waitms 1
Incr X
Debounce Pind.1 , 1 , Roshan , Sub
If X > 4000 Then
Goto E
End If
Loop
Roshan:
JMP F
Return
F:
RE: ---- راهنمایی در برنامه نویسی ----
برای مورد بالا از پایه های وقفه و تایمر هم میشد استفاده کنی ، پایه های وقفه کاری به تاخیر و غیره نداره و توی کتاب توضیح داده شده
RE: ---- راهنمایی در برنامه نویسی ----
یک سول دیگه:
میخواهیم یک متغیر مثل D وقتی مقدارش منفی میشود (حتی دهم یا صدم منفی) مقدارش برار صفر داده شود:
IF D=.....
D=0
چگونه باید بنویسیم؟
RE: ---- راهنمایی در برنامه نویسی ----
سلام
if <0 then
d=0
end if
اعداد منفی اعداد کوچکتر از صفر هستند
RE: ---- راهنمایی در برنامه نویسی با میکرو AVR در این تاپیک ----
وقتی مدار 1 که استفاده از دو ADC به عنوان مد تفاضلی هست رو ران میکنم درست کار میکنه و میکرو ولتاژ باطریها رو درست نشون میده ، ولی وقتی فقط چندتا رله بین همون باطریها اضافه میکنم و با اینکه از کنتاکتهای نرمالی اپن استفاده کردم بعد از ران برنامه میکرو ولتاژهارو اشتباه نشون میده !!!؟؟؟ ولی اگر لینک رله هارو باز کنم دوباره درست میشه؟ موضوع از چه قراره؟ کنتاکتهای رله که از هم خیلی فاصله دارنه و هیچ اتصالی بینشان نیست پس چرا ADC های میکرو قاطی میکنند؟؟؟ به نظر شما پروتئوس اشتباه میگه یا در واقعیت هم همینطوره؟ و راه حل؟
RE: ---- راهنمایی در برنامه نویسی با میکرو AVR در این تاپیک ----
سلام
مشکل از پروتوس هست و برنامه مشکل خاصی نداره (اگه گراند و زمین رو به رله های متصل کنی (سر های ازاد ) میبینی که همه چیز به هم میریزه )
بهتره توی برنامه از دستور Reference = Avcc استفاده نکنی ، فکر کنم چند ماه قبل توی سایت ir-micro به این نتیجه رسیدیم که این دستور عمل کرد adc رو مختل میکنه
RE: ---- راهنمایی در برنامه نویسی با میکرو AVR در این تاپیک ----
خوب !
Reference = Internal گزاشتم و تو پروتئوس هم ولتاژهارو از Avcc و AREF قطع کردم ولی بازم خطا داره !!
یعنی اتصال رله ها با باطری که وصل میشه با اینه کنتاکت رله ها بازه و باطریها به هم وصل نمیشوند ولی محاسبات بهم میریزه! راه حلی وجود نداره؟ ممکنه شما تست بفرمایید؟
RE: ---- راهنمایی در برنامه نویسی با میکرو AVR در این تاپیک ----
سلام
من توی پروتوس تست کردم و همین مشکل شما رو داشت
کلا رله ها قطع باشن یا نباشن مدار شما توی پروتوس درست شبیه سازی نمیشه
نقل قول:
بهتره توی برنامه از دستور Reference = Avcc استفاده نکنی ، فکر کنم چند ماه قبل توی سایت ir-micro به این نتیجه رسیدیم که این دستور عمل کرد adc رو مختل میکنه
اینم من در کل گفتم نه در مورد این مدار
شاید یکی از باگ های پروتوس همین باشه
RE: ---- راهنمایی در برنامه نویسی با میکرو AVR در این تاپیک ----
میخواهیم مقدار یک متقیر اعشاری در محاسبات به مثلا دو رقم اعشار گرد بشه
مثال: 1.2367 بشه : 1.24
با چه دستوری میتوان این کار را انجام داد؟
RE: ---- راهنمایی در برنامه نویسی با میکرو AVR در این تاپیک ----
سلام
درستور fusing :
[align=left]target = FUSING(source, "mask")[/align]
ب این دستور میشه یه متغیر از جنس سینگل رو تا رقم دلخواه رند کرد :
[align=left]S = 123.45678
Z = Fusing(s , "#.##")[/align]
در برنامه بالا مقدار s برابر 123.46 میشود .
RE: ---- راهنمایی در برنامه نویسی با میکرو AVR در این تاپیک ----
سید این دستور فقط تو نمایش LCD عدد رو روند میکنه من میخوام تو محاسبات روند کنم و شایدم اصلا نخوام نشونش بدم و فقط روندشو بخوام!
من دستور ROUND رو پیدا کردم تو بیسکام ولی اعشار رو از بین میبره و عدد صحیح تحویل میده ولی من میخوام تا دو رقم اعشار روند بشه!
RE: ---- راهنمایی در برنامه نویسی با میکرو AVR در این تاپیک ----
خوب می تونید یه کار سخت انجام بدید اول عددتون رو در 100 ضرب کنید بعد از دستور round استفاده کنید و بعد عدد رو بر 100 تقسیم کنید!
RE: ---- راهنمایی در برنامه نویسی با میکرو AVR در این تاپیک ----
من هم همینکار رو انجام میدهم ولی در تقسیم آخر یعنی تقسیم بر 100 روندی عدد به هم میخوره دوباره چون محاسبات ضرب و تقسیم میکروکنترل ی درصدکی خطا داره و میبینی همیشه مثلا به جای 1000.000 مینویسه 1000.005
RE: ---- راهنمایی در برنامه نویسی با میکرو AVR در این تاپیک ----
سلام به نظرتون بهترین راه واسه تشخیص رنگ چیه؟ adc? یا مقایسه کننده آنالوگ؟ اگه بخوام از مقایسه کننده آنالوگ استفاده کنم می نونم از پایه های میکرو به عنوان یه مالتی پلکسر استفاده کنم؟ یا باید از یه مالتی پلکسر آنالوگ استفاده کنم؟ (اگه بخوام حداکثر خروجی دو سنسور رو با ولتاژ مرجع مقایسه کنم چرا فقط در صورت قرمز بودن رنگ ربات باید دور بزنه دو سنسور هم بخاطر اطمینان از اینکه حتما روی خط قرمز هستیم چون خط قرمز به صورت عمود بر خط مشکی و به طول 10 سانتی متر هست)میزان نویز و خطا در این حالت ها چقدره؟
RE: ---- راهنمایی در برنامه نویسی با میکرو AVR در این تاپیک ----
سلام
نقل قول:
سلام به نظرتون بهترین راه واسه تشخیص رنگ چیه؟ adc? یا مقایسه کننده آنالوگ؟
adc روش خوبی نیست ، چون با افزایش ولتاژ تغذیه سنسور و... محاسباتش به هم میریزه ، بهترین راه استفاده از مقایسه کننده انالوگ هست ( توی مسابقات رباتیک معمولا ربات های که از adc استفاده کرده بودن موق نبودن)
نقل قول:
اگه بخوام از مقایسه کننده آنالوگ استفاده کنم می نونم از پایه های میکرو به عنوان یه مالتی پلکسر استفاده کنم؟ یا باید از یه مالتی پلکسر آنالوگ استفاده کنم؟
مالتی پلکسر باید چه کار کنه ؟
بهتره یه تصویر بزاری
RE: ---- راهنمایی در برنامه نویسی با میکرو AVR در این تاپیک ----
[Dear Guest/Member you can't see link before replyclick here to register]
توی قوانین اینجوری گفته شده اگه ربات به خط قرمز رسید باید دور بزند و اگه به خط سبز باید مسیر را ادامه بدهد من می خوام 2 تا سنسور مانند aو b فقط مخصوص تشخیص خط قرمز بگذارم که اکه هر دو روی خط قرمز بودن مسیر رو دور بزنه میکرو فقط یک مقایسه کننده آنالوگ داره (atmega 32) اگه بخوام هر دو سنسور رو با ولتاژ مرجع مقایسه کنم با ید چیکار کنم؟ آیا می تونم با مقایسه کننده میکرو ولتاز رو در یک بازه چک کنم؟ مثلا بگم اگر ولتاژ سنسور 0.1 بیشتر یا کمتر ولتاژ مرجع بود....
اگه نه پیشنهادتون چیه؟ چیکار باید بکنم؟
RE: ---- راهنمایی در برنامه نویسی با میکرو AVR در این تاپیک ----
سلام
شما باید از مقایسه کننده های انلوگ مثل op-amp استفاده کنید :
مدار زیر یک نمونه از این مقایسه کننده ها هست :
[Dear Guest/Member you can't see link before replyclick here to register]
در این مدار ، با افزایش ولتاژ تغذیه ، ولتاژ هر دو پایه op-amp هم زیاد میشه ، همون طور که میدونید در حالت مقایسه کننده اگر ولتاژ پایه + از پایه منفی بیشتر بشه ، خروجی برابر با ولتاژ تغذیه میشه ( در حالت برعکس خروجی برابر ولتاز پایه منفی یا صفر میشه ) .
از اون جا که با تغییر ولتاژ تغذیه ولتاژ هر دو پایه و منفی تغییر میکنه ، بنابراین خروجی کاملا پایدار میمونه و فقط در صورت تحریک سنسور یک میشه .
شما میتونید از ایسی lm324 استفاده کنید این ایسی دارای 4 اپ امپ داخلی میباشد .
توی برنامه هم کافیه صفر یا یک بودن پایه ها رو چک کند.
RE: ---- راهنمایی در برنامه نویسی با میکرو AVR در این تاپیک ----
اینا درست ولی چجوری رنگ قرمز رو از سفید و مشکی تفکیک کنم؟ ولتاژ منفی رو با توجه به چی تنظیم کنم اگر مثلا ولتاژ خروجی سنسور رو ی خط مشکی 1.1 و قرمز 1.8 و سفید 3 ولت باشه؟ اگه مثلا 1.4 تنظیم کنم وقتی سنسور روی خط سفید و قرمز باشه خروجی آپ امپ 1 میشه اگه مثلا روی 2 ولت تنظیم کنم خروجی هم روی خط مشکی هم روی خط قرمز 0 میشه! به نظرتون اگه ولتاژ خروجی سنسور رو همزمان به 2 آپ امپ وصل کنم که با هردو لتاژ مقایسه(1.6 و 2 ولت مثلا) بشه و بگم اگه از مشکی ولتاژ بیشتر بود و از سفید کمتر... خوب جواب می گیرم؟