با سلام من می خوام با میکرو avr موج pwm با فرکانس 100khzتولید کنم بغیر از میکرو tiny15 با کدوم میکرو میشه اینو درس کرد راهنمایی کنید
اطلاعیه
Collapse
No announcement yet.
ایجاد موج pwm با میکرو حدود 20khz
Collapse
X
-
پاسخ : ایجاد موج pwm با میکرو حدود 20khz
سلامنوشته اصلی توسط MOGTABAKITبا سلام من می خوام با میکرو avr موج pwm با فرکانس 20khzتولید کنم بغیر از میکرو tiny15 با کدوم میکرو میشه اینو درس کرد راهنمایی کنید
با بیشتر میکروها میشه ... از جمله :
.....,attiny10,13,20,2313,24,25,26
atmega8,16,32,64,128
و خیلی از میکرو های دیگه ...
-
پاسخ : ایجاد موج pwm با میکرو حدود 20khz
با سلام میشه کمی راهنمایی کنید اگه من کریستان 16 مگ به میکرو مگا 8 وصل کنم
pwmfrequncy=fosc/(510*prescale)
واگر prscaleبذارم رو عدد 1 فرکانس کاری من میشه 31.372khzیعنی بیشترین فرکانسی که میشه با مگا 8 ایجاد کرد اونم به صورت 8 بیت برای ایجاد فرکانس 50khzباید چیکار کنم آیا محاسبات من درسته با اون فرکانس میشه 31khz
بدس آورد یا کمتر میده لطفا راهنماییم کنید
دیدگاه
-
پاسخ : ایجاد موج pwm با میکرو حدود 20khz
از اونجایی که نمیشه با تایمر 8بیتی mega8 این pwm رو ایجاد کرد باید از تایمر 16 بیتی مگا8 استفاده کنید ...نوشته اصلی توسط MOGTABAKITبا سلام میشه کمی راهنمایی کنید اگه من کریستان 16 مگ به میکرو مگا 8 وصل کنم
pwmfrequncy=fosc/(510*prescale)
واگر prscaleبذارم رو عدد 1 فرکانس کاری من میشه 31.372khzیعنی بیشترین فرکانسی که میشه با مگا 8 ایجاد کرد اونم به صورت 8 بیت برای ایجاد فرکانس 50khzباید چیکار کنم آیا محاسبات من درسته با اون فرکانس میشه 31khz
بدس آورد یا کمتر میده لطفا راهنماییم کنید
با تایمر یک باید توی این مد و این حالات کار کنید
با فرکانس 16 مگاهرتز و تقسیم کننده 1 فرکانس تایمر میشه 16مگا ... 16مگا تقسیم بر 20000 میشه 800 و چون شمارش دیجیتال از صفر شروع میشه باید مقدار ICR1 را مساوی 799 قرار دهید (البته اگر رزولیشن برایتان خیلی مهم است با این حالت کار کنید)کد:// Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 2000.000 kHz // Mode: Fast PWM top=ICR1 // OC1A output: Non-Inv. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off
با فرکانس 16 مگاهرتز و تقسیم کننده 8 فرکانس تایمر میشه 2مگا ... 2مگا تقسیم بر 20000 میشه 100 و چون شمارش دیجیتال از صفر شروع میشه باید مقدار ICR1 را مساوی 99 قرار دهید ... مزیت این حالت این است که مقدار 0 تا 99 را به رجیستر OCR1AL میدهیم که دیگر نیازی به جداسازی مقادیر 16 بیتی به 8 بیتی نیست ... در اینجا میخواهیم با این روش کار کنیم ...
این هم برنامه
توجه داشته باشید که پین B1 خروجی تعریف شود ...کد:/***************************************************** Chip type : ATmega8 Program type : Application AVR Core Clock frequency: 16.000000 MHz *****************************************************/ #include <mega8.h> void main(void) { PORTB=0x00; DDRB=0x02; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 2000.000 kHz // Mode: Fast PWM top=ICR1 // OC1A output: Non-Inv. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x82; TCCR1B=0x1A; ICR1L=99; OCR1AL=50; while (1) { // Place your code here } }
راستی
میتوانید که دو خروجی هم بگیرید ...
سوالی بود در خدمتم
دیدگاه
-
پاسخ : ایجاد موج pwm با میکرو حدود 20khz
نوشته اصلی توسط MOGTABAKITتشکر میشه برنامشو به زبان بیسیک بنویسید آخه من از بعضی قسمت های برنامه سر در نیاوردمموفق باشیدکد:$regfile = "m8def.dat" $crystal = 16000000 Ddrb = 2 ' Timer/Counter 1 initialization ' Clock source: System Clock ' Clock value: 2000.000 kHz ' Mode: Fast PWM top=ICR1 ' OC1A output: Non-Inv. ' OC1B output: Discon. ' Noise Canceler: Off ' Input Capture on Falling Edge ' Timer1 Overflow Interrupt: Off ' Input Capture Interrupt: Off ' Compare A Match Interrupt: Off ' Compare B Match Interrupt: Off Tccr1a = &H82 Tccr1b = &H1A Icr1l = 99 Ocr1al = 50 Do Loop End
دیدگاه




دیدگاه