Отговори на тема  [ 5 мнения ] 
CCS и ICD-S40 
Автор Съобщение
Ранг: Популярен
Ранг: Популярен

Регистриран на: Съб Фев 19, 2005 2:22 pm
Мнения: 323
Мнение CCS и ICD-S40
проблема е следния: ползвам ICD-S40 с комбинация CCS 3.249.
наложи се да коригирам софта по проект правен с 3.245 или по стар /за съжаление не мога да си спомня точно кой :( /.
описание на системата
използвам прекъсване на таймер 1 за времезадаване през 30сек.
подхода е прост: задавам стойност на таймера (200) той се препълва и генерира прекъсване в което има реализиран софтуерен брояч, тук се реиницализира таймера със същата стойност (200) и инкрементира софт брояча. това се повтаря до достигане на софт брояча 63, което отговаря на 30сек деление 1:8. след което всичко започва отначало (3.6864MHz кварц), като има предвиден алгоритъм който да променя стойноста за инициализиране на таймера (200) в зависимост от данните на външно устройство за получаване на добра синхронизация помежду двете.
проблем:
не се генерира прекъсването:
проверени / с помоща на ICD-S40/:
процесора-> с програмата която съм писал по време на създаването на устройството
флагове -> за прекъсване - глобален, за периферията, за таймера -всичко си е ок, брояча си брои.
настроен е правилно -- към вътрешен брояч, 1:8 прескалер, няма синхрониизиране, активирани са флаговете за прекъсвания

има една особеност в CCS под GLOBAL се установяват и двата бита - за периферията и за глобалното прекъсване
а аз съм ги разделил и ги сетвам по различно време, в крайна сметка и двата са сетнати, но проблема се появява след сетването на флага за периферия. до тогава всичко се държи както трябва т.е. влиза си в прекъсване ?
изобщо много странно защото не би трябвало да влиза в прекъсване ако този флаг не е установен / а той не е!!/
а той влиза ..... и после обратно

но не влиза в прекъсване -- остават едни грозни съмнения в компилатора :evil:
някой да има представа защо и как може да се получи това

INTCON 0b 11XX XXXX
PIE1 0b XXXX XXX1
PIR1 0b XXXX XXX0
T1CON 0b XX11 0101
TMR1L ------------
TMR1H ------------

_________________
бързина, това е да бръкнеш 100 пъти в контакта за 1секунда и да не те хване тока .....


Пон Окт 23, 2006 6:07 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
zax, опитах се да разбера за какво питаш, обаче честно да си кажа неразбрах :oops: Би ли обяснил наново, малко по-добре къде е проблема ?

П.П.
zax, извинявай, явно не съм прочел задълбочено какво питаш. Обаче не споменаваш процесора.

Тия дни се мъча с един любим мой проект, термометър с 4-разредна LCD индикация. Все намирам нещо да добавя и пооправя :wink:
Последния вид процесор, който използвах беше PIC18F2520 за този проект. Потрябва ми още един, след поредния гръмнал PIC18F2520, обаче нямаше такъв в дюкяна и взех PIC18F2525, който уж има само в повече програмна памет и рам. Той също е бъган с бъгове, чак се ядосах, че го купих, щото продавача ми го предложи като следващ модел. Получав се следната картинка: TMR1, 8-битов, асинхронно към външен осцилатор 32,768 kHz, прекъсване на 15,625ms, влиза около 1-2 секунди нормално в прекъсването, след което изведнъж блокира, процесора работи, но това прекъсване не сработва повече. Гледам в дебъгера INTCON = 0x43, а трябва да е 0xC3. Намерих си една грешка, използвам една и съща променлива и в главната програма и в прекъсване ( то е цяло чудо как е работила толкова години тази програма ) и си помислих, че от това, да ама не. Нещо става и се самозабранява GIEE. Взех в главната програма да ги разрешавам от време на време GIE, работи с вазелин. Чудя се и мая, какво може да бъде. Ще седна да чета бъговете в системата за прекъсване. Като гледам има много бъгове и за TMR1 в 18-та серия. То и в 16-та ги има. Аман от бъгове.

А флага PEIE се отнася за периферията, обаче какво разбират като периферия ... Гледам логиката на прекъсване на 18F2525 и не мога да се ориентирам. Обикновено и GIE & PEIE са ми разрешени, приемам ги като един бит GIE. Aха, намерих го описанието на PEIE, отнасял се до прекъсванията разрешавани с PIE регистрите, което значи че се отнася и до TMR1, а ти казваш, че прекъсването от TMR1 работело и със свален PEIE. Сега пробвам това с PIC18F2525. При IPEN ( interrupt priority ) = 1, TMR1 генерира прекъсване и при PEIE = 0, обаче ако IPEN = 0 ( логика на прекъсвания като при 16-ките ) не влиза TMR1 в прекъсване при PEIE = 0.

Защо не пробваш преди да промениш PEIE да забраниш GIE и после пак да го разрешиш ?

При мен проблема е обратен, някой(горе долу се сещам кой може да бъде :D ) ми забранява прекъсванията чрез GIE :x

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Вто Окт 24, 2006 4:15 pm
Профил WWW
Ранг: Популярен
Ранг: Популярен

Регистриран на: Съб Фев 19, 2005 2:22 pm
Мнения: 323
Мнение 
знаех си аз че ти ще отговориш :D
верно забраваих да кажа че това е 16F876A

просто не мога да си обясня защо се получава така
сега ще изровя стария лаптоп да видя с кой CCS съм писал тогава
и ще започна да правя опити с него просто не ми го побира главата
/дал съм ст-стите на регистрите какво се получава/ и как въпреки това не работи
даже професора е същия онзи с които едно време си правех развоя !!!!

ще подчертая част от проблема наново:
вземам първоначалния софтуер /преди съм го компилирал със стария CCS/
зареждам hex-a в пика и всичко е наред
вземам същия сорс компилирам го с новия CCS 3.249
и зареждам наново hex-a /не съм правил никакви корекции/ и вече не работи
после гледам с ICD и се оказва проблема с влизането в прекъсване

ако си се загледал в CCS дефинират битове GIE и PIEE като един общ флаг GLOBAL
това става в файла с описанието на процесора в /PICC/Deviceс -> 16F876a.h

така съм го направил аз:
// Constants used in ENABLE/DISABLE_INTERRUPTS() are:
#define GLOBAL 0x0B80
#define PERIPHERY 0x0B40
#define INT_RTCC 0x0B20
#define INT_RB 0x0B08
............

така е оригинално:
// Constants used in ENABLE/DISABLE_INTERRUPTS() are:
#define GLOBAL 0x0BC0
#define INT_RTCC 0x0B20
#define INT_RB 0x0B08
............


първата ст-ст е на регистъра в който се пише
0х0В е INTOCON
втория байт е ст-ста която се прилага примерно 1100 0000 -> 0хС0
за оригинално дефинирания адрес

днес продължавамс експериментите

_________________
бързина, това е да бръкнеш 100 пъти в контакта за 1секунда и да не те хване тока .....


Сря Окт 25, 2006 10:17 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
Един съвет: като направиш дадена програма да работи, запази си я в друга директория, не в работната директория, заедно с всичко, което е избълвало компилатора. При мен например допълнителната директория си я кръщавам ok, после като се наложи да правя промени и се усъмня в компилатор ( щото може и след 2г. да ги правя ) или в нещо друго веднага правя сравнение на листинг файла и много бързо се ориентирам къде е проблема.

Снощи намерих кой ми забранява GIE флага - MSSP модула. Измерената температура през определен интервал от време я записвам в I2C памет, като забраня записите всичко друго си работи, като ги разреша след 1-2 секунди се нулира флага GIE. Обаче старата програма си работеше перфектно върху PIC18F2520 & PIC18F252. Върнах се на стария компилатор, тцъ, явно PIC18F2525 си има допълнителни бъгчета. А последния PIC18F2520 си го гръмнах по много тъп начин: знам, че като им пипна MCLR с ръка или пинсета изгаря и въпреки това реших така да го рестартирам. Кога ли ще се науча да слагам един бутон цък-цък за MCLR и да си улесня живота.

Днес ако остане време ще се помъча да разбера защо MSSP модула забранява GIE, при положение, че никъде не го пипам този флаг, дори не го чета.

П.П. Не използвам дефинициите на CCS за процесорите, като ми се наложи да използвам нов процесор вземам include файла от MPLAB и го преработвам, така че всичко ми е дефинирано с #bit & #byte според абревиатурата на Microchip. Така ми е по-лесно да интегрирам парчета код на асемблер и на C. Същевременно не трия дефинициите на CCS, за да мога да използвам и готовият им код, въпреки, че колкото пъти съм използвал техен код, все съм съжалявал.

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Сря Окт 25, 2006 10:37 am
Профил WWW
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Авг 19, 2005 11:38 am
Мнения: 978
Местоположение: Europe -> BG
Мнение 
¶ написа:
Той също е бъган с бъгове, чак се ядосах, че го купих, щото продавача ми го предложи като следващ модел.


offtopic: Pirev откъде пазаруваш, че даже ти и препоръчват. На мен досега в comet не ми се е случвало - не че съм и питал за съвет, но веднъж,дваж и аз съм се дву-умял какво да взема като е нямало това, което искам :-)

_________________
един факт :-)
Съжалявам , че исках да помогна ...


Сря Окт 25, 2006 11:33 am
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 5 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни