Микроконтролери и електроника
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/