شرط 1 شدن pin

kaga

عضو جدید
یه مدار ساده با یه میکرو Atmega 32 رو برای تست تو پروتئوس اماده کردم ... ورودی از pina.0 که یه کلید ساده بهش وصله .... خروجی به portc.0 که یه led بهش وصله

حالا برنامه می نویسیم که هر وقت کلید زده شد لامپ روشن بشه ... به همین سادگی ...

452.jpg

اینم برنامه اش :

$regfile = "M16DEF.DAT"
$crystal = 4000000
Config Portc = Output
Config Pina.0 = Input
Config Pina.4 = Input
Do
If Pina.0 = 1 Then
Toggle Portc.0
End If
Loop
End
دیدین چقدر ساده است .... تنها چیزی که هست اینه که من بجای set portc.0 نوشتم toggle portc.0 ... که در عمل فرقی نداره .

حالا وقتی تو پروتئوس اجراش می کنم ... با زدن کلید چراغ ما چشمک می زنه !!!! ... مگه نه اینکه اینجا اول شرط رو بررسی می کنه بعد چراغ رو از حالت اولیه تغییر می ده ؟ ... خوب وقتی به اخر شرط رسید و خواست loop رو از اول طی کنه مگه هنوز pina.0 ما یک هست ؟ ... من که کلید رو یه باز بیشتر نزدم و بعد هم الان دیگه ولتاژی نداره این پین !!! ... پس چرا برنامه به داخل شرط میره و وضعیت چراغ رو عوض می کنه ؟ ...

اینجا 3 حالته ....
1. وقتی من کلید رو زدم دیگه تا ابد و دهر اون پین 1 فرض می شه ... که اینجوری فکر نکنم باشه ... اگه هست چطور صفرش کنم ؟ .... pina.0 =0 که نیست ؟! دی:
2. یا کلا برنامه از منطق درستی پیروی نمی کنه و من مبتدی در برنامه نویسی میکرو کنترلر ... فکر می کنم روال عین vb , vb.net و .... در دات نته ... که بازم فکر نکنم فرقی داشته باشه
3. یا یه چیزی که شما میتونید بگید و کمکم کنید

ممنون می شم اگه روشنم کنید
 

ROBOTICS

کاربر فعال مهندسی رباتیک
دو اشکال دارد

1- مدار کلید را درست نبستی
2- هنوز نمی دانی معنی Toggle چیست

بین کلید و مثبت ؛ می بایست یک مقاومت 1 کیلو اهم بگذاری
یک خازن 20 میکروفاراد بین زمین و پایه ورودی قرار بده

به جای Toggle و حلقه از دستور

کد:
Portc.0 = Pina.0

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

بیسیک در ربات های ساده مشکلی ایجاد نمی کند
اما در ربات های پیشرفته و پیچیدهبیسیک جایگاهی ندارد
 

kaga

عضو جدید
1. کلید اصلا مهم نیست ... کاری هم به شکل و شمایل مدار ندارم ... چون اینو سریع فقط برای این تاپیک اماده کردم ... ولی چشم اینی که گفتید رو انجام دادم ...

2. معنی toggle دقیقا چیه ؟ ... من فقط تغییر وضعیت پورت رو شنیدم ... خوشحال می شم توضیح بدید

3. اینی که شما گفتید رو به برنامه اضافه کردم ... یعنی شرط و غیره رو برداشتم و دقیقا کد شما رو نوشتم ... ولی !!!! ... اینکه فقط چراغمون رو روشن می کنه !!!! ... من می خوام هر وقت دکمه رو فشار دادم وضعیت قبلی چراغ عوض بشه ... یعنی کلید دوکاره باشه ... یه بار فشار میدی ... اگه از قبل چراغ خاموشه روشن می شه ... اگه روشنه خاموش بشه ...

کد شما هم به نظر میاد فقط روشنش کنه ... یا شایدم تا وقتی دستم روی کلیده چراغ روشنه و وقتی نیست خاموشه ( که هم مقصود من نیست و هم تو شبیه ساز اینجوری اجرا نمی شه !!!!)

4. چشم ... نگران زبانش نباش ... هر دو تاش رو به اندازه کافی بلدم ... خودم یه پا کامپایلرم ;)
 

ROBOTICS

کاربر فعال مهندسی رباتیک
1- کلید بسیار مهم است. اگر اشتباه بسته شود کار نمی کند

2- معنی اش را درست گفتید بنابراین وقتی کلید را می زنید می بایست چشمک زن بشود. چون در هر لحظه تغییر وضعیت می دهد

3- کدی که گفتم وقتی دستم روی کلیده چراغ روشنه و وقتی نیست خاموشه
اگر می خواهید کلید اتوبوسی باشد بایستی تایمر و وقفه بگذارید
 

kaga

عضو جدید
ای بابا ... خودم فهمیدم چی شد ... موقعی که کلید رو میزنیم می شه 5 ولت که همون یک منطقیه ... وقتی کلید بر می گرده هیچی نیست .. ولی در اصل باید صفر ولت باشه که بشه صفر منطقی .. که چون نیست میکرو فکر می کنه همون یک منطقیه و هی تکرار می کنه ... وگرنه اون کد اولی من هم درست بود ...

فقط باید یه طوری صفر ولت رو هم در نظر می گرفتم که بقول شما می شه بستن کلید ... البته نه به اون سختی خازن و مقاومت ... چون با یه کلید زمین شده موازی با ورودی هم داستان برقراره

بهرحال ممنون
 

amin2005

عضو جدید
چند نکته

چند نکته

همیشه کاری کنید که کلید خروجی 0 ولت را به پین بده یعنی کلید در حقیقت فقط زمین کنه این طوری بحث نویز و این حرفا خاتمه می یابد و دیگه اینکه شما خیلی راحت برا مقاومت میتونید از مقاومت های پول اپ خود میکرو استفاده کنید نکته دیگه این که چرا دوست دارید خودتون را اذیت کنید خب برای این برنامه ساده یه دونه if استفاده کنید
سر بلند باسید
 
بالا