Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Моля за малко помощ
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=12995
Страница 1 от 4

Автор:  vladivvs [ Пет Юни 13, 2014 9:21 pm ]
Заглавие:  Моля за малко помощ

Моля за помощ към хора,които могат да помогнат защото сега започвам от 0 и искам да се понауча за някои елементарни програмки по програмиране на пик по C++ като ме интересува в момента,искам да светвам примерно светодиод с натискане на бутонче знам че е елементарно но аз не мога да се справя.Ето я и тук моята програмка но явно някъде греша.Ако ми помогнете ще бъда много доволен и ако се повтаря темата ми модераторите нека да я изтрият благодаря на всички отзовали се.
поздрави
vladivvs



#include <12f629.h>
#FUSES INTRC,NOWDT,NOPUT,MCLR,NOPROTECT,NOCPD,NOBROWNOUT
#use delay(internal=4MHz)

#bit r1=0x05.0 //LED
#bit b1=0x05.3 //Button
#byte CMCON = 0x19

void main()
{
CMCON = 0x07;
SET_TRIS_A(0x04);

do
{
r1=0;
delay_ms(50);
}while(b1==0);
if(b1==1);
{
r1=1;
delay_ms(5000);
}
do
{
r1=0;
delay_ms(50);
}While(b1==0);
}

Автор:  Cekins [ Пет Юни 13, 2014 10:05 pm ]
Заглавие:  Re: Моля за малко помощ

Ами бутона ти е изход а светодиода вход - трис трябва да ти изглежда нещо такова побитово : 0bхххх1хх0. Регистъра се казва TRISIO. Регистъра CMCON трябва да е 0x07 за да се изключи компаратора. Иии за друго сега не се сещам...

едит : между другото - за да ти е лесно да запомниш кое вход и кое изход : 1nput и 0utput

Автор:  vladivvs [ Пет Юни 13, 2014 10:30 pm ]
Заглавие:  Re: Моля за малко помощ

Аз пробвах и побитово но резултата беше същият.Нищо не светна.

Автор:  Cekins [ Пет Юни 13, 2014 10:36 pm ]
Заглавие:  Re: Моля за малко помощ

Ами побитово 0х04 е 0b00000100 :) на теб ти трябва да е 0х08

CMCON=7 също. GPIO.0 е вход на компаратора и при тия контролери по подразбиране си е вход на компаратора. Не можеш го накара да е друго каквото и да правиш докато не изключиш компаратора.

Автор:  vladivvs [ Пет Юни 13, 2014 10:44 pm ]
Заглавие:  Re: Моля за малко помощ

Добре дотук ми стана още по интересно и как се изключва компаратор ако може да ми обясниш?

Автор:  michev [ Пет Юни 13, 2014 11:43 pm ]
Заглавие:  Re: Моля за малко помощ

CMCON = 0x07 .. или 0b00000111

Автор:  vladivvs [ Съб Юни 14, 2014 5:12 pm ]
Заглавие:  Re: Моля за малко помощ

Тази команда нали се пише в основната програма ?Или ако може някой да напише и да качи за да видя нагледно как се прави.

Автор:  michev [ Съб Юни 14, 2014 6:39 pm ]
Заглавие:  Re: Моля за малко помощ

Код:
...
#bit r1=0x05.0 //LED
#bit b1=0x05.3 //Button
#byte CMCON = 0x19
.....
...
CMCON = 0x07;
SET_TRIS_A(0x04);
do
....

Автор:  vladivvs [ Съб Юни 14, 2014 6:55 pm ]
Заглавие:  Re: Моля за малко помощ

Да Благодаря колега но защо отново не иска коригирал съм програмката в първия пост както е така я компилирам и нищо може би някъде другаде греша.Но къде не знам.

Автор:  michev [ Съб Юни 14, 2014 7:09 pm ]
Заглавие:  Re: Моля за малко помощ

Първо - започни да слагаш малко препинателни знаци като пишеш, че голям зор виждам..
Второ - слагай си кода в "code" таг и го подреждай, че и той не се чете..
Сега по въпроса - не работи вероятно поради повече от една причина, но има една основна която се вижда от далеч - програмата ти "приключва". Не трябва да допускаш излизане от main функцията. Като си си правил нов проект, IDE-то ти е бълнало main функцията с един while(1) {}, който си забърсал..
Ако изпуснем неправилния подход който си избрал, то товя код би изглеждал ей така:
Код:
#include <test2.h>
#byte CMCON = 0x19

