#1 Re: Програмування Arduino » построение программы в Arduino » 2017-08-04 20:47:32

NoName пише:

базовый принцип
для вашего MCU  -  сами разберетесь

Вы приводите просто другой способ. Никакого преимущества он не дает и никакой он не базовый. Даже хуже. У вас это побитные операции, а по моей записи компилятор CVAVR, как пишут специалисты, формирует масочную. Это имеет преимущество и по длине кода и по времени выполнения.
Можно еще ассемблерный код включить. Это кому как нравится. Способ изменения битов не один.
Но ни ваш пример, ни ваши комментарии не имеют никакого отношения к теме и поставленным вопросам, поэтому на тему способов изменения битов я здесь больше писать не буду.

#3 Re: Програмування Arduino » построение программы в Arduino » 2017-08-04 16:27:22

Green пише:

Не, не, не. CVAVR - это отдельный компилятор, со своими расширениями. Его фишка в наличии билдера, с помощью которого легко настроить периферию. Ну и достаточно много библиотек (без исходников!) и примеров. По простоте освоения был на 1-м месте (до Ардуино)) у начинающих.

Билдер - это конечно удобная штука. Но вряд ли CVAVR используют только из-за него и я не согласен, что он для начинающих. В нем работают люди, которые пишут программы для авионики (это электроника для авиации, если кто не знал). Код сформированный в этом билдере можно без коррекций скопировать в тот же GCC или другую среду. И примеров в CVAVR полно.
Еще есть Algorithm Builder. Там настройщик периферии еще удобнее. Но это ассемблер. И для начинающих тоже очень неплохой старт. Хотя профессионалы на нем пишут серьезные программы. Когда нужно писать на ассемблере, лучше среды я не видел. К сожалению, он поддерживает только AVR контроллеры. Распространяется бесплатно.

#4 Re: Програмування Arduino » построение программы в Arduino » 2017-08-04 16:15:39

Вячеслав Азаров пише:

Это все тот же С, во всем своем многообразии. Ардуино использует компилятор GNU GCC. Возможно, что ваша CVAVR тоже. Заголовочные файлы в GCC для AVR называются так же как официальные. Для atmega328 можно включить <avr/iom328.h> или <avr/io.h> с предварительным определением #define __AVR_ATmega328__ . Arduino IDE это делает автоматически, в настройках плат.

А если, например ATMega644, или еще какой нибудь ( в библиотеке Arduino даже Xmega есть)? Как его подключить? И как потом сказать программатору? Кроме того, загрузчик, который используется в среде Arduino, он же, наверное, для разных кристаллов по разному загружаться должен? Можно, конечно и без загрузчика, НЕХ код через SPI. Наверное ж можно. Но где написано, как это делать?

#5 Re: Програмування Arduino » построение программы в Arduino » 2017-08-04 16:01:51

NoName пише:

ADCSRA=(0<<ADSC) | (0<<ADIE); // Выключение АЦП

как то совсем не просто )  , кто это такие примеры делает? кто так людей ненавидит? )

Во-первых. Это я не для людей писал, а для себя. Мне так понятно, поэтому я так и написал. И скобки там нужны. Было это лет 5 назад. После этого из программ я почти ничего не писал. Не программист я. Теперь снова потребовалось.
Во-вторых. Зубоскалить легче всего. Если Вы считаете себя эрудитом в этих вопросах, покажите, как было бы правильнее по-Вашему, и приведите аргументы в пользу своего мнения.
Иначе непонятно, зачем вы вообще это написали?

#6 Програмування Arduino » построение программы в Arduino » 2017-08-04 12:45:41

krian
відповідей: 29

Здравствуйте уважаемые форумчане!
Я не профессиональный программист, поэтому буду задавать глупые вопросы. Прежде, чем их задавать, я просмотрел массу букварей и статей, но все равно остались неясности. Раньше для программирования AVR я использовал CVAVR. Про язык Arduino пишут , что это по сути тот же Си++ и там можно использовать практически все функции Си. Но оно так прямо не получается.
Моя программа в CVAVR, которую я беру за прототип, построена так.
1. Вначале подключаются библиотеки и описываются глобальные переменные.
2. Затем идет описание прерываний и процедур, которые по каждому прерыванию должны выполняться.
3. затем идет основной цикл main, где вначале производится настройка всех необходимых для работы портов, регистров, битов.
4. вся остальная программа крутится в цикле while.
Т.е. все в основном работает в прерываниях. АЦП, таймеры и синхронизация внешним сигналом. Результаты обрабатываются в основном цикле, там же производится управление исполнительными устройствами по результатам и вывод на индикацию.
Вопросы такие.
1. Что из вышеописанного я должен поместить в setup, а что в loop?
2. Могу ли я настраивать АЦП, регистры и таймеры по-своему, а не так, как это предусмотрено стандартным для arduino способом? Например, чтение напряжения с порта, который объявлен аналоговым входом мне не надо. Это долго. Мне надо сканировать по кругу несколько портов и по прерываниям присваивать значения соответствующим переменным.
Например так:
#define FIRST_ADC_INPUT 1
#define LAST_ADC_INPUT 3
unsigned int adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
// Voltage Reference: AVCC pin
#define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR))
       
interrupt [ADC_INT] void ADC_complete (void)
    {
        static unsigned char input_index=0;
    // Read the AD conversion result
    adc_data[input_index]=ADCW;
   
    // Select next ADC input
    if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
       {
        input_index=0;
        ADCSRA=(0<<ADSC) | (0<<ADIE); // Выключение АЦП
       }
       
    ADMUX=(FIRST_ADC_INPUT | ADC_VREF_TYPE)+input_index;
    // Delay needed for the stabilization of the ADC input voltage
    delay_us(10);
    }
После сканирования портов АЦП выключается. А включается АЦП в другом прерывании, от таймера.
В arduino такая программа будет работать или нет?
3. Как я понял в языке Arduino (в библиотеках) описаны не только те контроллеры, которые устанавливаются на платах конструктора, а вообще все контроллеры AVR, выпускаемые Atmel. Как их подключать? #include <mega128.h>? Как они будут прошиваться?

Підвал форуму