| Автор |
Съобщение |
|
lcr
Ранг: Форумен бог
Регистриран на: Пон Май 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 |
|
 |
|
E1
Ранг: Почетен член
Регистриран на: Нед Юли 22, 2007 8:57 pm Мнения: 607 Местоположение: Белград
|
 Re: C - програма за pic16F84A - къде греша?
А какво трябва да прави? С този код, след чертата: 1. изгасват и двата диода;(всъщност диод 0 е вече изгаснал и няма смисъл да се пише отново за него) 2. светват двата диода; 3. изгасва RB1 4. светва RB1 и изгасва RB0 5. пак чертата....
|
| Вто Май 13, 2014 1:33 am |
|
 |
|
lcr
Ранг: Форумен бог
Регистриран на: Пон Май 12, 2014 11:49 pm Мнения: 4394 Местоположение: София
|
 Re: C - програма за pic16F84A - къде греша?
Точно това е замислената последователност.
Наистина RB0=0 след чертата е излишно. Ще го махна, но това едва ли ще промени нещо.
Въпросът е защо реално цикълът стига до чертата и започва отначало.
|
| Вто Май 13, 2014 2:03 am |
|
 |
|
lcr
Ранг: Форумен бог
Регистриран на: Пон Май 12, 2014 11:49 pm Мнения: 4394 Местоположение: София
|
 Re: C - програма за pic16F84A - къде греша?
.
|
| Вто Май 13, 2014 2:04 am |
|
 |
|
Edesign
Ранг: Форумен бог
Регистриран на: Сря Авг 31, 2005 1:57 pm Мнения: 1103
|
 Re: C - програма за pic16F84A - къде греша?
разбери дали не се ресетва например Watch Dog Timer?
|
| Вто Май 13, 2014 6:53 am |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: C - програма за pic16F84A - къде греша?
А ти откъде си сигурен че стига до чертата само и тръгва отначало? Предполагам че пикчето е на 4MHz. Имаш два цикъла по 50, които най вероятно са около 150-200 инструкции(цикъла) общо всеки, което е да кажем 400-500 за двата. това разделено на 500 цикъла * 2 за двете паузи ще даде честота 1kHz - повервай ми - при тая честота не можеш да видиш мигането на диодите...
|
| Вто Май 13, 2014 8:39 am |
|
 |
|
lcr
Ранг: Форумен бог
Регистриран на: Пон Май 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 |
|
 |
|
CarBeta
Ранг: Форумен бог
Регистриран на: Пет Май 01, 2009 4:01 pm Мнения: 1438
|
 Re: C - програма за pic16F84A - къде греша?
Лесния начин е да дадеш цялата конфигурация и да се види къде какво го караш да прави тоя процесор. Иначе проба-грешка. Сложи паузи, всяка с различно време. Или след всяка пауза сетвай различен изход да видиш до кой ще стигне.
|
| Вто Май 13, 2014 11:55 am |
|
 |
|
lcr
Ранг: Форумен бог
Регистриран на: Пон Май 12, 2014 11:49 pm Мнения: 4394 Местоположение: София
|
 Re: C - програма за pic16F84A - къде греша?
Това, което установих по метода проба-грешка е, че кодът се изпълнява винаги до определен ред или по-скоро до заемане на определен обем памет, след което програмата започва отначало а командите след въпросния ред просто се игнорират. Според IDE интерфейса програмната памет е заета на 10% а тази за данни - на 12%
|
| Вто Май 13, 2014 4:29 pm |
|
 |
|
lcr
Ранг: Форумен бог
Регистриран на: Пон Май 12, 2014 11:49 pm Мнения: 4394 Местоположение: София
|
 Re: C - програма за pic16F84A - къде греша?
Благодарение на насоката, която даде колегата Edesign проблемът е решен. Все още съм много бос на тема програмиране на МК, но докато правих разни практически експерименти ми направи впечатление, че нещата не работят поради това, че сякаш изтича някакъв таймаут. Тогава пробвах да изключа WDTE и О-чудо - всичко проработи! Накратко - открих топлата вода  Благодаря на всички за помощта.
|
| Сря Май 14, 2014 3:16 pm |
|
 |
|
didofen
Ранг: Популярен
Регистриран на: Вто Юни 27, 2006 11:13 am Мнения: 381 Местоположение: Варна
|
 Re: C - програма за pic16F84A - къде греша?
Кучето е направено да се разлае, ако не го укротяваш периодично, а не да го отвържеш и да го дадеш на комшиите
|
| Сря Май 14, 2014 4:20 pm |
|
 |
|
lcr
Ранг: Форумен бог
Регистриран на: Пон Май 12, 2014 11:49 pm Мнения: 4394 Местоположение: София
|
 Re: C - програма за pic16F84A - къде греша?
Разбирам това и доколкото схващам периодичното укротяване става с изпълнение на командите: 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 |
|
 |
|
michev
Ранг: Форумен бог
Регистриран на: Сря Юли 11, 2007 10:16 am Мнения: 1730
|
 Re: C - програма за pic16F84A - къде греша?
за XC8 .. или Или още в конфигурацията го изключваш 
|
| Сря Май 14, 2014 10:05 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: C - програма за pic16F84A - къде греша?
Ъъъъ ... Обърка чипа нещо - тия команди не са за пик въобще. Тоя сикуънс също не е за пик. Ресетването при пиковете става с простата командичка CLRWDT.
|
| Сря Май 14, 2014 10:06 pm |
|
 |
|
michev
Ранг: Форумен бог
Регистриран на: Сря Юли 11, 2007 10:16 am Мнения: 1730
|
 Re: C - програма за pic16F84A - къде греша?
Абе вярно е че веднъж в годината бутвам пик, ама.. чак пък толкоз  От менюъла на XC8 Инструкцията я погледах в книгата - има си я Едит: Ох, чак сега фокусирах какво точно си написал и по - точно за кого 
|
| Сря Май 14, 2014 10:23 pm |
|
|