امتیاز موضوع:
  • 2 رأی - میانگین امتیازات: 3.5
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل در تولید PWM 38khz با تایمر میکرو
نویسنده پیام
HamidSay آفلاین
كاربر تک ستاره
*

ارسال‌ها: 57
موضوع‌ها: 12
تاریخ عضویت: دى ۱۳۹۲

تشکرها : 44
( 34 تشکر در 23 ارسال )
ارسال: #1
مشکل در تولید PWM 38khz با تایمر میکرو
سلام، من یه مدتی هست که میخوام خودم موج مادون قرمز تولید کنم برا اینکه rc5 همین طور که خودتون میدونین خیلی سخته که اطلاعاتو درست رد و بدل کنه...
خلاصه من میخوام خودم موج 38 کیلو تولید کنم; اول رفتم سراغ تایمر معمولی و تقسیم کنننده رو 1 دادم و مقدار تایمرم با حساب اینکه 65430 = 106 - 65536 بدست آوردم که هر بار با سرریز شدن دوباره 65430 میشد، ولی وقتی تو پرئوتس اجراش کردم دیدم که هر سیکلش 64 میکرو ثانیه شد! Amaze آقا ما هرچی سعی کردیم کوچیکش کنیم نشد که نشد Angry
بعد رفتم رو pwm، ی کم سرچ کردم درموردش دیدم که تو مثالای C میگه که
(F(pwm)= clk\(prescale*time number که تو وقفه ی سرریز هر بار x رو یه عدد خاصی میکرد مثلا تو تایمر یک time number = 65536 - x بعد من همینو تو بسکام نوشتم ولی بازم 64 میکرو ثانیه بدست اومد....
سرتونو درد نیارم دیگه دارم روانی میشم از دست این میکرو و برنامه نویسی، لطفا کمک کنین فقط توضیح میخوام همین.
براچی وقتی مقدار تایمرو کاهش میدم، از یه حدی سیکل بزرگتر میشه؟
اصلن این rc5 چجوری این موجو تولید میکنه؟ آخه rc5 رو هم امتحان کردم 28 میکرو ثانیه بود سیکلشSadAngry[/size][/color]
۲۰-مرداد-۱۳۹۳, ۱۵:۱۰:۲۰
ارسال‌ها
پاسخ
تشکر شده توسط : orange signal
HamidSay آفلاین
كاربر تک ستاره
*

ارسال‌ها: 57
موضوع‌ها: 12
تاریخ عضویت: دى ۱۳۹۲

تشکرها : 44
( 34 تشکر در 23 ارسال )
ارسال: #2
RE: مشکل در تولید PWM 38khz با تایمر میکرو
خب دوستان، مثل اینکه کسی نتونست جواب من رو بده، ولی از اونجایی که من براحتی بیخیال چیزی نمیشم خودم گشتم و درمورد pwm تحقیق کردم و چنتا pdf که برا زبان c بود خوندم که زیاد شبیه بسکام نیس ولی تونستم با تغییر ریجستری ها موج 38khz خودمو درست کنم که اینجا فایل پرئوتس با کد بسکام برنامه ای که خودم درست کردم و مثل یه پروتکل کار میکنه
امیدوارم به دردتون بخوره و مثل من سرگردون نشید اینقدر، هرچند باید بگم که با روش تولید rc5 کلی فرق داره که این روش با دو پورت ocr1a و ocr1b کار میکنه ولی rc5 فقط ی پایه داره که یعنی اینکه هنوز جا واسه کار هست...

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

کد:
$regfile = "m8def.dat"
$crystal = 8000000

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
Tccr1a = &B00000011
Tccr1b = &B00011001
Ocr1a = 210
Ocr1b = 80
Ddrb.1 = 1 : Set Portb.1
Ddrb.2 = 1 : Set Portb.2
Dim A As Byte , B As Byte , C As Bit , D As Byte , E As Byte , F(3) As Byte

A = 0 : C = 0
Ddrd.1 = 0 : Portd.1 = 1
Ddrd.2 = 0 : Portd.2 = 1
Ddrd.3 = 0 : Portd.3 = 1
Ddrd.4 = 0 : Portd.4 = 1
Do
Debounce Pind.1 , 0 , Al1
Debounce Pind.2 , 0 , Al2
Debounce Pind.3 , 0 , Al3
Debounce Pind.4 , 0 , Al4
Hh:
Loop


Al1:
F(1) = 1 : F(2) = 0 : F(3) = 0
Goto Leader

Al2:
F(1) = 0 : F(2) = 1 : F(3) = 0
Goto Leader

Al3:
F(1) = 0 : F(2) = 0 : F(3) = 1
Goto Leader

Al4:
F(1) = 1 : F(2) = 1 : F(3) = 0
Goto Leader


Leader:
D = 0
B = 0
Tccr1a = &B11110011
Waitus 1560
Tccr1a = &B00000011
B = 0
Waitus 364
Incr D
Goto Check


Address:
Tccr1a = &B11110011
Waitus 780
Tccr1a = &B00000011
Waitus 364
Incr D
Goto Check


Comm1:
Tccr1a = &B11110011
Waitus 390
Tccr1a = &B00000011
B = 0
Waitus 364
Incr D
Goto Check



Comm0:
Tccr1a = &B11110011
Waitus 390
Tccr1a = &B00000011
B = 0
Waitus 728
Incr D
Goto Check


Check:
Select Case D
Case 1
Goto Address
Case 2
If F(1) = 0 Then
  Goto Comm0
Else
  Goto Comm1
End If
Case 3
If F(2) = 0 Then
  Goto Comm0
Else
  Goto Comm1
End If
Case 4
If F(3) = 0 Then
  Goto Comm0
Else
  Goto Comm1
End If
Case 5
Goto Comm0
Case 6
Goto Hh
End Select

Frequency(Bascom+Prot)
۲۳-مرداد-۱۳۹۳, ۰۱:۵۰:۰۷
ارسال‌ها
پاسخ
تشکر شده توسط : babyy, رسول, a.mehran
HamidSay آفلاین
كاربر تک ستاره
*

ارسال‌ها: 57
موضوع‌ها: 12
تاریخ عضویت: دى ۱۳۹۲

تشکرها : 44
( 34 تشکر در 23 ارسال )
ارسال: #3
RE: مشکل در تولید PWM 38khz با تایمر میکرو
سلام دوستان امروز تونستم با تغییر رجیستری TCCR1A و OCR1A فقط با یک پایه OCR1A موج 38khz رو تولید کنم...
فقط فرقش با اولی اینه که تو اولی duty cycle متغیره و میشه از رابطه ی DUTY CYCLE = OCR1B / OCR1A * 100 که تو مثال قبل میشه 80/210*100= 38.09 ولی در این مثالی که براتون میزارم میزان Duty cycle فقط 50 هستش و نمیشه تغییرش داد

تذکر : تو مثال اول هیچ وقت با Stop Timer1 کار نکنید که بعدش اگه Start Timer1 رو بزنین تداخل موج به وجود میاد
درمورد رجیستری TCCR1A و TCCR1B هم اگه کسی سوال داشت بپرسه شاید بتونم کمک کنم ولی بهتره خودتون بگردین پیدا کنینشون.
کد:
$regfile = "m8def.dat"
$crystal = 8000000

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
Tccr1a = &B00000011
Tccr1b = &B00011001
Ocr1a = 104
Ddrb.1 = 1 : Set Portb.1
Ddrb.2 = 1 : Set Portb.2
Dim A As Byte , B As Byte , C As Bit , D As Byte , E As Byte , F(3) As Byte

A = 0 : C = 0
Ddrd.1 = 0 : Portd.1 = 1
Ddrd.2 = 0 : Portd.2 = 1
Ddrd.3 = 0 : Portd.3 = 1
Ddrd.4 = 0 : Portd.4 = 1
Do
Debounce Pind.1 , 0 , Al1
Debounce Pind.2 , 0 , Al2
Debounce Pind.3 , 0 , Al3
Debounce Pind.4 , 0 , Al4
Hh:
Loop


Al1:
F(1) = 1 : F(2) = 0 : F(3) = 0
Goto Leader

Al2:
F(1) = 0 : F(2) = 1 : F(3) = 0
Goto Leader

Al3:
F(1) = 0 : F(2) = 0 : F(3) = 1
Goto Leader

Al4:
F(1) = 1 : F(2) = 1 : F(3) = 0
Goto Leader


Leader:
D = 0
B = 0
Tccr1a = &B01000011
Waitus 1560
Tccr1a = &B00000011
B = 0
Waitus 364
Incr D
Goto Check


Address:
Tccr1a = &B01000011
Waitus 780
Tccr1a = &B00000011
Waitus 364
Incr D
Goto Check


Comm1:
Tccr1a = &B01000011
Waitus 390
Tccr1a = &B00000011
B = 0
Waitus 364
Incr D
Goto Check



Comm0:
Tccr1a = &B01000011
Waitus 390
Tccr1a = &B00000011
B = 0
Waitus 728
Incr D
Goto Check


Check:
Select Case D
Case 1
Goto Address
Case 2
If F(1) = 0 Then
  Goto Comm0
Else
  Goto Comm1
End If
Case 3
If F(2) = 0 Then
  Goto Comm0
Else
  Goto Comm1
End If
Case 4
If F(3) = 0 Then
  Goto Comm0
Else
  Goto Comm1
End If
Case 5
Goto Comm0
Case 6
Goto Hh
End Select

رسیدن به آرزو لذت بخشه، اما تلاش برای رسیدن به آرزو لذت بخش ترین قسمت زندگیه...
۲۳-مرداد-۱۳۹۳, ۱۱:۴۸:۲۹
ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  مشکل در پاک کردن برنامه میکرو Salam7 1 398 ۲۹-بهمن-۱۴۰۰, ۲۲:۵۰:۴۴
آخرین ارسال: 1نفر
  مشکل برنامه تایمر با بیسکام soy1345 7 2,026 ۲۲-فروردین-۱۳۹۸, ۲۰:۴۸:۰۶
آخرین ارسال: 1نفر
  مشکل در کار با تایمر 1 در بسکام klick 3 4,535 ۳۰-بهمن-۱۳۹۵, ۰۴:۰۴:۴۲
آخرین ارسال: omid_phoenix
  مشکل دریافت متن از پورت سریال میکرو sajadcut 1 3,260 ۱۲-آبان-۱۳۹۵, ۲۲:۱۰:۲۳
آخرین ارسال: behzady
  تست میکرو saber.k 10 14,048 ۰۹-شهریور-۱۳۹۵, ۰۲:۰۹:۲۷
آخرین ارسال: yadulla fazel
  مشکل در هنگام بوت شدن ویندوز و اجرای دستورات میکرو unforgiven 3 3,732 ۳۱-مرداد-۱۳۹۵, ۱۹:۴۷:۲۵
آخرین ارسال: unforgiven
  مشکل در ساخت تایمر لطفا کمک کنید omidsafari 8 6,502 ۰۹-مرداد-۱۳۹۵, ۱۷:۲۸:۰۹
آخرین ارسال: omidsafari
  [سوال] پیکربندی تایمر mostafa-m 5 4,271 ۲۹-خرداد-۱۳۹۵, ۲۲:۴۸:۰۷
آخرین ارسال: mostafa-m
  مشکل ارتباط میکرو با ماژول sim908 saba7darya 15 8,907 ۳۰-اردیبهشت-۱۳۹۵, ۱۰:۱۸:۰۵
آخرین ارسال: sharin
  راهنمایی برای تولید پالس vistac2000 15 17,041 ۰۸-اردیبهشت-۱۳۹۵, ۰۰:۳۹:۴۶
آخرین ارسال: omid_phoenix

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 3 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS