|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 11:20 pm
| Автор |
Съобщение |
|
Gogo
Ранг: Форумен бог
Регистриран на: Чет Фев 24, 2005 11:41 pm Мнения: 1049 Местоположение: Pz
|
Това дали ще ти зареди таймера? На 18-ките таймерите (без таймер2) се зареждат при запис в TMR0L. Преди това трябва да се зареди старшия байт. Тука не виждам токова нещо. Може би заради това ти греши. А може и аз да не съм видял нещо...
|
| Пет Сеп 16, 2005 8:33 pm |
|
 |
|
VSU
Ранг: Напреднал
Регистриран на: Нед Авг 14, 2005 1:08 pm Мнения: 433 Местоположение: Казанлък
|
Pirev Gogo e prav ti napravo mi razbi ponjatieto za prekusvane na tmr1 s 32768 kvarc kak taka shte ti gubi na 2-3 4asa 2-3 min imam si 4asovni4e s takuv kvarc na mesec mi dava -1-2 min razlika ama na mesec ne na 2-3 4asa ajde opravi si softa i stiga ste pluli po PIC ne sa tooooolkova loshi imat si problemi ama 4ak puk takiva 
|
| Пет Сеп 16, 2005 9:22 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Без да се сърдите, ама и 2-мата не четете документацията за процесорите  . Може и програмния код да не сте разгледали добре. Когато е вдигнат бит 7 на T1CON, тогава TMR1 се разглежда като 16-битов таймер, като първо се чете/записва TMR1H, след което по време на четене/запис на TMR1L се прехвърля от временния буфер на TMR1H и реалната ст-ст на TMR1H, т.е. получава се 16-битово четене, без да се налага допълнителна проверка, дали по време на четенето на TMR1L не се е променила ст-ста на TMR1H. Това важи за PIC18 серията. Ако обаче бит 7 на T1CON си е в 0, то четенето/писането на TMR1 си е както при PIC16, т.е. моят код си работи та пушек се вдига. Прочетете и 80233a.pdf, преди да хвалите MicroChip. Там самите "мастори" на професорите си описват, защо TMR1 изостава, когато се използва с външен кварц. Ако презаредиш TMR1H след първите 15-тина us, след възникването на прекъсването, TMR1L изпуска тактовите сигнали на кварцовия осцилатор. Ако прекъсването ти е на 1 секунда, нормално е да не се забележи, но когато ти е на 7.8125ms, можете да си представите защо за 2-3 часа, часовника изостава с 2-3 минути. Ако сте си правили часовник с този таймер, просто го направете да генерира прекъсване на 7.8125ms ( до 1 секунда ще Ви трябва и софтуерен брояч на 128 ), правете закъснение от 20-тина микросекунди, преди да презаредите TMR1H и сами ще се убедите в това. При мен забавянето на презареждането на TMR1H се получава, защото имам още 2 прекъсвания, които изяждат тези 15-тина микросекунди.
Хайде наслука, друг път четете по-внимателно документацията
P.P. Оппа, до една секунда с прекъсване през 7.8125ms трябва да имате брояч на 256.
П.П. Последно, вярното е 128. Sorry.
Последна промяна ¶ на Съб Сеп 17, 2005 1:00 pm, променена общо 1 път
|
| Пет Сеп 16, 2005 9:44 pm |
|
 |
|
Gogo
Ранг: Форумен бог
Регистриран на: Чет Фев 24, 2005 11:41 pm Мнения: 1049 Местоположение: Pz
|
Прав си Пирев,
Е на това:
не съм му обърнал внимание...
|
| Съб Сеп 17, 2005 10:51 am |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
Ako si namerish KVARC(32768) a ne kvarcov REZONATOR - moje i da stane....
|
| Съб Сеп 17, 2005 11:14 am |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Пирев, не ми се смей, ама аз пак не разбрах защо имаш такъв проблем. По-точно, какво налага ползването на 16-битов брояч? Не става ли с прескелер и 8-битов? За 256 даже не е необходим прескалер. А за 1 секунда си правиш един софт брояч до колкото трябва. Всякакви проблеми с латентности и приоритети отпадат. Правил съм такова нещо с ПИК 16 и никакви проблеми не съм имал. Часовникът върви толкова точно, колкото е точен кристалът. Проблем може да възникне само, ако не можеш да облужиш прекъсването за 7 милисекунди, ама това е друг проблем.
|
| Съб Сеп 17, 2005 11:56 am |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
От постовете ми е от ясно по-ясно ,че работя с кварцов кристал 32.748 kHz, от Комет Електроникс. Явлението с изоставането на часовника, не зависи от това дали използваш кварц, резонатор или външен тактков сигнал !
|
| Съб Сеп 17, 2005 12:03 pm |
|
 |
