| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Бъг при PIC18F23K20 http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=9367 |
Страница 1 от 1 |
| Автор: | nikiforiv [ Съб Сеп 24, 2011 11:49 pm ] |
| Заглавие: | Бъг при PIC18F23K20 |
Онзи ден модифицирах програмата на един мой спиид контролер и неочаквано един софтуерен таймер започна да се държи странно. Вместо да генерира време около 4ms той работеше на около 30ms. Най интересното е че тази част от програмата въобще не беше пипана. Програмния код е: movff Spiid_Begin, Counter_Open_Loop Open_Loop_30 call T_x10us rcall Write_PWM decfsz Counter_Open_Loop, F bra Open_Loop_30 След доста опити открих че проблема е в оператора : movff Spiid_Begin, Counter_Open_Loop след като го замених с операторите: movf Spiid_Begin, W movwf Counter_Open_Loop програмата си заработи перфектно. Не можах да разбера в какви случаи не работеше, защото в старата версия на програмата moff си работеше а в новата не. Затова замених навсякъде moff със movf xx, W -> movwf xx В този контролер открих и още един бъг. Ако се вдигне с команда един бит на изходен порт, то за да се вдигне друг от същия порт, между двете команди не трябва да са една след друга а да има поне една друга команда между тях, например при : bsf Indikator_4erwen bsf Indikator_Vylt при така написани операторите жълтия индикатор няма да светне. За да светне жълтия индикатор часта от програмата трябва да се модифицира така: bsf Indikator_4erwen nop bsf Indikator_Vylt Предполагам че това се дължи на високата тактова честота, в случая 64Мхз. Не съм го пробвал при по ниска честота |
|
| Автор: | Cekins [ Нед Сеп 25, 2011 5:56 pm ] |
| Заглавие: | Re: Бъг при PIC18F23K20 |
Хм, мноо странно... Дори Movff би трябвало да работи по-добре, тъй като не е bank чувствителна команда. Втория ти проблем е така наречения Read-Modify-Write проблем. При такива операции от Microchip препоръчват да се ползват LATх регистрите И двата проблема нямат нищо общо със скоростта |
|
| Автор: | nikiforiv [ Сря Сеп 28, 2011 11:10 pm ] |
| Заглавие: | Re: Бъг при PIC18F23K20 |
Извинявам се, когато писах че жълтия индикатор няма да светне. В действителност няма да светне червеният, т.е. няма да се изпълни втората команда. Доколко това е Read-Modify-Write проблем или проблем на честотата мисля че е и двете. Направих си експеримент като пусках с различна тактова честота следния код: clrf PORTA nop btg Indikator_4erwen btg Indikator_Vylt call _100ms bra $-.8 При 64Мхз мигаше само жълтия индикатор, При 32Мхз отначало светнаха и двата индикатора като след това жълтия започна да мига а червения си остана постоянно светнат. При 16Мхз мигаха и двата индикатора т.е. на тази честота всичко беше както се очакваше. Благодаря за LATx регистъра, просто го бях забравил За movff командата аз също мисля че не е проблема в честота, просто грешно съм се изразил. Когато писах че мисля че проблема е в честотата имах предвид втория проблем не първия за което се извинявам. Проблема с movff може да се дължи на много причини: да се проявява при адресирането само на определени клетки и то при определено място от паметта ( в програмния ми код имах на различни места movff, но имаше проблем само с адресирането на една клетка и то след като модифицирах прогамата т.е. командата се премести на друго място в паметта ) Може би този бъг се появява и само при някой отделен чип, кой знай?! За всеки случай ще избягвам използването на тази команда или ако я използвам винаги ще имам едно на ум. |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|