Использование платы Arduino для программирования AVR

Я думаю, что плата Arduino великолепна. Хотя библиотека и IDE меня вообще не интересуют... Есть ли способ использовать AVR 328p, как обычно, на плате Arduino?

Мне нравится, что arduino можно программировать через последовательный порт, получать питание через последовательный порт, и я часто использую последовательный порт для отладки. Создание моей собственной платы (с программатором ICSP) не сможет этого сделать (без загрузчика).


Вопрос

Должен ли я использовать все возможности Arduino?

  • Могу ли я использовать собственный компилятор для платы Arduino? (GNU-GCC/AVR)
  • Могу ли я использовать свою собственную среду разработки для платы Arduino? (Затмение / Atmel Studio)
  • Могу ли я тогда программировать через COM порт? (Интересно ли загрузчику, какой компилятор я использовал? Есть ли у студии Eclipse/AVR возможность программировать через последовательный порт?)
  • Другие вещи, которые я должен принять во внимание. (Раздражающие вещи, такие как отсутствие окна COM-порта в студии AVR, хотя это легко исправить.)

Правка: мы программировали AVR 328P (GNU-GCC / Eclipse / ICSP) в школе, поэтому я знаю, что требуется некоторая работа, чтобы настроить компилятор, работающий с Eclipse. Вам не нужно полностью описывать процессы :) Просто чтобы кто-то не тратил часы на ответ, который легко найти в Интернете. (При поиске этой темы я мог найти только людей, которые делали наоборот, заставляя чип 328p работать с Arduino)

, 👍3

Обсуждение

Надеюсь это поможет. Если мой ответ недостаточен, вы можете предложить мне улучшения для комментариев., @Avelino

К вашему сведению, Arduino IDE работает поверх avr-gcc, GNU binutils и avrdude. Основная библиотека Arduino построена поверх avr-libc. При желании вы можете использовать библиотеку без IDE и наоборот., @Edgar Bonet

На самом деле я этого не знал, звучит интересно. Я просто не хочу слишком много накладных расходов. Я думаю, что с загрузчиком все в порядке, поскольку он позволяет последовательно загружать код, что отлично подходит для моего пользовательского опыта. Но помимо этого я стараюсь сделать как можно более «профессионально» то, как работают люди в реальных компаниях. (Пожалуйста, не воспринимайте это как «оскорбление»). Я считаю, что Eclipse проще в использовании, но беспокоился, что он может не работать с Arduino (загрузка через последовательный порт). И лично мне не нравится использовать библиотеки (хотя для некоторых вещей я, вероятно, буду), но в основном от самого производителя чипа., @Paul


1 ответ


Лучший ответ:

2
  1. Должен ли я использовать все возможности Arduino?

А = Нет!

  1. Могу ли я использовать собственный компилятор для платы Arduino? (GNU-GCC/AVR)
  2. Могу ли я использовать свою собственную среду разработки для платы Arduino? (Затмение / Atmel Studio)
  3. Могу ли я тогда программировать через COM порт? (Загрузчику важно, какой

Конечно! Я использую Eclipse IDE и программирую платы с загрузчиком Arduino непосредственно в C/C++, используя avr-gcc и avrdude.

Настройка Eclipse

Для начала загрузим подключаемый модуль для интеграции AVR GCC и Avrdude + Eclipse IDE

Чтобы установить подключаемый модуль, перейдите в меню "Справка> Установите новое программное обеспечение":

Мы установим новое место для загрузки подключаемого модуля. Нажмите кнопку "Добавить...". и введите: AVR - Eclipse и URL: http://avr-eclipse.sourceforge.net/updatesite

Теперь выберите плагин, который появился в списке, и нажмите "Далее":

Далее, далее, "Я принимаю условия...", перезапустить...

Теперь устанавливаем плагин, будем его настраивать. Укажите на меню "Окно> Предпочтения. Нажмите «AVRDUDE». Следующий экран:

На следующем экране "AVR DUDE" давайте установим наш рекордер. Нажмите "Добавить" в "Конфигурация программатора". Найдите "Arduino".

Или, если хотите, вы можете программировать, используя библиотеки avr, в собственной среде разработки Arduino IDE. Попробуйте загрузить следующий код в плату Arduino! В то время как мигание требует почти 1056 байт памяти с использованием Arduino Uno, следующий код использует только 164 байта и делает то же самое :)

#define F_CPU 16000000UL    
#include <avr/io.h>         
#include <util/delay.h>     

#define set_bit(Y,bit_x) (Y|=(1<<bit_x))    
#define clr_bit(Y,bit_x) (Y&=~(1<<bit_x))   
#define tst_bit(Y,bit_x) (Y&(1<<bit_x))     
#define cpl_bit(Y,bit_x) (Y^=(1<<bit_x))    

#define LED PB5         

int main( ){
    DDRB = 0xFF;        

    while(1){               
        cpl_bit(PORTB,LED); 
        _delay_ms(200);     
    }
}

Если вы используете Linux, вы можете использовать sudo cat/dev/ttyACM0, чтобы определить, что лежит в последовательном и echo "string" >> /dev/ttyACM0 для отправки данных.

,

Именно так (мне кажется) мы делали это в школе. Хотя позволит ли это мне программировать Arduino через последовательное соединение? Без программатора ICSP/USBasp?, @Paul

Да, вы можете запрограммировать его без программатора ICSP/USBasp. Просто измените тип рекордера на «Arduino» в Eclipse IDE. У меня не было другого примера фото, на моем фото «USBasp», а просто поиск Arduino и выход из программирования. Вы также можете использовать Arduino IDE, набирая код непосредственно на C++. Проверьте мой пример :) Какая у вас плата Arduino? Ну и у нее должна быть схема преобразования Serial/TTL. Иногда это ATmega8, иногда один чип FTDI. (Извините мой английский), @Avelino

Я еще не купил плату ардуино. Хотя я думаю о том, чтобы использовать макетную плату Arduino Nano (USB), одну из тех, которые вы можете установить на макетную плату. Кажется, у них также есть заголовок ICSP, но я думаю, что неудобно иметь 2 USB, идущих к вашему ПК (один для последовательного порта и один для загрузки кода) Но если это так, что я могу загружать код через серийный номер, это/будет ответ? (Это был скорее теоретический вопрос, хотя вы действительно дали подробное объяснение, может сэкономить мне (и другим) время: D), @Paul

Я рекомендую вам купить Arduino Uno. Можно взять ATmega328P и поставить на макетную плату, а можно прописать загрузчик в других микросхемах (загрузчик — это заголовок прошивки, отвечающий за запись кода для серийника). Что касается загрузки, вы будете использовать только один USB. При записи через ICSP используется связь SPI. Но Arduino может быть записан тем же последовательным портом, а последовательный порт предназначен для связи. В своих проектах я использую Eclipse и записываю свои атмеги с помощью платы Arduino. Затем просто удалите их и добавьте проект платы., @Avelino

См. [это](http://arduino.cc/en/Tutorial/ArduinoToBreadboard) и [это](http://arduino.cc/en/main/standalone), @Avelino

Хм, я на самом деле смотрел на это, но оно стоит дороже, а также требует чипа FTDI (как только вы снимаете MCU с платы arduino. Когда у ATmega 328 (в нано-ардуино) есть загрузчик, это хорошо, полностью серийный? ;Д И даже тогда у nano arduino есть заголовок ICSP, который я мог бы использовать? Но в любом случае, этот вопрос кажется решенным! Это возможно, но детали могут различаться для каждого пользователя., @Paul