Отговори на тема  [ 39 мнения ]  Отиди на страница Предишна  1, 2, 3  Следваща
C - програма за pic16F84A - къде греша? 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 11:49 pm
Мнения: 4394
Местоположение: София
Мнение Re: C - програма за pic16F84A - къде греша?
ОК благодаря! :
И още един въпрос за WDT:

Ако въвеждам паузи с броене до някакво число и ако тези паузи са с времетраене примерно 5 сек.

Как се ползва WDT в този случай?


Сря Май 14, 2014 10:27 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 11:22 pm
Мнения: 3084
Мнение Re: C - програма за pic16F84A - къде греша?
трябва да ресетваш кучето за да не не ресетне то - толкова често, колкото пише в чаршафа. Ако пише 18 милисекунди - ресетвай го най-много на 16.
В останалото време брой каквито искаш числа, до колкото искаш секунди.


Сря Май 14, 2014 10:49 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: C - програма за pic16F84A - къде греша?
Продължавай с четенето.

Защо ти е да правиш паузи от по 5 секунди по този начин ? това е чиста загуба на енергия и процесорно време. Ако искаш да правиш паузи от по 5 секунди ще те насоча да четеш за таймерите и прекъсванията. Надявам се да ти стане ясно и да схванеш после какво трябва да се случи. Командата clrwdt трябва да се изпълнява достатъчно често. Естествено колко често зависи и дали има прескалер и на колко е сложен. А и има пикове дето имат уочдог в секунди. Другия номер, който при тебе може да стане с тази програма, е да си настроиш уочдога на около времето което ти трябва (прескалер 32 ще даде малко повече от половин секунда), след смяна на портовете просто пишеш sleep. Контролера ще заспи обаче като изтече уочдог-а няма да се рестартира а ще се събуди и ще продължи от там на сетне. И така нататък. В общи линии не е зле да изчетеш даташита на въшката. Обаче бих ти препоръчал някой по-съвременен чип, че на тоя даташита му е дърт а на новите са доста по-добре написани.


Сря Май 14, 2014 10:53 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 11:49 pm
Мнения: 4394
Местоположение: София
Мнение Re: C - програма за pic16F84A - къде греша?
Нещо ударих на камък с моите познания :)

Във връзка със следния код:

#include <pic.h>
#include<pic16f84a.h>

unsigned int i;
unsigned int k;

void interrupt isr (void);


void main(void)
{

TRISA0=0;
TRISB0=1;

if (RB0)

{

RA0=1;
for(i=0; i<100; i++);


}

if(RA0 && RB0 ==0)
{
RA0=1;

for(k=0; k<10000; k++);

RA0=0;
}

else

RA0=0;

Това, което искам а не мога да постигна е, докато върви закъснението for(k=0; k<10000; k++); ако RB0 стане 0, закъснението да тръгне отначало.

Мъчих с прекъсвания и какво ли не и не мога да се справя на този етап.

Моля ви за насока, като за дилетант-прощапулник :)


Пет Май 30, 2014 6:20 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: C - програма за pic16F84A - къде греша?
Ами това void interrupt isr (void); за къв чеп седи там празно?

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

Зависи обаче и компилатора как ще го приеме това нещо. Предполагам ще мине номера.

Обаче ако това RB0 ти е вързано на бутон ще имаш още един куп главоболия дето сега не ми се описват подробно...


Пет Май 30, 2014 7:30 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 11:49 pm
Мнения: 4394
Местоположение: София
Мнение Re: C - програма за pic16F84A - къде греша?
Пробвах с ISR функция, като зададох времезакъснението да се прави в нея, но пак нищо не се получи. За да се нулира "К" просто k=0; ли се пише? Ако е така и така не става. Просто стигнах до заключението, че докато се смята времезакъснението не мога да го стартирам отначало, независимо дали е в main или в ISR.
Иначе накрая на ISR функцията нулирам флага с "INTCON=0"

RB0 не е на бутон а се влияе от постоянно напрежение на захранване.
Идеята е като изчезне захранването да се пусне RA0.


