Отговори на тема  [ 48 мнения ]  Отиди на страница 1, 2, 3, 4  Следваща
Моля за малко помощ 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Вто Окт 09, 2007 11:06 pm
Мнения: 74
Местоположение: Търговище
Мнение Моля за малко помощ
Моля за помощ към хора,които могат да помогнат защото сега започвам от 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);
}


Последна промяна vladivvs на Съб Юни 14, 2014 6:52 pm, променена общо 1 път



Пет Юни 13, 2014 9:21 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: Моля за малко помощ
Ами бутона ти е изход а светодиода вход - трис трябва да ти изглежда нещо такова побитово : 0bхххх1хх0. Регистъра се казва TRISIO. Регистъра CMCON трябва да е 0x07 за да се изключи компаратора. Иии за друго сега не се сещам...

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


Пет Юни 13, 2014 10:05 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Вто Окт 09, 2007 11:06 pm
Мнения: 74
Местоположение: Търговище
Мнение Re: Моля за малко помощ
Аз пробвах и побитово но резултата беше същият.Нищо не светна.


Пет Юни 13, 2014 10:30 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение Re: Моля за малко помощ
Ами побитово 0х04 е 0b00000100 :) на теб ти трябва да е 0х08

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


Пет Юни 13, 2014 10:36 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Вто Окт 09, 2007 11:06 pm
Мнения: 74
Местоположение: Търговище
Мнение Re: Моля за малко помощ
Добре дотук ми стана още по интересно и как се изключва компаратор ако може да ми обясниш?


Пет Юни 13, 2014 10:44 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Юли 11, 2007 10:16 am
Мнения: 1730
Мнение Re: Моля за малко помощ
CMCON = 0x07 .. или 0b00000111


Пет Юни 13, 2014 11:43 pm
Профил
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Вто Окт 09, 2007 11:06 pm
Мнения: 74
Местоположение: Търговище
Мнение Re: Моля за малко помощ
Тази команда нали се пише в основната програма ?Или ако може някой да напише и да качи за да видя нагледно как се прави.


Съб Юни 14, 2014 5:12 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Юли 11, 2007 10:16 am
Мнения: 1730
Мнение Re: Моля за малко помощ
Код:
...
#bit r1=0x05.0 //LED
#bit b1=0x05.3 //Button
#byte CMCON = 0x19
.....
...
CMCON = 0x07;
SET_TRIS_A(0x04);
do
....


Съб Юни 14, 2014 6:39 pm
Профил
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Вто Окт 09, 2007 11:06 pm
Мнения: 74
Местоположение: Търговище
Мнение Re: Моля за малко помощ
Да Благодаря колега но защо отново не иска коригирал съм програмката в първия пост както е така я компилирам и нищо може би някъде другаде греша.Но къде не знам.


Съб Юни 14, 2014 6:55 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Юли 11, 2007 10:16 am
Мнения: 1730
Мнение 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);
   }
}



Съб Юни 14, 2014 7:09 pm
Профил
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Вто Окт 09, 2007 11:06 pm
Мнения: 74
Местоположение: Търговище
Мнение Re: Моля за малко помощ
Да благодаря за забележките,ще се постарая всичко да е наред.Сега искам да попитам този код трябва ли да работи или има още нещо,което трябва да се допълни?Защото компилирах кода в hex. файл и отново светодиода не иска да светне.


Съб Юни 14, 2014 7:35 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Юли 11, 2007 10:16 am
Мнения: 1730
Мнение 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)
    {
    }
}


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


Съб Юни 14, 2014 9:13 pm
Профил
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Вто Окт 09, 2007 11:06 pm
Мнения: 74
Местоположение: Търговище
Мнение Re: Моля за малко помощ
Ами аз накарах светодиод дори и да мига,и затова ми стана още по интересно.Но и плюс това там няма значение компаратор ли е какво е свети си мига си няма проблем.Поразмислих малко и реших да пробвам нещо по сложно,затова се спрях на това светване на диод с бутонче.А това за пиновете не е ли започваме от GP0;GP1;GP2;GP3 и така нататък от там да броим началото или от пиновете си ги броим по ред,както си ги броим?


Съб Юни 14, 2014 9:35 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

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


Съб Юни 14, 2014 9:55 pm
Профил
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Вто Окт 09, 2007 11:06 pm
Мнения: 74
Местоположение: Търговище
Мнение Re: Моля за малко помощ
Да да значи всичко е правилно както съм го разбрал така е.Схемата съм я изпълнил точно по този начин само че без кондензатор но не е проблем ще споя един винаги е в логическа 1,когато не е натиснат бутона и съответно 0,когато е натиснат.


Съб Юни 14, 2014 10:00 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 48 мнения ]  Отиди на страница 1, 2, 3, 4  Следваща

Кой е на линия

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


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

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