Автор Тема: Здраствайте ! Ако някой може да помогне относно С.....  (Прочетена 28379 пъти)

Bluebear

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 101
    • Профил
Нов сам в роботиката и немога да се справя със програмирането на езикът С  :(   :(  та става въпрос за бибилиотеките в него ако някой може да обясни коя за какво служи ще съм благодарен много  :)  :)
Георги Тодоров гр.Пазарджик skype: blubear_pz93 Човек не е победен докато не се признае за такъв !!!

Borislav

  • Administrator
  • *****
  • Публикации: 1010
    • Профил
    • http://robotics-bg.com
Цитат на: "Bluebear"
Нов сам в роботиката и немога да се справя със програмирането на езикът С  :(   :(  та става въпрос за бибилиотеките в него ако някой може да обясни коя за какво служи ще съм благодарен много  :)  :)


Много зависи кои библиотеки ти трябват. :) Можеш да почетеш в книгите по С++. Тук е даден само основният метод за командване на портовете. Като за начало само това ще ти трябва. Иначе, предполагам знаеш, че има и help-графа във всеки компилатор, с който можеш много да си улесниш живота.
Поздрави и успех! :)
Роботиката не е хоби - тя е начин на живот!

Bluebear

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 101
    • Профил
благодарим мн ще видя от каде мога да си измъкна (из форума имаше линкове за компилатори) и ще видя дали ще успея ама съм дебела глава  :D  :D  както и да е на мен ми трябват основните които тук се ползват а те са : stdio.h studio.h и още една та точно те ми трябват  :)  добре сега продалжавам да чета за С пък да видим.......
Георги Тодоров гр.Пазарджик skype: blubear_pz93 Човек не е победен докато не се признае за такъв !!!

spookyboy

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 103
    • Профил
Общо взето имената на библиотеките говорят сами за себе си.
iostream.h - I/O stream или input/output stream - служи за боравене с входящи и изходящи потоци
stdio.h - std=standard, io=I/O, тоест стандартна входно изходна библиотека
math.h - за математически функции и т.н.
studio.h няма :) за подробно описани всички функции може да погледнеш на http://www.cppreference.com/
Станьо - 20г. - извън чужбина

Bluebear

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 101
    • Профил
Мда...сайта ми помогна много даже и смятам да почвам този петък защото пък преди това имам някакъв изпит по външно оценяване и няма да мога,но пък в петък съм доста свободен та ще видя какво мога да направя по въпроса......  :)  :)  :)
Георги Тодоров гр.Пазарджик skype: blubear_pz93 Човек не е победен докато не се признае за такъв !!!

Bluebear

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 101
    • Профил
Значи да видим дали съм разбрал........ако трябва да дефинираме портовете на......примерно на ATmega8 трябва да започна програмата със {  след като съм започнал програмата трябва да запиша първия от портовете като име и от тип int примерно и да запиша като аргумент това което е запоено към него(двигател или светодиод примерно)след това приключа програмата със } след това почвам следващия порт и така...... да се надяваме,че съм разбрал  :roll:  :lol:
Георги Тодоров гр.Пазарджик skype: blubear_pz93 Човек не е победен докато не се признае за такъв !!!

Borislav

  • Administrator
  • *****
  • Публикации: 1010
    • Профил
    • http://robotics-bg.com
Ето ти част от програмата ми за сумобота, за да те олесни на този етап. Когато изгладя бъговете, ще я пусна и цялата.

Код:

#include <avr/io.h>
#include <util/delay.h>

#define F_CPU 7372800UL

void delay_ms(unsigned int ms)
{
   
   while (ms>0){
       _delay_ms(1);
      ms--;
   }
   
}




