Отговори на тема  [ 3 мнения ] 
Бъг при PIC18F23K20 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Фев 11, 2010 1:16 pm
Мнения: 16
Мнение Бъг при 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Мхз. Не съм го пробвал при по ниска честота


Съб Сеп 24, 2011 11:49 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: Бъг при PIC18F23K20
Хм, мноо странно...

Дори Movff би трябвало да работи по-добре, тъй като не е bank чувствителна команда.

Втория ти проблем е така наречения Read-Modify-Write проблем. При такива операции от Microchip препоръчват да се ползват LATх регистрите :) Така или иначе подобна гимнастика е безсмислена, тъй като има начин и двата бита да се установят в една команда, макар и пак с две операции.

И двата проблема нямат нищо общо със скоростта :)


Нед Сеп 25, 2011 5:56 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Чет Фев 11, 2010 1:16 pm
Мнения: 16
Мнение 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, но имаше проблем само с адресирането на една клетка и то след като модифицирах прогамата т.е. командата се премести на друго място в паметта )
Може би този бъг се появява и само при някой отделен чип, кой знай?!
За всеки случай ще избягвам използването на тази команда или ако я използвам винаги ще имам едно на ум.


Сря Сеп 28, 2011 11:10 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 3 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни