Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

ТMR0 и RA4 странна работа ...
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=1883
Страница 1 от 2

Автор:  perro_iv [ Пет Фев 24, 2006 4:46 pm ]
Заглавие:  ТMR0 и RA4 странна работа ...

Използвам TMR0 за броене на импулси чрез RA4 при падащ фронт за 50 ms (PIC16F876).
На симулацията с Протеуса всичко е наред, а в действителност преброява 4 - пъти повече импулси.
Гледам тука някви обяснения относно фазови синхронизации с тактовия генератор, ама нещо не вдявам.

Therefore, it is
necessary for T0CKI to be high for at least 2Tosc (and
a small RC delay of 20 ns) and low for at least 2Tosc
(and a small RC delay of 20 ns).

Някой да си е блъскал също главата.
Импулсите са си точни, гледам ги на Осцилоскопа и като честота и форма нямат проблеми.

Автор:  [ Пет Фев 24, 2006 7:00 pm ]
Заглавие: 

Постни кода за инициализация на TMR0, какъв му е делителя ? Да не ди да брои 4 пъти по-малко импулси, вместо 4 пъти в повече ? Да нямаш шумотевици от входния сигнал, видя ли го с осцилоскоп с каква форма ? Достатъчно е да има тесен пик и да брои в повече.

Автор:  Dimiter [ Пет Фев 24, 2006 7:39 pm ]
Заглавие: 

RA4 е с отворен колектор , изтегли го за всеки случай с няколко килоома към +

Автор:  the_real_maniac [ Пет Фев 24, 2006 7:41 pm ]
Заглавие: 

Най-вероятно проблема е до това, че всяко действие с TMR0 регистъра нулира PS-а :-) И става весело :-)

Не е до незнаене. Просто се случва някои път да забравиш да укажеш стойността на PS.

Предполагам и затова Pirev иска кода :-)

Автор:  [ Пет Фев 24, 2006 7:50 pm ]
Заглавие: 

Dimiter написа:
RA4 е с отворен колектор , изтегли го за всеки случай с няколко килоома към +


Без да се сърдиш че пускам дуплика, това дето предлагаш какво ще помогне ? Човека използва RA.4 като вход, не като изход. Ако е изход да, ама като вход ми е голяма въпросителна ...

Автор:  zz_stefanov [ Пет Фев 24, 2006 7:55 pm ]
Заглавие: 

Dimiter написа:
RA4 е с отворен колектор , изтегли го за всеки случай с няколко килоома към +

То няма ли вътре WPU, а и говорим за вход.
Поздрави и успех :)

Автор:  Dimiter [ Пет Фев 24, 2006 7:55 pm ]
Заглавие: 

прави проблеми наистина

Автор:  perro_iv [ Пет Фев 24, 2006 9:00 pm ]
Заглавие: 

BANKSEL OPTION_REG
movlw B'01101000'
movwf OPTION_REG
movlw D'6'
movwf ADCON1
movlw B'00010101'
movwf TRISA

Но пак да кажа на Протеуса си върви както трябва.
Не е до смущения, защото направих достатъчно много проби и то с различни честоти.
Резултата - точно четири пъти повече преброени импулси.

Автор:  zz_stefanov [ Пет Фев 24, 2006 9:39 pm ]
Заглавие: 

perro_iv написа:
BANKSEL OPTION_REG
movlw B'01101000'
movwf OPTION_REG
.....
Това не прави ли броенето по нарастващ фронт и от там да се обърква всичко.

Dimiter извини ме :oops: WPU имало само в PORTB
Поздравии успех :)

Автор:  ToHu [ Пет Фев 24, 2006 11:05 pm ]
Заглавие: 

Ами нямал съм никакви проблеми, не разбрах импулсите ли са ти 50 мс или времто за което мериш е 50 мс, ако винаги ралзката е 4 пъти повече ... замислял сли си дали просто не мериш за 4 пъти по дълго време .. защото смущение може да прави проблем, но пък винаги да е точно 4 пъти в повече ....

Автор:  perro_iv [ Пет Фев 24, 2006 11:15 pm ]
Заглавие: 

Правилно, допуснал съм грешка:
коректната конфигурация е :00111000, но едва ли това ще е причината, импулсите са с правоъгълна форма и К = 50%.
Ако не е нещо свързано със синхронизация спрямо тактовите импулси, което въобще не можах да разбера, проблемът ще е по-скоро хардуерен.

Автор:  perro_iv [ Пет Фев 24, 2006 11:32 pm ]
Заглавие: 

Времето за което меря е 50ms , честотата на имп. поредица е от 1 до 4,5 KHz.
При един килохерц би трябвало да преброи около 50 фронта, а в съответния регистър стойността е 200.
И така за всички честоти, като при по-високите за този интервал превърта регистъра.
Изхода от Hex inverting Schmitt trigger 74HC/HCT14 е свързан директно към RA4.
Времето задавам чрез TMR1 и при симулацията на Proteus си брои както трябва.
Странна работа, в понеделник ще се задълбоча повече върху РЕАЛИТИ изпълнението.

Автор:  Syrius-B [ Съб Фев 25, 2006 1:20 am ]
Заглавие: 

Симулаторите са удобно нещо, но никога 100% сигурност.
Трябва буква по буква да се чете дата шиита на процесора.
И най добре се пише на асемблер..
В този случай най-вероятно проблема е в инициализацията на таймер 1 (за 50-те мс)

Автор:  Desert Leo [ Съб Фев 25, 2006 10:18 am ]
Заглавие: 

@perro_iv, зарежи симулаторите и провери още веднъж програмата си.
Прочети внимателно описанията и ератите на двата таймера, като отчиташ и тактовата честота на контролера.

Автор:  perro_iv [ Вто Фев 28, 2006 1:08 am ]
Заглавие: 

Проблема е ясен и е в схемата за извеждане стойността на регистъра.
Понеже предназначението на схемата е с изследователска дейност, реших че най-простия начин за визуализиране на резултата е чрез преместващ регистър и
8 LED-а. Да ама наслагах и едни изтеглящи резистори, дето в симулацията ги няма. Получава се някво объркване по фронтове (днес не ми остана време да се задълбоча) и целия резултат излиза с два бита изместен наляво, което май е 4-пъти по-голяма стойност.

Страница 1 от 2 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/