| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| CCS #use delay проблем s 16F721 http://mcu-bg.com/mcu_site/viewtopic.php?f=14&t=18397 |
Страница 1 от 1 |
| Автор: | ToHu [ Съб Юни 04, 2022 7:09 pm ] |
| Заглавие: | CCS #use delay проблем s 16F721 |
Не че не съм на път да си напиша мой delay но рядко изобщо използвам delay и не съм се занимавал. Та как ли не го конфигурирах това но не може да докарам да генерира закъснение дори близо до това което се очаква. Подозирам проблема е свързан с реазлизация на клока при конкретният контролер, има 500 khz вътрешен генератор, PLL х32 и постскалер, съответно варианта е или 500 khz и съответно надолу до 62.5 или 16, 8 , 4,2 Mhz. PLL-а се управлява от конфигурационната дума и там нещата изглеждат наред. Реално и честотата си е наред, пускам го на 2 Mhz, и поне последно като гледах със скопа на толкова си и работи. Проблема обаче е в калкулацията на времената за delay_ms, изчислява ги за всичко друго но не и за 2 Mhz : #use delay(internal=2 Mhz, RESTART_WDT) генерира делей като за'8 Mhz' 16 Mhz клок #use delay(internal = 500khz, clock=2000000, RESTART_WDT) това също работи като за '8Mhz' 16 Mhzклок Опитах и всякакви други комбинации но резултата е един и същ. 'Сега защо генерира за 8Mhz не ми е ясно, след като изхода на PLL е 16'. Опитах да го излъжа, че работи на 500 khz но плаче когато сетвам осцилатора на 2 и 8 mhz. Сетването може да го направя и с моя функция, но пък задам ли му 500 khz бута и конфигурационната дума. Реално дори като го направи на 500 khz, delayпродължава да го смята на 8 Mhz база и от 4 пъти по-дълго става 20 пъти по-дълго Не, че толкова ми пречи, но дразни, иначе има 1000 workarounda, ама защо не се конфигурира както си трябва. Някой борил ли го е това? едит .. нещо ми куца умножението, 2х8 е 16, та за 16 Mhz клок се сетва, това в апострофите е старото ми писание, ама да не го трия ако някой вече го е чел. |
|
| Автор: | ToHu [ Съб Юни 04, 2022 7:25 pm ] |
| Заглавие: | Re: CCS #use delay проблем s 16F721 |
p.s. сега като гледам какво генерира като asm, доколкото броя цикъла за 1 ms трае общо 3850 такта, вътрешния е BF или 191 х4 което е 764 и във външния цикъл са още 6 инструкции или общо 5 х 770. Грубо това прави 1 мс при 16 Mhz, което пък няма нищо общо с това което виждам в анализатора, там 100 ms ги генерира като 800 ms, т.е. ... а да бе, аз горе съм писал глупости, 8 пъти разлика, т.е. не 8 а 16 Mhz ... 00F7: MOVLW AA 00F8: MOVWF 04 00F9: BCF 03.7 00FA: MOVF 00,W 00FB: BTFSC 03.2 00FC: GOTO 10E 00FD: MOVLW 05 00FE: MOVWF 78 00FF: MOVLW BF 0100: MOVWF 77 0101: CLRWDT 0102: DECFSZ 77,F 0103: GOTO 101 0104: DECFSZ 78,F 0105: GOTO 0FF 0106: MOVLW 2E 0107: MOVWF 77 0108: DECFSZ 77,F 0109: GOTO 108 010A: NOP 010B: CLRWDT 010C: DECFSZ 00,F 010D: GOTO 0FD 010E: RETURN |
|
| Автор: | ToHu [ Съб Юни 04, 2022 8:24 pm ] |
| Заглавие: | Re: CCS #use delay проблем s 16F721 |
Така май го излъгах : #use delay(internal=16Mhz, clock=2000000, RESTART_WDT) Така написано генерира правилен код за 1 мс : 00F7: MOVLW AA 00F8: MOVWF 04 00F9: BCF 03.7 00FA: MOVF 00,W 00FB: BTFSC 03.2 00FC: GOTO 104 00FD: MOVLW A5 00FE: MOVWF 77 00FF: DECFSZ 77,F 0100: GOTO 0FF 0101: CLRWDT 0102: DECFSZ 00,F 0103: GOTO 0FD 0104: RETURN Никъде не намирам точно описание как тия параметри работят, ама не ми се и рови да търся, явно за чипове с PLL това е начина, въпреки, че чета по форума на CCS че и с такова сетване има проблеми, но като гледам са тия в които PLL може да го ръчкаш софтуерно а не е в конфигурационната дума. |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|