|
Edesign
Ранг: Форумен бог
Регистриран на: Сря Авг 31, 2005 1:57 pm Мнения: 1103
|
Pirev е изключително прав аз още преи 20тина поста казах че ще има проблеми ако правим часовник....... Не знам колко изцяло завършени устройства имате тези които постване но аз имам десетки така че не е достатъчно просто да подкараш някакво си прекъсване или част от програма когато се завърши цялото устройство може да се каже да направих ги и свичко е ОК ----> иначе си е чисто 4ешане на езика 
|
| Съб Сеп 17, 2005 12:13 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
prescaler нямам, т.е. има си но е 1:1. Проблема е че искам да използвам sleep режима на процесора, като на TMR1 да ми са навързани часовник реално време + динамично управление на LCD 4-ри разредна индикация. Правя си TMR1 за прекъсване на 7.8125ms, което за електрода Back Plane на LCD-то си е честота 64 Hz ( две прекъсвания правят един период за LCD-то ), след което със брояч си отчитам 1 секунда. И аз си мислех, че проблем няма да има, тъй като след прекъсването на TMR1 имам точно 7.8125ms преди да му презаредя TMR1H. Но проблем има, защото от MicroChip казват, че след възникване на прекъсването от TMR1, а то възниквало на предния фронт на сигнала от 32.768 kHz, трябвало още преди да дойде следващото високо ниво на сигнала 32.768 kHz да бъде презареден TMR1, независимо дали ще пипаш само TMR1H или и TMR1L. Ако презаредиш TMR1 след този импулс, TMR1L си променял съдържането, като пропускал импулси от 32.768kHz, което си е точно изоставянето на часовника, за справка документ http://ww1.microchip.com/downloads/en/D ... 80233a.pdf ,страница 2.
При положние, че работя с основна тактова честота от 2.45MHz, или една инструкция ми е 1.632 us, а трябва най-късно до следващия високо плато на импулса от 32.768kHz да презаредя TMR1, е ясно, че дори да нямам други прекъсвания, пак няма да смогна, защото имам и няколко инструкции, с които се запазва стека, прави се проверка откъде е прекъсването и т.н.
Като вдигна основната честота над 4MHz и нямам други прекъсвания, проблем няма, работи си точно,защото имам време да реагирам. Само че на мен не ми трябва по-висока честата, поради съображения за консумация ( процесора се храни от батерия ). Реших да използвам възможността за приоритетите в прекъсванията, обаче се оказа, че и там има проблеми ( препълване на стека ! ) . После реших да използвам сигнала от TMR1 като основен, което е една възможност на PIC18F252, обаче и там има бъг, при който бъг вместо да ми падне консумацията, тя се увеличи. Въобще къде пипна по тоя процесор все нещо изниква.
Проблема засяга следните процесори: ( тъй като PDF документа е заключен и не мога да направя Copy/Paste списъка е в jpg формат )
Последна промяна ¶ на Съб Сеп 17, 2005 12:57 pm, променена общо 2 пъти
|
| Съб Сеп 17, 2005 12:27 pm |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
void isrhandler(void)
{
_asm goto isr _endasm
}
#pragma code
void isr(void){ //T1_16BIT_RW 16-bit mode
static unsigned char counter = 128;
WriteTimer1(0xFF27); // 7.812500
PIR1bits.TMR1IF=0;
if( --counter ) return;
counter = 128;
}
|
| Съб Сеп 17, 2005 12:51 pm |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
void isrhandler(void)
{
_asm goto isr _endasm
}
#pragma code
void isr(void){//T1_8BIT_RW 8-bit mode
static unsigned char counter = 128;
WriteTimer1(0xFF00); // 8.941650
PIR1bits.TMR1IF=0;
if( --counter ) return;
counter = 128;
}
|
| Съб Сеп 17, 2005 12:53 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Съгласен съм ( без бой ), само че добави delay_us(20) така:
и сподели после какво става 
|
| Съб Сеп 17, 2005 12:56 pm |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
v momenta me myrzi da si analiziram sorsa - gorniia
Prosto go napisah i go zasiakoh s Debugera - StopWatch
Neshto greshkata ti e s prezarejdaneto na TMR0 = 0xFF00 vs 0xFF27
|
| Съб Сеп 17, 2005 12:59 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Нямам никъде зареждане с 0xFF27 ! Имам зареждане на TMR1H само с 0xFF, тъй като ако правя презареждане на TMR1L, а се замотавам из другите прекъсвания, ще получа още по-голяма неточност.
Тъй като виждам, че все още не ми вярвате, прочетете http://ww1.microchip.com/downloads/en/D ... 80233a.pdf . Там MicroChip си признават ...
На симулатора няма как да имитираш реалните условия и бъговете в процесора. И аз като пусна моят си код през симулатора всичко си работи.
|
| Съб Сеп 17, 2005 1:04 pm |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
ami s 0xFF00 INTa ti e na 8.941650 mS
sys 0xFF27 INTa ti e na 7.812500 mS
VIJ: pusni si debugera s F = 4*32768
napravi TMR1 da e ot internal
sloji Breakpointers i ako ne viarvash - meri.....
|
| Съб Сеп 17, 2005 1:08 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 1 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|