| Автор |
Съобщение |
|
bborisov
Ранг: Минаващ
Регистриран на: Пон Юли 31, 2006 9:51 am Мнения: 74
|
 Проблеми с прекъсване от таймер 0 на 18f4550
Здравейте! Имам следния проблем. Разрешил съм прекъсванията от таймер 0, разрешил съм и глобалните прекъсвания, но все едно не се обслужва това прекъсване. В подрограмата дето обслужва прекъсването съм му дал да сленя нивото на един пин, дето има закачен диод, за да мога да го следя, но нищо не става. А като го гледам с MPLAB SIM всичко си е наред - изпълнява се функцията за прекъсването, смемят си се нивата. Някой има ли идея какво може да става?
|
| Вто Фев 06, 2007 11:58 pm |
|
 |
|
Syrius-B
Ранг: Форумен бог
Регистриран на: Пон Яну 30, 2006 2:48 am Мнения: 1248 Местоположение: София
|
Ами остава пина, дето ти е диода да е нещо крив, или криво вързан.
Казал ли си му, че е изход?
|
| Сря Фев 07, 2007 12:01 am |
|
 |
|
bborisov
Ранг: Минаващ
Регистриран на: Пон Юли 31, 2006 9:51 am Мнения: 74
|
да, конфигуриран е като изход
|
| Сря Фев 07, 2007 12:29 am |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
Без да постнеш програмата тук, няма кой да ти помогне така с гадаене  .
|
| Сря Фев 07, 2007 12:49 am |
|
 |
|
bborisov
Ранг: Минаващ
Регистриран на: Пон Юли 31, 2006 9:51 am Мнения: 74
|
Ето и част от сорса.
|
| Сря Фев 07, 2007 9:40 am |
|
 |
|
bkulev
Ранг: Популярен
Регистриран на: Сря Яну 25, 2006 12:47 pm Мнения: 305 Местоположение: Varna
|
Не съм ти гледал кода подробно, обаче освен това, което пишеш че си направил,
трябва още да
трябва да сетнеш коректно INTCON2. TMR0IP и в зависимост от това INTCON.GIEH или GIEL
и много важно - не забравяй в прекъсването да нулираш флага.
|
| Сря Фев 07, 2007 3:51 pm |
|
 |
|
bborisov
Ранг: Минаващ
Регистриран на: Пон Юли 31, 2006 9:51 am Мнения: 74
|
на мен IPEN ми е 0 и нямам приоритети, не бил и трябвало TMR0IP и битовете в INTCON2 да не влияят? А флага си го нулирам в подпрограмата, дето обслужва прекъсването.
|
| Сря Фев 07, 2007 4:04 pm |
|
 |
|
Gogo
Ранг: Форумен бог
Регистриран на: Чет Фев 24, 2005 11:41 pm Мнения: 1049 Местоположение: Pz
|
Не съм се задълбочавал в сорса, но на пръв поглед виждам това:
В прекъсването само сетваш пиновете със светодиодите по един и същи начин всеки път - никакво изменение няма да видиш.
Ползваш RA1 и RA2 - провери си как си сетнал аналоговите компаратори!
|
| Сря Фев 07, 2007 4:24 pm |
|
 |
|
bborisov
Ранг: Минаващ
Регистриран на: Пон Юли 31, 2006 9:51 am Мнения: 74
|
Да сетвам ги по един и същи начин, но първоначално е сетнат само единияи би трябвало ако се обслужи прекъсването тои да се загаси и да се сетне другия, но това не става. А относно порт а TRISA=0
|
| Сря Фев 07, 2007 4:36 pm |
|
 |
|
evc
Ранг: Напреднал
Регистриран на: Пет Окт 21, 2005 8:45 am Мнения: 499
|
По-добре използвай функцията mLED_1_Toggle(). Защото може за части от секундата след захранване на схемата да ти сменя състоянието, но понеже е само веднъж ти да не го виждаш.
Щом ти върви в МПЛАБ(прекъсването от ТМР0), не е грешна конфигурацията на таймера.
Огледай добре ресета. И въобще хардуера, защото щом единия свети, а другия - не и изходите са ти конфигурирани правилно.
_________________ Простотията е Божи дар, но човек не бива да парадира с подаръците си!
|
| Сря Фев 07, 2007 4:49 pm |
|
 |
|
bborisov
Ранг: Минаващ
Регистриран на: Пон Юли 31, 2006 9:51 am Мнения: 74
|
Аз нарочно не ползвам Toggle, за да може ако поне веднъж се изпълни функцията, обработваща прекъсването, диодът, който свети да загасни, а дръгият да светне. Това няма как да не го видя. При следващо прекъсване би трябвало пак да останат в токова състояние. Проблемът е, че като ресетна процесора си свети само първия диод постоянно, което ме навежда на мисълта, че функцията за прекъсвнето не се изпълняма нито веднъж.
|
| Сря Фев 07, 2007 5:14 pm |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
При такт 48MHz (12MIPS) с коефициент на делене 1:1 на Timer0 как точно ще видиш "мигане" ?! 
|
| Сря Фев 07, 2007 6:56 pm |
|
 |
|
bborisov
Ранг: Минаващ
Регистриран на: Пон Юли 31, 2006 9:51 am Мнения: 74
|
Погледни кода! Аз не очаквам да видя "мигане", а просто единият диод да загасне и да светне другия! Но това не става.
|
| Сря Фев 07, 2007 7:06 pm |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
@bborisov, направи една 8 битова променлива, която да инкрементираш при всяко препълване на Timer0, сложи T0 коефициент на делене 1:256, сложи функция която да ти обръща състоянието на светодиода (led_toggle) при препълване на променливата и тогава ако не замига се оплачи 
|
| Сря Фев 07, 2007 7:09 pm |
|
 |
|
evc
Ранг: Напреднал
Регистриран на: Пет Окт 21, 2005 8:45 am Мнения: 499
|
offtopic:/
@Predator_MF, сега може би ме разбираш защо така реагирам понякога...
/offtopic
_________________ Простотията е Божи дар, но човек не бива да парадира с подаръците си!
|
| Сря Фев 07, 2007 11:51 pm |
|
|