roboforum.ru

Технический форум по робототехнике.

AVR на C/C++ программирование - вводный курс

Re: Вводный курс для программирования МК AVR на языке C/C++

EdGull » 28 июл 2008, 10:23

ага... тото я смотрю что у нас все нормальные коды только на васике достпупны!... :ROFL:

Re: Вводный курс для программирования МК AVR на языке C/C++

=DeaD= » 28 июл 2008, 10:50

Где это "у нас все нормальные коды только на васике достпупны" ?

Re: Вводный курс для программирования МК AVR на языке C/C++

EdGull » 28 июл 2008, 11:15

ты не поверишь, в вике :D
лично выкладывал :wink:

Re: Вводный курс для программирования МК AVR на языке C/C++

=DeaD= » 28 июл 2008, 11:51

1. Это непоказательная выборка, вот если бы у нас 20-30 человек выкладывало независимые друг от друга проекты написанные с нуля и там был бы только васик - вот тогда да, а тут ты создал платформу ты выкладываешь на том языке который знаешь - по моему подтасовка результатов налицо 8)

2. Если ты не ходил по вике за пределы раздела МиниБот, то это ничего еще не значит, позволю себе привести другие коды, которые выложил я :) которые не на васике: [[Библиотека myCV]], [[Библиотека cvQCodeBeacons]], [[Библиотека myPolyBool]], [[Библиотека PolyMap]], [[Библиотека myBasicGeometry]], это не считая работы других участников в вике и того что куча библиотек уже написана на Си\Си++ только я их сюда не перевыкладываю.

Re: Вводный курс для программирования МК AVR на языке C/C++

EdGull » 28 июл 2008, 12:14

Ура! Ура! Ура!... :Yahoo!:
у нас теперь есть библы для работы с видео под МК!!! :ROFL:

Ага!.. Щазаз!!! Нука покажи нормальные коды для роботов под МК. :wink:

Добавлено спустя 1 минуту 10 секунд:
типа:
вперед
назад
поморгать светиком
попищать динамиком

вот то-то! :P

Re: Вводный курс для программирования МК AVR на языке C/C++

Сергей » 28 июл 2008, 13:19

Так, харэ уже. Давайте вы будете спорить о языках в другой ветке. Если не успокоетесь - перетащу в новую ветку, либо сами перетащите. Так будем делать ввводный курс или нет?

Re: Вводный курс для программирования МК AVR на языке C/C++

EdGull » 28 июл 2008, 13:25

Курс делать нужно однозначно, к гадалке не ходи.
Здесь флудим от безисходности и для поднятия морального духа.
Когда будут нормальные примеры для начинающих весь флуд почистим.
Примеры из васика я здесь привожу специально, что бы было видна конструкция языка которая даже мне понятна.
А уж начинающим и подавно.

Re: Вводный курс для программирования МК AVR на языке C/C++

Сергей » 28 июл 2008, 13:55

Ну так заведи тему Вводного курса МК на Васике. А примеры в начале уже были. Как только прикратим флуд и почистим все, я начну выкладывать новые примеры.

Re: Вводный курс для программирования МК AVR на языке C/C++

EdGull » 28 июл 2008, 14:00

Си-шные примеры которые здесь были преведены, они не для начинающих!
Если дальнейшие будут в таком же духе, то они нафиг не нужны.
Я вот до сих пор не осознал всей элегантности вышеприведенных примеров.
Мало того я их смысла не понимаю!

Вводный курс МК на Васике и так уже можно собирать из виковских уроков для минибота. Так что ты от темы не уходи.

Re: Вводный курс для программирования МК AVR на языке C/C++

Сергей » 28 июл 2008, 14:15

Как это не для начинающих?? А какие примеры для начинающих на Си ты хочешь видеть? Вот залезь в гугл, найди такой пример "для начинающих на МК" :o

Re: Вводный курс для программирования МК AVR на языке C/C++

Кирилл » 28 июл 2008, 14:20

Эд, зря ты так. пример простейшей программы моргания светодиодом был представлен и разобраться в нем можно без труда. Другое дело что сишники легких путей не ищут и выложили решения этой же задачи только более изощренным способом, тем самым запутывая людей не знающих Си.
вот код из вики:
Код: Выделить всёРазвернуть
#include <avr/io.h>
#include <util/delay.h>
#include <inttypes.h>

