Прошивка Arduino UNO с помощью AtmelStudio6

Тема в разделе "Микроконтроллеры AVR", создана пользователем SebLer, 9 дек 2014.

  1. SebLer

    SebLer Нуб

    Всем привет. До сих пор работал в родной IDE от ардуино. Сейчас пытаюсь научиться писать на С в AtmelStudio6. Знаком с ней первый день.
    На сколько я понял, просто так ардуину из AtmelStudio6 не прошить.
    Вот тут
    http://habrahabr.ru/post/140276/#DL
    вроде написано, как это сделать.
    Пытаюсь прошить вот этот простой пример
    http://www.radio-magic.ru/microcontrollers/42-first-project
    в итоге AVRDUDE сообщает, что прошивка успешно осуществлена, но в ардуине никаких изменений не наблюдается.
    Видимо я что-то не так настроил, т.к. во время прошивки не моргают ардуиновские диоды tx и rx. Может я не в ту папку файл avrduder.ini сохраняю?
    Помогите, пожалуйста, разобраться.

    P.S. Так же не понимаю, как изменить код из приведённой выше ссылки так, чтобы моргал диод от 13 пина.
    Согласно этой распиновке
    http://arduino34.ru/index.php?id=1061002
    вроде ничего в коде менять не надо, т.к. 13 пин подходит к PORTB.
     
  2. Unixon

    Unixon Оракул Модератор

    Только он подключен к PB5, а не к PB0.
     
  3. studentIvan

    studentIvan Нерд

    Оффтоп: что делает DDRB |=(1<<0); может кто-нибудь рассказать подробно?
     
  4. Unixon

    Unixon Оракул Модератор

    x<<y сдвигает x на y бит влево (от младших к старшим)
    1<<0 == B00000001 = 0x01
    1<<1 == B00000010 = 0x02
    ...
    1<<7 == B10000000 == 0x80

    x|=y - это то же самое, что x = x|y, вычисляет побитовое "И" от x и y и записывает результат обратно в x.

    DDRB |= (1<<0) переключает PB0 в режим выхода.
     
  5. studentIvan

    studentIvan Нерд

    0x01 == 1 же? зачем надо писать 1<<0 тогда, а не просто 1?
    DDRB это что-то вроде переменной, которая привязана к ножке микроконтроллера, я прав?
     
  6. Unixon

    Unixon Оракул Модератор

    Ну, в каком то смысле... Это адрес регистра, биты которого задают режим работы вход\выход 8 выводам PB0..PB7.
     
  7. SebLer

    SebLer Нуб

    Т.е. код должен выглядеть так?

    Код (Text):
        //Настраиваем пин 0 на выход;
        DDRB |=(1<<4);
        while(1)
        {
            //Устанавливаем логическую единицу;
            PORTB |=(1<<4);
            _delay_ms(1000);
            //Устанавливаем логический ноль;
            PORTB &=~(1<<4);
            _delay_ms(1000);
        }
    А с прошивкой ардуины через AtmelStudio поможете разобраться?
    На самом деле задача стоит более сложная. Нужно написать код реализующий хотя бы простейшую передачу данных по I2C шине. Начал с того, чтобы ардуина выполняла хоть что-то из написанного в AtmelStudio.
    В той статье их хабра написано, что AVRDUDE должен прошивать в ардуину hex-файл созданный AtmelStudio. Такой файл у меня находится в проекте в папке Debug. Если я сохраняю файл настроек avrduder.ini в ту же папку, то ничего не происходит. Может надо Simulator отключить? atmelStudio.jpg
     
  8. SebLer

    SebLer Нуб

    Всё, вроде работает. Только не пойму почему моргает очень быстро. При _delay_ms(5000) где-то пару раз в секунду получается.
    С интеграцией AVRDUDE в AtmelStudio так и не разобрался. Просто беру сгенерированный hex-файл и прошиваю ардуину с помощью XLoader.exe http://russemotto.com/xloader/
     
  9. Megakoteyka

    Megakoteyka Оракул Модератор

    Посмотрите значение константы F_CPU, она задает в программе тактовую частоту.
     
  10. Airbus

    Airbus Радиохулиган Модератор

    Хех!А через что и чем шьём?Если через Студию и Дудку и RX/TX То напрасный труд. Есть 2 варианта или через Студию и "Дудку" через ISP разъёмы в этом случае надо стирать прошиву Ардуино вмесле с "Лодырем" (Bootloader)Только нафиг?Есть Вариант-2 Код пишем в Студии на Си (или Асме) и загрудаем стандартно как и все Скетчи с помощью XLoader http://tinyurl.com/lqbz45h . Частенько сам пишу на Асме компилю в "Студии" и гружу в Ардуино подобным способом.
     
  11. SebLer

    SebLer Нуб

    Спасибо, помогло :) Её у меня вообще не было. Подставил значение F_CPU 16000000UL В сети из примера взял. Т.е. почти наугад выставил. А как узнать какую именно надо выставлять?
    А ещё подскажете как в Си нужно строку на экран выводить? :) Просто, чтобы иметь возможность что-то визуально тестить.
    printf("String") ничего не выводит. И куда вообще строка должна выводиться?
     
    Последнее редактирование: 12 дек 2014
  12. SebLer

    SebLer Нуб

    Постом выше я, вроде бы, об этом и писал.
     
  13. Megakoteyka

    Megakoteyka Оракул Модератор

    Тактовая частота контроллера в герцах.
     
  14. MostApi

    MostApi Нуб

    Знающие люди, чтобы не убить Ardu разъясните некоторые моменты:
    1. Имею Arduino Leonardo R3 (ATMega32U4);
    2. В Atmel Studio 7 создал проект и залил туда код:
    Код (C++):
    #include <avr/io.h>         // Библиотека ввода/вывода
    #define F_CPU 16000000UL    // Частота - 16MHz
    #include <util/delay.h>     // Библиотека задержек

    int main(void) {
      DDRC  |= 1<<7;          // Выставляем линию 7 порта С на выход
      PORTC &= ~1<<7;         // Выставляем лог.0 на линии 7 порта С
      while(1)
      {
        PORTC |= 1<<7;      // Выставляем лог.1 на линии 7 порта С
        _delay_ms(1000);    // Задержка 1 секунда
        PORTC &= ~1<<7;     // Выставляем лог.0 на линии 7 порта С
        _delay_ms(1000);    // Задержка 1 секунда
      }
    }
    3. В Atmel Studio 7 нажал Build:
    Код (C++):
    Build succeeded.
    ========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========
    4. Теперь как? В папке с проектом взять .hex файл и с помощью XLoader http://tinyurl.com/lqbz45h - залить на Ardu? И все?
     
  15. Airbus

    Airbus Радиохулиган Модератор

  16. MostApi

    MostApi Нуб

    В папке Debug файл GccApplication1.hex весит 1кБ - это нормально?
    Как добавить в XLoader мою плату (Arduino Leonardo)? В списке ее нет!
     
  17. Airbus

    Airbus Радиохулиган Модератор

    Выбирайте UNO если не загрузиться то Duemilanove c Мегой 328 там отличие там только в бутлоадере я точно не знаю какой в Леонардо скорей всего Уновский он современнее и компактнее.А чего в студии пишете?IDE не подходит?
     
  18. MostApi

    MostApi Нуб

    мне чистый Си больше нравится, в будущем свои схемы создавать нужно будет без ардуино, поэтому думаю лучше делать все сразу правильно.
     
  19. ostrov

    ostrov Гуру

    Все это на "чистом Си" можно писать и под IDE, он понимает не хуже чем AVRS. Во всяком случае тренироваться проще и прошивается без бубнов.
     
  20. Airbus

    Airbus Радиохулиган Модератор

    Зачем Вам тогда Леонардо?Мега 8 в DIP корпусе можно даже без кварца+много других достойных AVR (Т-13 Т-2313) + нормальный прогер и будет Вам щастье! .Я сам начинал с Тинек13 и Студии правда писал на асме. На "чистом" си пишу в кодвижн. А Виринг прикольная штуковина для ленивых-но и есть много вкусностей даже для искушённых Кодеров.Так что не стал бы утверждать что правильно а что нет.
     
    Последнее редактирование: 21 мар 2017