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