int main(void)
{
   char i;
   DDRB = 0xFF;
   PORTB = 0x00;

   while(1)
   {
      for(i = 0; i < 100; i++)
         _delay_ms(10);
      PORTB = 0xFF;
      for(i = 0; i < 100; i++)
         _delay_ms(10);
      PORTB = 0x00;
   }
   return 0;
}

мне лично, человеку не разу в жизни не написавшему ни одной строчки на Си он понятен, а тебе? :)

кстати, Dead, в вики походу ошибка. С сайта Атмела нада наверное скачивать AVR Studio, а не WinAVR. :wink:

Re: Вводный курс для программирования МК AVR на языке C/C++

rig » 28 июл 2008, 14:48

в CVAVR работает
delay_ms(1000) и delay_ms(5000), сам проверял так что можно упростить код, убрав циклы.

Re: Вводный курс для программирования МК AVR на языке C/C++

Vooon » 28 июл 2008, 15:00

А так не проще ли будет?
Код: Выделить всёРазвернуть
#include <avr/io.h>
#include <util/delay.h>
#include <inttypes.h>

int main(void)
{
   char i;
   DDRB = 0xFF;
   PORTB = 0x00;

   while(1)
   {
      for(i = 0; i < 100; i++)
         _delay_ms(10);
      PORTB ^= 0xFF; // побитовое исключающее или, в нашем случае просто инвертирование.
                     // если непонятно то man xor; google://исключающее или
   }
   return 0;
}


Добавлено спустя 7 минут 12 секунд:
или вот мигалка поинтереснее:
Код: Выделить всёРазвернуть
#include <avr/io.h>
#include <util/delay.h>
#include <inttypes.h>

int main(void)
{
   unsigned char i, mask = 0x5A;
   DDRB = 0xFF;
   PORTB = 0x00;

   while(1)
   {
      for(i = 0; i < 100; i++)
         _delay_ms(10);
      mask ^= 0xFF;
      PORTB ^= mask;
   }
   return 0;
}

Re: Вводный курс для программирования МК AVR на языке C/C++

Сергей » 28 июл 2008, 15:02

rig писал(а):в CVAVR работает
delay_ms(1000) и delay_ms(5000), сам проверял так что можно упростить код, убрав циклы.

Давайте не будем писать в CV? там библиотеки хорошие, но всетакие не айс. Я предлагаю писать в WInAVR, - там _delay_ms в среднем не может быть больше 200 в зависимости от кварца.

Добавлено спустя 1 минуту 22 секунды:
Vooon, ща ты будешь новичкам объяснять что такое маска и битовые операциия))) Тут же у нас еще курс Си)))

Re: Вводный курс для программирования МК AVR на языке C/C++

blindman » 28 июл 2008, 15:04

Vooon писал(а):А так не проще ли будет?
.......

Проще - да. Понятнее - однозначно нет. Понятнее всего наверно так:

Код: Выделить всёРазвернуть
#include "library.h"

int main(void)
{
    bit_set(DDRB, 1);
    while (1) {
        bit_set(PORTB, 1);
        wait_ms(300);
        bit_clear(PORTB, 1);
        wait_ms(300);
    }
}



Может имеет смысл сначала сделать простую библиотеку базовых функций, и уже на ее основе делать курс или как-там-его-назвать?

Вместо
Код: Выделить всёРазвернуть
PORTB |= (1 << 6);
будет
Код: Выделить всёРазвернуть
bit_set(PORTB, 6);

Вместо
Код: Выделить всёРазвернуть
PORTB &= ~(1 << 6);
будет
Код: Выделить всёРазвернуть
bit_clear(PORTB, 6);

Вместо
Код: Выделить всёРазвернуть
PORTB ^= (1 << 6);
будет
Код: Выделить всёРазвернуть
bit_invert(PORTB, 6);


Диапазон аргументов к функциям/макросам задержек расширить, другие базовые вещи сделать.


Rambler\'s Top100 Mail.ru counter