int main(void)
{
   DDRC = 0x00;

   DDRD |= 1<<6;
   DDRD |= 1<<7;  
   DDRB |= 1<<0;
   DDRB |= 1<<1;



while (1) {


if (!(PINC & (1<<PINC0)))
if (!(PINC & (1<<PINC1)))
{
PORTD |= _BV(PD6);
            PORTD &= ~_BV(PD7);
            PORTB |= _BV(PB0);
            PORTB &= ~_BV(PB1);
}
else
{
            PORTD &= ~_BV(PD6);
            PORTD |= _BV(PD7);
            PORTB &= ~_BV(PB0);
            PORTB |= _BV(PB1);

delay_ms(1800);


            PORTD |= _BV(PD6);
            PORTD &= ~_BV(PD7);
            PORTB &= ~_BV(PB0);
            PORTB |= _BV(PB1);

delay_ms(600);
}
....


Хайде сега намери в раздела "Алгоритми и програми", какво прави всяка от функциите и ги напиши отстрани като коментари.
Коментарите в C започват така: // Текст
Поздрави! :)
Роботиката не е хоби - тя е начин на живот!

Bluebear

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 101
    • Профил
#include <avr/io.h>      // значии....това е библиотека
#include <util/delay.h> // това също с тях винаги се започва една програма....

#define F_CPU 7372800UL  // тук виждам си дефинирал порт F на микроконтролера за нещо,но какво.......  

void delay_ms(unsigned int ms)  // тук е извикана функцията delay от тип void мисля.....
{  // започване на същинската програма.....

while (ms>0){  // изчакване да се изпълни нещо
       _delay_ms(1);  // ???
      ms--;  // ???
   }
   
}  //приключване на тази част от програмата




int main(void) // функцията main от тип int,аа защо void е в скоби ?
{  // започване на друга функция към друг порт от микроконтролера
   DDRC = 0x00; // ???

   DDRD |= 1<<6; // ???
   DDRD |= 1<<7; // ???
   DDRB |= 1<<0; // ???
   DDRB |= 1<<1; // ???



while (1) {


         if (!(PINC & (1<<PINC0)))
            if (!(PINC & (1<<PINC1)))
            {
               PORTD |= _BV(PD6);
                  PORTD &= ~_BV(PD7);
                  PORTB |= _BV(PB0);
                  PORTB &= ~_BV(PB1);
            }
            else
            {
                  PORTD &= ~_BV(PD6);
                  PORTD |= _BV(PD7);
                  PORTB &= ~_BV(PB0);
                  PORTB |= _BV(PB1);
         
               delay_ms(1800);

         
                  PORTD |= _BV(PD6);
                  PORTD &= ~_BV(PD7);
                  PORTB &= ~_BV(PB0);
                  PORTB |= _BV(PB1);

               delay_ms(600);
            }  // приключване на програмата като цяло,а за останалото....


много ама много съм зле........  :(  както и да е.Все ще се науча.....математиката за мен е огромно мъчение,а тук тя не е трудна кой знае колко и все пак....
Георги Тодоров гр.Пазарджик skype: blubear_pz93 Човек не е победен докато не се признае за такъв !!!

DataMatrix

  • Заклет Роботостроител
  • *****
  • Публикации: 308
    • Профил
    • http://datamatrix-bg.net/
Не бъркайте човека с тоя сбъркан C за Atmel-ските контролери. :zubi:
#include <16f877a.h> /*header-niq fail za saotvetniq kontroler*/
#use clock(8000000) /*zadavane na 4estota na rabota za funckiqta delay_ms()*/

void main(void) /* главната фунция, тя ще започне да се изпълнява когато пуснем контролера*/
{
 for(;;) /*празен цикъл*/
 {
  /*начало на кода на програмата*/
  output_high(PIN_B0); /*задаваме високо ниво на пин 0 от порт Б на контролера*/
  delay_ms(1000); /*изчакване 1 секунда*/
  output_low(PIN_B0); /*ниско ниво (0V) на пин 0 от порт Б (гасим го)*/
  delay_ms(1000); /*изчакване 1 секунда*/
  /*край на кода на програмата*/
 }
}

Тази програма е реализирана за контролера PIC16F877A (ако смените хедърния файл и честотата в първите 2 реда от кода може спокойно да използвате PIC16F84A). Ако сложите светодиод на пин 0 от порт Б, той ще свети 1 секунда, после ще е изгасен 1 секунда и това ще се повтаря (за това е нужен безкрайния цикъл. може да използвате и while(1) вместо for(;; ))
Коментарите са оградени в /* коментар */
ПП: програмата я написах по памет, тъй като в момента съм на друг компютър, на който я няма. Възможно е да има някоя дребна грешка. По-късно ще се опитам да проверя.
Димитър Бояджиев, гр. София

Bluebear

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 101
    • Профил
Благодаря много за помоща  :)   имаше доста полезни неща в това чудо добре и този път мога да се похваля,че го разбрах.....  :zubi:  :clap:  :clap:  ,а иначе как съм се справил с разчитането на онази програма,която ми беше дал Borislav....  :zubi:
Георги Тодоров гр.Пазарджик skype: blubear_pz93 Човек не е победен докато не се признае за такъв !!!

Borislav

  • Administrator
  • *****
  • Публикации: 1010
    • Профил
    • http://robotics-bg.com
Цитат на: "DataMatrix47"
Не бъркайте човека с тоя сбъркан C за Atmel-ските контролери. :zubi:


Е, Митко...това е въпрос на вкус. :-D Като за начало, Atmel-овските чипове са добър избор. :ras: :) А за спора "AVR vs PIC", може да се говори много, та да не подхващаме темата. :)
@ Bluebear, напоследък не ми се намира време, но ще ти помогна към края на седмицата.
Роботиката не е хоби - тя е начин на живот!

Bluebear

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 101
    • Профил
Ееее всяка помощ ми е добре дошла  :)  :)  :)  ,ноо хубавото е,че макар и малко по малко напредвам   8)  8)  8)  8)
Георги Тодоров гр.Пазарджик skype: blubear_pz93 Човек не е победен докато не се признае за такъв !!!

DataMatrix

  • Заклет Роботостроител
  • *****
  • Публикации: 308
    • Профил
    • http://datamatrix-bg.net/
@Borislav нямам го това горе наистина в предвид, просто се закачам, обичайния спор..  :zubi:  :roll:  ;)

Bluebear, ти всъщност от кой C си заинтересуван? gcc (линукс или windows стандартен компютърен компилатор), PIC C, ATMega C?
Питам за да знаем как да ти помагаме.
Димитър Бояджиев, гр. София

Bluebear

  • Бил знаел какво е Мехатроника!
  • *****
  • Публикации: 101
    • Профил
windows pic c смятам,че за Atmega е малко рано,но имам планове и за него  8)  та за PIC ,защото мисля,че е за начинаещи  :)
Георги Тодоров гр.Пазарджик skype: blubear_pz93 Човек не е победен докато не се признае за такъв !!!

sv_shady

  • Administrator
  • *****
  • Публикации: 636
    • Профил
Тука си малко в грешка :) Всичко, което може да бъде реализирано с Аtmega, може и с PIC. Така ти се е сторило понеже компилатора на С за атмегата е от по - ниско ниво и се пише директно по регистрите, докато CCS компилатора предлага функции от по-високо ниво и сам се грижи за сетването и чистенето на различните контролни битове и регистри, което понякога си е нож с две остриета, но винаги я има директивата
#asm
{
   .....
}
#endasm

:) но това като понапреднеш ще разбереш за какво е :)
Imagination is the only limit.......

Светлин Пенков
София / Рединг, Великобритания