|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 1:43 am
| Автор |
Съобщение |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
4 / ( 4 * 32768 ) = 30.517 микросекунди * 256 = 7.8125 милисекунди. Нещо не ти е верен симулатора ! Ето снимка от моят и там си е пак 7.8125 милисекунди. Точно както и ти симулираш с честота 4 * 32 768 + вътрешен клок.
|
| Съб Сеп 17, 2005 1:16 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Като направя, например така:
във всяко прекъсване на TMR1, с 4MHz основен кварц и без други прекъсвания на RA.5 на честотомера ми се изписва 128 херца. Ако направя това което ти казваш, а именно 0xFF27, на RA.5 ми излиза 151.00 херца
П.П. Пак грешка, бил съм без делителя на 2 на честотомера, не 128 херца ми излиза, а 64, което е нормално, тъй като PORTA ^= 0b00100000, го правя със 128 херца, но на пина излиза 64Hz. А с 0xFF27 като го меря ми излиза 75.6 Hz на честотомера, което значи че прекъсването на TMR1 е на 6.65359 милисекунди, или часовника ще избързва, и то с много.
Последна промяна ¶ на Съб Сеп 17, 2005 1:38 pm, променена общо 1 път
|
| Съб Сеп 17, 2005 1:20 pm |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
!?!
|
| Съб Сеп 17, 2005 1:34 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
@TheWizard, греши ти симулатора. Закъснението при 0xFF27, prescaler 1:1 и 32.768 kHz external crystal за TMR1 е: ( 256 - 39 ) / 32768 = 0.006622314, или 151.0046083 Hz !
При 0xFF00 e: ( 256 - 0 ) / 32768 = 7.8125ms, или 128 Hz.
Това че на твоя симулатор излиза нещо друго си е проблем вече в симулатора ти. Или не засичаш правилно времето. След като стигнеш до реда: TMR1H = 0xFF; изпълни по стъпки програмата и след 256 инструкции пак ще си там. Това е ясно като бял ден, не знам защо изобщо спориш.
|
| Съб Сеп 17, 2005 1:46 pm |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
Greshkata e moia - PICa e druga 18ka
a ti kato poluchavash 7.812500 zashto izpisa 4 lista posting
|
| Съб Сеп 17, 2005 1:59 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
И друга 18-ка да е , TMR1 пака работи по същия начин. Изписах ги, но защо ли ги изписах, след като не четете. Ако пак ги прочетеш, ще разбереш защо изостава. Пък и линк към документа на MicroChip 2 пъти пратих, дано някой седне да го прочете.
|
| Съб Сеп 17, 2005 2:02 pm |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
Ami shte izostavia kak niama da izostavia - kogato vliza v prekysvane imash 1-2 takta dokato vleze v prekysvane
Ot tam se natrupva greshkata...
|
| Съб Сеп 17, 2005 2:05 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
@TheWizard, нали всеки път си отместен във времето със същия брой инструкции. Спрямо едно фиксирано начало във времето, винаги ще имаш тези инструкции.
Истината е много проста, TMR1 си иска незабавно презареждане в първите 15.25 микросекунди, след възникване на препълването и това си е хардуерна особеност. Забавиш ли се след това време да го презареждаш, RTC ти започва да изостава с минути за 2-3 часа. Ако имаш само RTC, индикация и бутони, няма проблеми, но когато процесора ти е натоварен с още няколко задачи, тези микросекунди са десетина инструкции при основен такт от 2.45MHz, при което това време е изтекло преди да можеш да запазиш служебните регистри. Да не говорим че CCS компилатора запазва сума ти ненужни регистри и имам поне 20 инструкции преди да стигна до прекъсването. Затова ти казах да сложиш 20 микросекунди преди да го заредиш, но това на симулатора няма да се види, трябва на реален хардуер и тогава проблема си излиза на бял свят.
Решението на проблема го описах в предишен пост, с помощта на TMR3, естествено за сметка на консумацията, като 7.8125 милисекунди ( а тези милисекунди ги отчитам с TMR3, който работи в паралел с TMR1 ) преди препълването на TMR1 спирам обработката на всички останали прекъсвания, за да може да го презаредя в тези 15.25 микросекунди. Грозно решение, но работи и сега нямам проблем с точността му ( всъщност пак ще има, защото за всяко събуждане на процесора също трябва време, а това време е по-голямо от тези 15.25 микросекунди, но просто тази неточност ще е по-малка, защото прекъсването е вече на 1 секунда, а не на 7.8125 милисекунди ), като процесора е в sleep режим, а прекъсванията от TMR1 и TMR3 го събуждат съответно за опресняване на RTC и на LCD индикацията. За друго решение не се сетих, защото само TMR1 & TMR3 могат да работят, когато процесора спи.
Стига толкова, май по-добре беше да напиша цяла дисертация на тема защо TMR1 на всички PIC-ове изостават при външен кристал на крачета RC0 & RC1.
|
| Съб Сеп 17, 2005 2:29 pm |
|
 |
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 12:48 pm Мнения: 6094
|
Pirev - i pak shte imash zabaviane
kogato se poluchi external INT procesora triabva da si zavyrshi RISCovite takta i posle shte ide na prekysvaneto
Greshkata e ot 1 do 4 takta na MAIN OSC.
Koloto po chesto vlizash v prekysvane tolkova po goliama greshka natrupvash....
|
| Съб Сеп 17, 2005 3:10 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Съгласен съм когато става дума за асинхронни прекъсвания, но за синхронни не е така. Синхронното прекъсване е винаги на един същ такт от 4-рите основни такта на основния осцилатор. Вярно, че TMR1 с външен кварц 32kHz трябва да се разглежда като асинхронно прекъсване, но във всеки случай ще имаш някакъв синхрон между основния и допълнителния кварц, при което разсинхронизацията между основния такт и този на TMR1 ще е пренебрежимо малка.
Ако разбира се RTC е от основния кварц с подходящия делител, като например основен кварц 4.194304 MHz, към TMR0, с предварителен делител 256, и ако не презареждаш TMR0, ами го оставиш свободно да се препълва, ще се получи 4194304 / ( 4 * 256 * 256 ) = 16 Hz, при което с един софтуерен брояч на 16 ще получиш много по-точен RTC, отколкото с TMR1 и външен кварц 32.768kHz. Но пък не можеш да приспиш процесора, батериите ще свършват около 12 пъти по-бързо ( при моят хардуер с TMR1 & LCD имам 150 микроампера консумация от 5V, при 3V е около 100-тина или поне 250 дни от 1000 милиампера батерия, а при работещ процесор консумацията е около 1.5мА )
|
| Съб Сеп 17, 2005 3:38 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
и не забравяй грешката на кварца от температурата и клас на точност - която е меко казано значителна при по големи интервали - мой тест с този кварц за 2 дена 15 минути  )) красота
|
| Вто Сеп 20, 2005 4:51 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Изпробвах PIC18F2520 с TMR1 и външен кварц 32.768 kHz, ами когато си работи пущината, си работи, не мога да си кривя душата. Прекъсването ми е на 7.8125ms и за цяло денонощие RTC не ми е мръднал дори със секунда. Не вярвах на твърденията на MicroChip, че при този проц са отстранени проблемите с TMR1, но този път са се справили. MSSP модула също е пушка до момента. За EUSART модула също няма публикувани бъгове, но все още не съм го изпробвал. Засега на този професор проблемите му са с програмната памет, по периферията няма публикуван errata, но е сравнително отскоро на пазара. Има обаче промени по АЦП-то, като е добавен ADCON2, освен това са разместени някои от управляващите битове на ADCON0 & ADCON1. Най-полезната добавка в АЦП-то е, че Acquisition time вече може да се задава на хардуерно ниво с брой на Tad цикли, преди за започне същинското преобразуване.
Така, че нека Варненскитe гларуси знаят, че поставям този PIC в моя списък на PIC-ове с минимални бъгове 
|
| Чет Окт 20, 2005 9:12 am |
|
 |
|
Gogo
Ранг: Форумен бог
Регистриран на: Чет Фев 24, 2005 11:41 pm Мнения: 1049 Местоположение: Pz
|
Tо това го има и на по-стари 18-ки.
|
| Чет Окт 20, 2005 9:48 am |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Сигурно си прав, че го има и на по-стари 18-ки. Но аз съм човек консерва(тор) и предпочитам някой друг да се сблъсква с новите процесори, пък аз да си маам по упътканите тъпеки 
|
| Чет Окт 20, 2005 10:02 am |
|
 |
|
Gogo
Ранг: Форумен бог
Регистриран на: Чет Фев 24, 2005 11:41 pm Мнения: 1049 Местоположение: Pz
|
Ами и аз това го разбрах без да искам преди около година и половина  Мерех си един потенциометър с 8520, ама понеже съм много умен, му прецаках (никак си) аналоговия вход на потенц-а. И понеже платката беше вече направена, му метнах един 8525 (такъв имах под ръка). И стана "чудо" - мереше от 15..20% до 60..70%. След като си блъсках главата половин ден, реших, да прочета пдф-а... 
|
| Чет Окт 20, 2005 11:45 am |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 1 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|