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

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

Нов съм във форума, защото отскоро направих и първите си стъпки свързани с MК.

Като начало се въоръжих с MPLAB X, XC8 компилатор, програматор Pickit-3........и
Оттук - оттам скалъпих и първия си код за PIC16F84A:

void pause(unsigned char k, unsigned char l) /* pause routine */
{
unsigned char i,j;
for(i=0;i<=k;i++)
for(j=0;j<=l;j++);
}

void main()
{

TRISB = 0;/* Set port B as output */

while(1)

{
RB0=1;
RB1=0;
pause(50,50);
RB0=0;
RB1=1;
pause(50,50);
...........................................................................
RB0=0;
RB1=0;
pause(50,50);
RB0=1;
RB1=1;
pause(50,50);
}

}


Ето го и въпроса ми на лаик в областта:


Светодиодите на двата изхода си мигат в противотакт, т.е - програмата се изпълнява успешно само до отбелязания ред.

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

Предварително благодаря!


Вто Май 13, 2014 12:26 am
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Нед Юли 22, 2007 8:57 pm
Мнения: 607
Местоположение: Белград
Мнение Re: C - програма за pic16F84A - къде греша?
А какво трябва да прави?
С този код, след чертата:
1. изгасват и двата диода;(всъщност диод 0 е вече изгаснал и няма смисъл да се пише отново за него)
2. светват двата диода;
3. изгасва RB1
4. светва RB1 и изгасва RB0
5. пак чертата....

_________________
http://www.szrefekt.com


Вто Май 13, 2014 1:33 am
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

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

Наистина RB0=0 след чертата е излишно. Ще го махна, но това едва ли ще промени нещо.

Въпросът е защо реално цикълът стига до чертата и започва отначало.


Вто Май 13, 2014 2:03 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

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


Вто Май 13, 2014 2:04 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Авг 31, 2005 1:57 pm
Мнения: 1103
Мнение Re: C - програма за pic16F84A - къде греша?
разбери дали не се ресетва например Watch Dog Timer?


Вто Май 13, 2014 6:53 am
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: C - програма за pic16F84A - къде греша?
А ти откъде си сигурен че стига до чертата само и тръгва отначало? Предполагам че пикчето е на 4MHz. Имаш два цикъла по 50, които най вероятно са около 150-200 инструкции(цикъла) общо всеки, което е да кажем 400-500 за двата. това разделено на 500 цикъла * 2 за двете паузи ще даде честота 1kHz - повервай ми - при тая честота не можеш да видиш мигането на диодите...


Вто Май 13, 2014 8:39 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 11:49 pm
Мнения: 4394
Местоположение: София
Мнение Re: C - програма за pic16F84A - къде греша?
Ползвам RC осцилатора с R=47 kOhm и C=180 pF, което би трябвало да даде тактова честота около 80 kHz.
Мигането в противотакт на светодиодите се вижда отчетливо. Всеки един от тях мига с период около 1 сек.

Как да разбера дали не се ресетва WDT ?


Вто Май 13, 2014 11:26 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Май 01, 2009 4:01 pm
Мнения: 1438
Мнение Re: C - програма за pic16F84A - къде греша?
Лесния начин е да дадеш цялата конфигурация и да се види къде какво го караш да прави тоя процесор.
Иначе проба-грешка. Сложи паузи, всяка с различно време. Или след всяка пауза сетвай различен изход да видиш до кой ще стигне.


Вто Май 13, 2014 11:55 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 11:49 pm
Мнения: 4394
Местоположение: София
Мнение Re: C - програма за pic16F84A - къде греша?
Това, което установих по метода проба-грешка е, че кодът се изпълнява винаги до определен ред или по-скоро до заемане на определен обем памет, след което програмата започва отначало а командите след въпросния ред просто се игнорират.
Според IDE интерфейса програмната памет е заета на 10% а тази за данни - на 12%


Вто Май 13, 2014 4:29 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

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

Все още съм много бос на тема програмиране на МК, но докато правих разни практически експерименти ми направи впечатление, че нещата не работят поради това, че сякаш изтича някакъв таймаут.
Тогава пробвах да изключа WDTE и О-чудо - всичко проработи!

Накратко - открих топлата вода :)

Благодаря на всички за помощта.


Сря Май 14, 2014 3:16 pm
Профил
Ранг: Популярен
Ранг: Популярен

Регистриран на: Вто Юни 27, 2006 11:13 am
Мнения: 381
Местоположение: Варна
Мнение Re: C - програма за pic16F84A - къде греша?
Кучето е направено да се разлае, ако не го укротяваш периодично, а не да го отвържеш и да го дадеш на комшиите


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

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


Разбирам това и доколкото схващам периодичното укротяване става с изпълнение на командите:

MOV TA,#0AAh ;Execute the Timed Access Protection
MOV TA,#55h ;code to open the Timed Access window
SETB RWT ;Reset the watchdog timer by setting the RWT bit

Тези команди имат ли аналог в "C" или трябва да се превключва на асемблер?


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

Регистриран на: Сря Юли 11, 2007 10:16 am
Мнения: 1730
Мнение Re: C - програма за pic16F84A - къде греша?
Код:
CLRWDT()
за XC8 .. или
Код:
asm("clrwdt")

Или още в конфигурацията го изключваш :)


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

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


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

Регистриран на: Сря Юли 11, 2007 10:16 am
Мнения: 1730
Мнение Re: C - програма за pic16F84A - къде греша?
Абе вярно е че веднъж в годината бутвам пик, ама.. чак пък толкоз :)
От менюъла на XC8
Цитат:
CLRWDT
Synopsis
#include <xc.h>
CLRWDT();
Description
This macro is used to clear the device’s internal watchdog timer.

Инструкцията я погледах в книгата - има си я

Едит: Ох, чак сега фокусирах какво точно си написал и по - точно за кого :)


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

Кой е на линия

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


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

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