| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Проблем със софтуерен ШИМ (PWM) [PIC16F84A] http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=10164 |
Страница 1 от 1 |
| Автор: | moschino [ Чет Май 24, 2012 2:25 pm ] | |||||||||
| Заглавие: | Проблем със софтуерен ШИМ (PWM) [PIC16F84A] | |||||||||
Здравейте всички Целта на изпитанието на което се подложих е да постигна нещо като това : http://www.instructables.com/id/Super-Easy-Reversible-Motor-Control-for-Arduino-/ или накратко да управлявам посоката и скоростта на електромоторче чрез микроконтролер (използвам PIC16F84A който няма вграден ШИМ и се налага това да бъде постигнато програмно). Схемата се състои от реле свързано със микроконтролера към порт Б и по-точно към пинове 1 и 2 (има и един светодиод свързан към пин 0 който използвам само за индикация на случващото се). При подаване на логическа "1" към пин 1 се включва моторчето , а при подаване на логическа "1" към пин 2 се променя посоката му на въртене .... осъществих схемата и всичко съм тествал и работи ,но имам голям проблем с част от програмата ... целта на програмата е следната : 1.моторчето се върти по часовниковата стрелка за определено време със скорост 100% 2.пауза 3.моторчето се върти по часовниковата стрелка за определено време със скорост 50% 4.пауза 5.моторчето се върти обратно на часовниковата стрелка за определено време със скорост 100% 6.пауза 7.моторчето се върти обратно на часовниковата стрелка за определено време със скорост 50% 8.пауза 9. всичко от начало се повтаря до безкрай а ето и какво се получава при мен: 1.моторчето се върти по часовниковата стрелка за определено време със скорост 100% 2.пауза 3.моторчето се върти по часовниковата стрелка за определено време със скорост 50% и програмата не продължава напред ... По пътят на логиката проблема на програмата ми е в броячът ("cou") който трябва да отчете кога подпрограмата за ШИМ ("pwmf50") да прехвърли управлението на главната програма - main. Ще може ли някой да помогне ? Ето и кодът (на пръв поглед изглежда сложен заради размерът му но всъщност има две подпрограми които се дублират/с разлика в стойностите/ и една главна програма - main):
ПП: Незнам как да постна кода така че директивите да са разделени на колонки |
||||||||||
| Автор: | CarBeta [ Чет Май 24, 2012 3:26 pm ] |
| Заглавие: | Re: Проблем със софтуерен ШИМ (PWM) [PIC16F84A] |
Ами няма да прескочи никога! Ти първо нулираш INTCON,T0IF и след това проверяваш дали е сетнат. Първо го провери и ако е сетнат тогава го нулирай и т.н. А и с cou имаш недомислица. Намаляваш го с 1 и направо излизаш от подпрограмата а би трябвало да излезеш като стане 0. А и така както си го декларирал няма адрес и е просто стойност, която никога няма да се намали. |
|
| Автор: | moschino [ Чет Май 24, 2012 5:03 pm ] | |||||||||||||||||||||||||||
| Заглавие: | Re: Проблем със софтуерен ШИМ (PWM) [PIC16F84A] | |||||||||||||||||||||||||||
Успях да изляза от ШИМ генератора и да се върна към основната програма и сега се изпълнява всичко от главната програма main (която се наложи да попроменя), но времето за което моторчето се върти със скорост 50% е много малко и не успявам да го променя ... ето каква е логиката ми :
т.е. следя за препълване на TMR0 , като проверявам бит T0IF дали е 1 или 0.Препълването би трябвало да отнеме около 43ms (поне толкова го сметнах но точното време не е от значение) т.е. T0IF става 1 и тогава намалям брояча (cou) с 1 , като същевременно проверявам дали брояча не е стигнал до 0 и когато това стане се връщам към главната програма. Следователно ако cou e 100 трябва да се върна към главната програма след 100 x 43ms = 4,3 секунди , а при мен се получава време от около 1 секунда (дори когато направя cou = 255).Или май трябва да зануля T0IF отново след като намаля cou с 1 ? Ето и main където нулирам TMR0 и бит T0IF преди да извикам подпрограма pwm50:
относно декларацията на брояча "cou" - така ли трябва да е ?:
Къде ми е грешката ? |
||||||||||||||||||||||||||||
| Автор: | moschino [ Чет Май 24, 2012 5:33 pm ] | |||||||||
| Заглавие: | Re: Проблем със софтуерен ШИМ (PWM) [PIC16F84A] | |||||||||
Готово Ето и кодът ако някой се интересува
|
||||||||||
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|