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

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

Автор:  kiler_4o [ Вто Ное 18, 2008 3:29 am ]
Заглавие:  Моля за малко помощ с елементарна програмка...

добре, не мога да разбера, аз ли съм толкова прост или... не исках да пускам тема тук, защото знам, че на такива глупави и елементарни въпроси много се нервите, но няма начин вече ... направих 100000 проби с различни промени, прегледах незнам колко десетки примерни програми, изчетох целия хелп на PICC ... само книги за PIC C не съм чел, но и до там ще стигна ...

НО ... това нещо ме побърка ...

Искам да напиша елементарна програмка с цикъла for, която да премества едно серво от начално в крайно положение ... ок... първо направих с 2 цикъла, от начално до крайно и обратно... качих я в контролера - нищо ... сервото мърда с по една стъпка на 2 секунди... после мъчих само да го преместя от началото до края - по същия начин ... накрая написах програма 200 реда с по 10-тина реда импулси с различни широчини, само и само да разбера дали аз бъркам нещо със сервото или не ... еми сервото работеше ... явно проблемът е в цикъла for ...

така... днес изтеглих Proteus и продължих с опитите ...


накрая след много опити получих, че в моя код 1ms=100us ?!?!?!?! да... или поне така излиза според моите сметки - когато разделя s на 1000 получавам на осцилоскопа в Proteus импулси от по 0,1 до 0,2 ms, което по принцип не е логично ... както и да е ... ето Ви последния source код, с който получих поне преместване от -90 почти до 0 градуса на сервото и това се повтаря много пъти... накрая отива на +90 градуса и си остава там ... (не можах да разбера в крайна сметка и как да накарам програмата да се повтори)...
И само ще Ви помоля да няма изказвания тип:
няма значение кой написа:
честно казано ..... незнам дали и на автомивка ще се справяш.........

ще съм много благодарен ...

Код:
#include <16f84a.h>
#use delay (clock=4000000)
void main()
{
int n=1,s=0;
for(;n<=100;n++)
{
s=1000+n*10;
output_high(PIN_A0);
delay_ms(s/100);
output_low(PIN_A0);
delay_ms(20);
}
}




Благодаря предварително... Не знаете толкова елементарно нещо колко главоболия ми създаде... само тая вечер от около 2 часа го мъча... а това е третия път, в който се занимавам с тея сервота...

Автор:  fan [ Вто Ное 18, 2008 4:52 am ]
Заглавие: 

Ето ти нещо работещо и .. спи спокойно!
void main()
{
unsigned long n=1,s=0;

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
set_tris_a (0xF7);
for(;n<=100;n++) {
s=10000+n*100;
output_high(PIN_A0);
delay_us(s);
output_low(PIN_A0);
delay_ms(20);
}

}

Автор:  kiler_4o [ Вто Ное 18, 2008 11:46 am ]
Заглавие: 

Или компилаторът нещо си прави гавра с мен и не прекомпилира програмата (което ме съмнява), или и тази програма нещо не работи както трябва, или имам грешка в схемата...

ще пусна после схемата, за да ми кажете къде е грешката (ако не я открия до тогава де), че сега нямам време (лекции)...

Автор:  kiler_4o [ Сря Ное 19, 2008 12:52 am ]
Заглавие: 

ооо да :) Сложих твоята програма и пак не стана... изнервих се, копирах целия код и затворих всички проекти в PIC C Compiler-a ... направих нов проект, нов source file и paste-нах всичко - сработи идеално :) Даже се оправи и другото - 1ms=1000us вече :D

Благодаря за помощта :) Сега вече мога да правя по-сложния проект, вече с реалното серво :)

Автор:  tgi [ Чет Ное 20, 2008 2:13 am ]
Заглавие: 

За да накараш нещо да заработи, трябва първо да разбереш *защо* не работи.
Което в случая предполага доста труд, предполагам, но *това* е начинът, по
който го правят всички, които могат да го правят.
Със сляпо бутане тук и там понякога също става, разбира се,
то и някои лотарийни билети печелят.

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