#FUSES INTRC,NOWDT,NOPUT,MCLR,NOPROTECT,NOCPD,NOBROWNOUT
#use delay(internal=4MHz)

#bit r1=0x05.0 //LED
#bit b1=0x05.3 //Button
#byte CMCON = 0x19

void main()
{
   CMCON = 0x07;
   SET_TRIS_A(0x04);

   while (1)
   {
      do
      {
         r1=0;
         delay_ms(50);
      } while (b1==0);
   
      if(b1==1)
      {
         r1=1;
         delay_ms(5000);
      }
   
      do
      {
         r1=0;
         delay_ms(50);
      } While(b1==0);
   }
}


Автор:  vladivvs [ Съб Юни 14, 2014 7:35 pm ]
Заглавие:  Re: Моля за малко помощ

Да благодаря за забележките,ще се постарая всичко да е наред.Сега искам да попитам този код трябва ли да работи или има още нещо,което трябва да се допълни?Защото компилирах кода в hex. файл и отново светодиода не иска да светне.

Автор:  michev [ Съб Юни 14, 2014 9:13 pm ]
Заглавие:  Re: Моля за малко помощ

Ами.. трябва четене.. поне на отговорите които са ти дали другите.. като Cekins например.
Cekins написа:
Ами побитово 0х04 е 0b00000100 :) на теб ти трябва да е 0х08

CMCON=7 също. GPIO.0 е вход на компаратора и при тия контролери по подразбиране си е вход на компаратора. Не можеш го накара да е друго каквото и да правиш докато не изключиш компаратора.

На пин А номер 3 си сложил бутон, само че, номерацията започва от 0 и съответно номер 3 е всъщност 4-ти извод. Във функцията указваща кой извод какво е (вход или изход), си задал 0x04, което указва ПИН_А2 да е вход.. Предполагам сега виждаш къде е едната от грешките?
Защо не почнеш с нещо още по - просто? Например със светване на светодиода без да си натискаш бутон.
Код:
void main(void) {
    CMCON = (1<<0) | (1<<1) | (1<<2); // = 0x07
    set_tris_a(1<<3); // = 0x08

    r1 = 1;
   
    while (1)
    {
    }
}


Като го светнеш, ще включим и бутона в цялата тая схема.

Автор:  vladivvs [ Съб Юни 14, 2014 9:35 pm ]
Заглавие:  Re: Моля за малко помощ

Ами аз накарах светодиод дори и да мига,и затова ми стана още по интересно.Но и плюс това там няма значение компаратор ли е какво е свети си мига си няма проблем.Поразмислих малко и реших да пробвам нещо по сложно,затова се спрях на това светване на диод с бутонче.А това за пиновете не е ли започваме от GP0;GP1;GP2;GP3 и така нататък от там да броим началото или от пиновете си ги броим по ред,както си ги броим?

Автор:  michev [ Съб Юни 14, 2014 9:55 pm ]
Заглавие:  Re: Моля за малко помощ

Моя грешка че написах "извод".. Мисълта ми бе, че портовете започват от 0 и съответно в твоя случай GP3 = 4-тия по ред от тоя порт. За справка кой извод физически на кой извод на корпуса излиза - гледаш само документацията на чипа.
Преди да почнеш да пишеш код за бутона, то ще трябва да го подвържеш правилно към контролера. Бих ти препоръчал да сложиш 1 резистор 10к м/у извод PA3 и Vcc. Бутона съответно м/у PA3 и маса + 1 кондензаторче 100nF.
С това свързване на бутона, ще имаш лог. 1 при НЕ натиснат бутон и съответно лог. 0 при натиснат.

Автор:  vladivvs [ Съб Юни 14, 2014 10:00 pm ]
Заглавие:  Re: Моля за малко помощ

Да да значи всичко е правилно както съм го разбрал така е.Схемата съм я изпълнил точно по този начин само че без кондензатор но не е проблем ще споя един винаги е в логическа 1,когато не е натиснат бутона и съответно 0,когато е натиснат.

Страница 1 от 4 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/