Пет Май 30, 2014 7:53 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: C - програма за pic16F84A - къде греша?
Ами то INTCON не е флаг а си е цял регистър - нулирайки го направо забраняваш тотално прекъсванията тъй като бит 7 е GIE (global interrupt enable) бита за прекъсванията. Трябва да нулираш само INTCON.INTF.

Цикъла ти трябва да си се върти в main. В прекъсването само нулираш k. А за да имаш прексъване, трябва RB0 да го направиш вход (TRISB.0=1) и да разрешиш прексъване INT0 (INTCON.INTE=1)


Пет Май 30, 2014 8:00 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 11:49 pm
Мнения: 4394
Местоположение: София
Мнение Re: C - програма за pic16F84A - къде греша?
Когато пробвах с прекъсването и накрая на ISR пишех INTCON=0 съзнавах, че нулирам цял регистър, но мислех, че не е фатално, защото в началото на main отново пускам прекъсванията с GIE=1; и INTE=1;, но вероятно подходът ми е грешен :)

Това, което не ми е ясно е как точно се отработва прекъсването.

Примерно когато при зададен интервал за К (0 - 10000) ако в момента на прекъсването k=3000, след изпълняване на ISR и връщане към main откъде продължава цикъла?


Пет Май 30, 2014 8:15 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Чет Мар 19, 2009 8:33 pm
Мнения: 804
Мнение Re: C - програма за pic16F84A - къде греша?
Един пример:
Гледаш на компютъра филм и по средата на му ти звънят на вратата ( прекъсване).
Какво правиш?
Спираш филма на пауза, и отиваш да отвориш да видиш кой звъни :). Отсвирваш го след малко време и пак се връщаш на филма от където си спрял.


Пет Май 30, 2014 8:26 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 11:49 pm
Мнения: 4394
Местоположение: София
Мнение Re: C - програма за pic16F84A - къде греша?
amdatlon написа:
Един пример:
Гледаш на компютъра филм и по средата на му ти звънят на вратата ( прекъсване).
Какво правиш?
Спираш филма на пауза, и отиваш да отвориш да видиш кой звъни :). Отсвирваш го след малко време и пак се връщаш на филма от където си спрял.


Така си го представям и аз.
Това означава, че ако в момента на прекъсване K=3000, след връщане в main, ще продължи от K=3001. Тогава как да нулирам K?


Пет Май 30, 2014 8:34 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение Re: C - програма за pic16F84A - къде греша?
Ако променливата К е обявена, като "volatile" то можеш в прекъсването да кажеш: K=0;

_________________
Warriors of the Night, ASSEMBLER!!!


Пет Май 30, 2014 8:47 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 11:49 pm
Мнения: 4394
Местоположение: София
Мнение Re: C - програма за pic16F84A - къде греша?
ike написа:
Ако променливата К е обявена, като "volatile" то можеш в прекъсването да кажеш: K=0;


Много ти благодаря! Утре ще пробвам :)


Пет Май 30, 2014 8:49 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: C - програма за pic16F84A - къде греша?
А ако не е обявена като volatile, компилатора няма ли да изреве?


Пет Май 30, 2014 9:22 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 11:49 pm
Мнения: 4394
Местоположение: София
Мнение Re: C - програма за pic16F84A - къде греша?
Cekins написа:
А ако не е обявена като volatile, компилатора няма ли да изреве?


Не съм я обявил като volatile, пиша К=0; , компилаторът (XC8) не реве, но и не работи, както трябва.


Пет Май 30, 2014 9:29 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: C - програма за pic16F84A - къде греша?
Ами не знам какво не ти се получава - искам само да ти кажа че това дето го искаш да стане, написано на асемблер ще е по-кратко поне 3 пъти като брой букви и поне 5 пъти като редове, от това дето си го постнал като код. Та не знам - може би първо е добре да си изясниш как точно работи прекъсването при този процесор.


Пет Май 30, 2014 9:41 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 39 мнения ]  Отиди на страница Предишна  1, 2, 3  Следваща

Кой е на линия

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


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

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