ايران ويج

نسخه‌ی کامل: استفاده از مد sleep
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام.میخوام بدونم چطور در طول برنام میشه از مد sleep استفاده کرد.فرض کنید من یه برنامه دارم حالا میخوام قبل از یه دستور مد sleep رو فعال کنم و بعد از اجرای اون خط از دستور دوباره از حالت sleep خارج بشم
در مود sleep هیچ دستوری اجرا نمی شه و با وقفه های مشخصی برنامه از sleep خارج میشه و شروع می کنه به ادامه ی کار
توی بسکام کافیه دستور sleep رو توی هلپش سرچ کنی و برای دستور های C باید توی دستاشیت نمونه برنامه هاش رو ببینی
ممنون.راستش میخوام دمای یک دستگاه رو (البته خیلی حساسه)با سنسور اندازه بگیرم.حالا میخوام زمانی که نمونه برداری ولتاژ میکنم سایر برنامه ها غیر فعال بشن(مد pwm هم نو برناه فعاله.واسه راه اندازی یه موتور)تو help سرچ کردم چیز خاصی ندیدم.راستی باید فیوزبیتها رو هم دستکاری کنم؟
کاری به فیوزبیت ها نداره
---
برای این کار شما دقیقا بعد از دستور getadc دستور idle رو بزار
البته قبلش وقفه adc رو فعال کن و توی تابعش فقط return بزار
البته برای استفاده از خود مود adcnoise باید با ریجیستر ها کار کنی و خود بسکام نمی تونه کاری بکنه
ولی این کاری که من گفتم رو بکنی خیلی تفاوتی ایجاد نمی کنه
پس باید رو ریجسترها کار کنم؟حالا اگه بخوام با c این کار رو انجام بدم چی؟بازم مثل بسکام داستان در میاره؟

یکم در مورد ریجسترها توضیح کوچولو میدی؟
اگه برنامتو نوشتی با IDLE یه تستی بزن ببین چطوریه
اما اگه نه می تونی بجای دستورات بسکام از ریجیستر ها استفاده کنی
اگه کلا می خوای با C هم می تونی بنویسی
برای C از کدویژن استفاده کن دیگه کدو بهت میده شما فقط استفاده کنBiggrin
---------------
ریجیستر ها
کد:
ADMUX – ADC Multiplexer Selection Register
کد:
1-Bit 7:6 – REFS1:0: Reference Selection Bits
اینا مشخص می کنن که مرجع ADC چی باشه
0 -> AREF
1 -> AVCC
3 -> 2.56 داخلی
که چون باید 2 بیت آخر این ریجیستر باشن باید 6 بیت به چپ شیفت داده بشن یعنی تبدیل میشن به
0 و 64 و 192
کد:
2-Bit 5 – ADLAR: ADC Left Adjust Result
اگه اینو یک کنی طرز قرار گیری داده ها در ریجیستر هایی که نتایج ADC رو نشون میدن برعکس میشه
بیشتر مال موقعی هست که 8 بیتی از ADC استفاده می شه و در نتیجه فقط یک ریجیستر خونده بشه
شما اینو صفر بزار برای اطلاع بیشتر به دیتاشیت مراجعه کن مثال زده
کد:
3-Bits 4:0 – MUX4:0: Analog Channel and Gain Selection Bits
این پایه اندازگری و یا گین رو در مود Diff مشخص می کنه
که شما در مود معمولی داری از ADC استفاده می کنی
کلا 0 بدی پایه صفر 1 بدی پایه 1 و ... 7 بدی پایه هفتم رو اندازه گیری می کنه
۰
پس کلا این ریجیستر 3 نوع چیزو کنترل می کرد دومی که صفر شد اولی رو که انتخاب کردی باید توی یه متغییر ذخیرش بکنی
بعد با شماره پایه ای که می خوای اندازگیری کنی جمع کنی و به این ریجیستر بدی
مثلا اگه پایه 3 رو میخوای اندازه بگیری و مرجع هم AVCC هست پس میشه
کد:
ADMUX = 64 + 3
----
کد:
ADCSRA – ADC Control and Status Register A
کد:
1-Bit 7 – ADEN: ADC Enable
این بیت که 1 بشه ADC فعال میشه
(مثل start adc توی بسکام)
کد:
2-Bit 6 – ADSC: ADC Start Conversion
این بیت که یک بشه شروع به اندازه گیری می کنه
کد:
3- Bit 5 – ADATE: ADC Auto Trigger Enable
این مال وقتی هست که ADC قرار هست خودکار اجرا بشه کاری بهش نداریم برای اطلاع بیشتر به دیتاشیت مراجعه کنید
کد:
4-Bit 4 – ADIF: ADC Interrupt Flag
این مشخص می کنه که اینتراپت ADC رخ داده و داده های جدید بدست اومدن وقتی بردار وقفه اجرا بشه این بیت صفر می شه
کد:
5-Bit 3 – ADIE: ADC Interrupt Enable
وقتی این بیت یک بشه وقفه ADC فعال میشه
کد:
Bits 2:0 – ADPS2:0: ADC Prescaler Select Bits
این بیت ها کلاک ADC رو تعیین می کنن
2 به توان مقدار این ریجیستر تقسیم میشه بر کلاک اصلی و تبدیل میشه به کلاک ADC
مثلا اگه 16 مگا هرتز باشه کلاک اصلی و این بیت ها برابر 4 باشن
2 به توان 4 میشه 16
16 مگا تقسیم بر 16 میشه 1 مگا
پس ADC با سرعت 1 مگاهتز اجرا میشه
کد:
ADCL and ADCH – The ADC Data Register
این دوتا ریجیستر هم داده های ADC رو ذخیره می کنن
کد:
SFIOR – Special FunctionIO Register
این رجیستر هم کاربری برای ما نداره برای اطلاعات بیشتر به دیتاشیت
توی C که براش کلی مثال هست اما اگه می خوای توی بسکام از اینا استفاده کنی یه مثال برات می نویسم
کد:
$regfile = "m8def.dat"
$crystal = 16000000
Const Adc_ref = &H40                                        'AVCC
Enable Interrupts
On Adc Adc_isr
Dim Adc_val As Word
Admux = Adc_ref                                             'set Ref
Adcsra = &H8F                                               'set clock 125KHz - enable adc - enable adc int
Do
Admux = Adc_ref + 3                                         'get adc3
Waitus 10                                                   'wait to stable input
Adcsra = Adcsra Or &H40                                     'start convert
Config Powermode = Adcnoise
'adc_val ready
Loop
End
Adc_isr:
Dim T As Word
Adc_val = Adcl
T = Adch
Shift T , Left , 8
Adc_val = Adc_val + T
Return