| Автор |
Съобщение |
|
vladivvs
Ранг: Минаващ
Регистриран на: Вто Окт 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 |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: Моля за малко помощ
Ами бутона ти е изход а светодиода вход - трис трябва да ти изглежда нещо такова побитово : 0bхххх1хх0. Регистъра се казва TRISIO. Регистъра CMCON трябва да е 0x07 за да се изключи компаратора. Иии за друго сега не се сещам...
едит : между другото - за да ти е лесно да запомниш кое вход и кое изход : 1nput и 0utput
|
| Пет Юни 13, 2014 10:05 pm |
|
 |
|
vladivvs
Ранг: Минаващ
Регистриран на: Вто Окт 09, 2007 11:06 pm Мнения: 74 Местоположение: Търговище
|
 Re: Моля за малко помощ
Аз пробвах и побитово но резултата беше същият.Нищо не светна.
|
| Пет Юни 13, 2014 10:30 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: Моля за малко помощ
Ами побитово 0х04 е 0b00000100  на теб ти трябва да е 0х08 CMCON=7 също. GPIO.0 е вход на компаратора и при тия контролери по подразбиране си е вход на компаратора. Не можеш го накара да е друго каквото и да правиш докато не изключиш компаратора.
|
| Пет Юни 13, 2014 10:36 pm |
|
 |
|
vladivvs
Ранг: Минаващ
Регистриран на: Вто Окт 09, 2007 11:06 pm Мнения: 74 Местоположение: Търговище
|
 Re: Моля за малко помощ
Добре дотук ми стана още по интересно и как се изключва компаратор ако може да ми обясниш?
|
| Пет Юни 13, 2014 10:44 pm |
|
 |
|
michev
Ранг: Форумен бог
Регистриран на: Сря Юли 11, 2007 10:16 am Мнения: 1730
|
 Re: Моля за малко помощ
CMCON = 0x07 .. или 0b00000111
|
| Пет Юни 13, 2014 11:43 pm |
|
 |
|
vladivvs
Ранг: Минаващ
Регистриран на: Вто Окт 09, 2007 11:06 pm Мнения: 74 Местоположение: Търговище
|
 Re: Моля за малко помощ
Тази команда нали се пише в основната програма ?Или ако може някой да напише и да качи за да видя нагледно как се прави.
|
| Съб Юни 14, 2014 5:12 pm |
|
 |
|
michev
Ранг: Форумен бог
Регистриран на: Сря Юли 11, 2007 10:16 am Мнения: 1730
|
 Re: Моля за малко помощ
|
| Съб Юни 14, 2014 6:39 pm |
|
 |
|
vladivvs
Ранг: Минаващ
Регистриран на: Вто Окт 09, 2007 11:06 pm Мнения: 74 Местоположение: Търговище
|
 Re: Моля за малко помощ
Да Благодаря колега но защо отново не иска коригирал съм програмката в първия пост както е така я компилирам и нищо може би някъде другаде греша.Но къде не знам.
|
| Съб Юни 14, 2014 6:55 pm |
|
 |
|
michev
Ранг: Форумен бог
Регистриран на: Сря Юли 11, 2007 10:16 am Мнения: 1730
|
 Re: Моля за малко помощ
Първо - започни да слагаш малко препинателни знаци като пишеш, че голям зор виждам.. Второ - слагай си кода в "code" таг и го подреждай, че и той не се чете.. Сега по въпроса - не работи вероятно поради повече от една причина, но има една основна която се вижда от далеч - програмата ти "приключва". Не трябва да допускаш излизане от main функцията. Като си си правил нов проект, IDE-то ти е бълнало main функцията с един while(1) {}, който си забърсал.. Ако изпуснем неправилния подход който си избрал, то товя код би изглеждал ей така:
|
| Съб Юни 14, 2014 7:09 pm |
|
 |
|
vladivvs
Ранг: Минаващ
Регистриран на: Вто Окт 09, 2007 11:06 pm Мнения: 74 Местоположение: Търговище
|
 Re: Моля за малко помощ
Да благодаря за забележките,ще се постарая всичко да е наред.Сега искам да попитам този код трябва ли да работи или има още нещо,което трябва да се допълни?Защото компилирах кода в hex. файл и отново светодиода не иска да светне.
|
| Съб Юни 14, 2014 7:35 pm |
|
 |
|
michev
Ранг: Форумен бог
Регистриран на: Сря Юли 11, 2007 10:16 am Мнения: 1730
|
 Re: Моля за малко помощ
Ами.. трябва четене.. поне на отговорите които са ти дали другите.. като Cekins например. На пин А номер 3 си сложил бутон, само че, номерацията започва от 0 и съответно номер 3 е всъщност 4-ти извод. Във функцията указваща кой извод какво е (вход или изход), си задал 0x04, което указва ПИН_А2 да е вход.. Предполагам сега виждаш къде е едната от грешките? Защо не почнеш с нещо още по - просто? Например със светване на светодиода без да си натискаш бутон. Като го светнеш, ще включим и бутона в цялата тая схема.
|
| Съб Юни 14, 2014 9:13 pm |
|
 |
|
vladivvs
Ранг: Минаващ
Регистриран на: Вто Окт 09, 2007 11:06 pm Мнения: 74 Местоположение: Търговище
|
 Re: Моля за малко помощ
Ами аз накарах светодиод дори и да мига,и затова ми стана още по интересно.Но и плюс това там няма значение компаратор ли е какво е свети си мига си няма проблем.Поразмислих малко и реших да пробвам нещо по сложно,затова се спрях на това светване на диод с бутонче.А това за пиновете не е ли започваме от GP0;GP1;GP2;GP3 и така нататък от там да броим началото или от пиновете си ги броим по ред,както си ги броим?
|
| Съб Юни 14, 2014 9:35 pm |
|
 |
|
michev
Ранг: Форумен бог
Регистриран на: Сря Юли 11, 2007 10:16 am Мнения: 1730
|
 Re: Моля за малко помощ
Моя грешка че написах "извод".. Мисълта ми бе, че портовете започват от 0 и съответно в твоя случай GP3 = 4-тия по ред от тоя порт. За справка кой извод физически на кой извод на корпуса излиза - гледаш само документацията на чипа. Преди да почнеш да пишеш код за бутона, то ще трябва да го подвържеш правилно към контролера. Бих ти препоръчал да сложиш 1 резистор 10к м/у извод PA3 и Vcc. Бутона съответно м/у PA3 и маса + 1 кондензаторче 100nF. С това свързване на бутона, ще имаш лог. 1 при НЕ натиснат бутон и съответно лог. 0 при натиснат.
|
| Съб Юни 14, 2014 9:55 pm |
|
 |
|
vladivvs
Ранг: Минаващ
Регистриран на: Вто Окт 09, 2007 11:06 pm Мнения: 74 Местоположение: Търговище
|
 Re: Моля за малко помощ
Да да значи всичко е правилно както съм го разбрал така е.Схемата съм я изпълнил точно по този начин само че без кондензатор но не е проблем ще споя един винаги е в логическа 1,когато не е натиснат бутона и съответно 0,когато е натиснат.
|
| Съб Юни 14, 2014 10:00 pm |
|
|