Как бы это странно не звучало, но я никогда в жизни не использовал фирменную софтину от Atmel для написания прошивок. Изначально пользовался Eclipse, но в связи с тем, что для CodeVision было больше примеров, то до сих пор с ним и работал. Но все же интерес перевесил и я решил узнать, так ли страшен Atmel Studio как его малюют 🙂 Для простоты можно мигнуть светодиодом, заодно и описать впечатления.

studio

Первое что бросается в глаза дизайн унаследованный от Visual Studio, не знаю кому как, а мне он привычен и рвотных позывов не наблюдается. Далее стандартная процедура File-New project. С типом проекта тоже никаких заморочек, микроконтроллер 8 битный, аргументов против GCC тоже никаких не имеется 🙂

projectmain

С железом тоже все понятно, а вот за даташит отдельное спасибо. Кстати, довольно удобно прикинуть, сколько у какого микроконтроллера памяти и оперативы.

chooseyourdestiny

Сгенерился пустой проект, заголовочный файл немного отличается от CodeVision, но в целом это ничуть не смущает.

#include <avr/io.h>
int main(void)
{
while(1)
{
 
}
}

Первое куда я полез — искать где настраивается частота камня, полазил в настройках нигде нет. Очевидно настраивается в коде проекта, в конце концов так и оказалось. Непривычно.

#define F_CPU 8000000
#include <avr/io.h>

Название библиотеки задержек гуглится просто util/delay.h. Очень удобным показалось, то что при наборе кода предлагается автодополнение. После Visual C# этой штуки жутко не хватает в CAVR. В итоге за 5 минут набросал кусочек кода

#define F_CPU 8000000
 
#include <avr/io.h>
#include <util/delay.h>
 
int main(void)
{
DDRB=0xFF;
PORTB=0x00;
 
while(1)
{
PORTB=0x01;
_delay_ms(200);
PORTB=0x00;
_delay_ms(200);
}
}

Протеус подтвердил работоспособность прошивки.
proteus_astudio

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

ЗЫ ради прикола сравнил размер такой же прошивки в CAVR, оказалось что GCC сгенерил Hex вполтора раза меньше O_o.

58 комментариев: Работа с Atmel Studio 6

  • У меня вопрос, возможно глупый. Кто-нибудь знает ресурс или книги, где можно найти описание всех библиотек входящих в Atmel Studio 6 и где они находятся? Чтобы можно было их посмотреть, как они работают. Например, как в CodeVisionAVR. в папке inc или lib.

  • Александр, в этом весь и прикол Кодевижна, что у него есть такие либы, в атмел студии их нет. Вернее не то чтобы совсем нет, но для внешней периферии как датчики, экранчики и пр., такого нет, поэтому либо поиски в интернете чужих исходников/либ, либо все ручками

  • Спасибо за ответ. Грустно за Atmel. 🙁

  • Atmel как бы тут и не причем 🙂 Они занимаются железом. Хотя сделать такие же библиотеки как у CAVR могли бы

  • К Atmel компилятору есть очень много библиотек. Много библиотек я взял от Ардуино и портировал для своих нужд.

  • То что можно портировать под атмел студию, можно портировать и под кодвижн 🙂 Я думаю что все это дело привычки и удобства

  • Вопрос 1: Как программу написанную в CodeVision отладить в AtmelStudio 6. Дело в том,
    что cof файл шестерка открывает как дамп памяти. В 4-ой версии студии без проблем.
    Вопрос 2: flash int a = 3; Данная константа созданная в CodeVision по идее должна попасть
    во флеш память контроллера, но в студии она попадает в SRAM (причем нулевая).
    Store Global Constants in FLASH Memory в CodeVision включен. Тоже и по eeprom. Пробовал
    разные версии CodeVision и студий

  • 1. В AS6 File-Open object File for debug, правда у меня вылетает с лагом.
    2. Протеус тоже показал в сраме, на самом деле интересно, потом покопаюсь…

  • У меня object file открывается также как и cof. ,проверил все файлы. Как я понял, никто не использует связку CodeVision с AS6, во всяком случаи google не помог. Конечно это не смертельно, но с другой стороны не серьезно как то, Atmel вроде солидная фирма. Хотя, возможно они просто забили на кодевижен. Миром правят aduin-ы

  • хз у меня coff нормально открывает, отладка не работает — есть такое, миром уже давно правят стм) у них у всех нормальная отладка из под железа. честно не знаю как я раньше без этого справлялся

  • а возможно ли скинуть ссылку на стоющие ресурсы по stm, с чего начать

  • наверно так :mrgreen: http://avr-start.ru/?cat=78 вообще ресурсов много, информации тоже хватает, что именно посоветовать хз, ибо уровень у всех разный, я со всех по чуть читаю

  • честно не знаю как я раньше без этого справлялся
    А мы вроде знаем ???

  • Есть всякие варианты — послать в терминал отладочные сообщения, отлаживать кусками, мигать светодиодами, но после «железного» отладчика к этому возвращаться не хочется

  • стоит ли с CV переходить на AVR studio новичку

  • Зависит от того, какими библиотеками вы пользуетесь под Cavr, точнее найдете ли вы им замену под студию. Если найдете, то можно юзать AS. Если библиотеками не пользоваться, то разницы никакой.

  • Здравствуйте у меня вопрос про avr studio-6 насчет вкладки IO view
    При выделении в этом окне,предположим PORTB , в низу этой вкладки
    этот порт раскладывается на части PORTB,DDRB и PINB.
    Всё бы хорошо , но при запуске отладке проекта эта нижняя раскладка исчезает и
    приходится опять выделять всё что нужно ,а если там не только порт но и
    таймеры и TWI и CPU и другое. НО стоит остановить отладку и опять ничего нет.
    Как сделать чтоб при раскрытии портов , таймеров и т.д . avr studio-6 всё запоминала?
    Вот к примеру как в avr studio-4,как разложил нужные порты, таймеры так они и открыты всегда, пока сам не закроешь.

  • Про AS ничего не могу сказать. Может так случиться, что по другому никак ибо AS4 используется другую оболочку

  • Хотелось бы книжечку полистать или можно в электронном виде . Только не нарезка с журнала ,никому неизвестного автора. Мощная программа ,а описания ( типа cvavr для начинающих Лебедева ) нет!

  • Насколько я помню в AS очень хороший help, наберите в гугле atmel studio help, первая ссылка с официального сайта, лучше не придумаешь. Книга Лебедева это переведенный CAVR user manual.

  • Самая верхняя строка. Справа жмакаем на help и переходим на интерактивную справку. Там есть ответ практически а любой вопрос.

  • admin, подскажи пожалуйста, такой вот вопрос: есть два одинаковых куска кода для cv и для atmel studio 6.2, но прошивка из cv работает так, как должна, а из atmel studio не работает
    1) код вижн:
    #include
    char n=0;
    interrupt [TIM0_COMPA] void timer0_compa_isr(void)
    { switch (n)
    {
    case 0:PORTB=0;PORTD=0xFF;PORTB=1;PORTD=0x7E;n++;
    break;
    case 1:PORTB=0;PORTD=0xFF;PORTB=0;PORTD=0x7D;n=0;
    break;
    }
    }
    void main(void)
    {
    TCCR0A = (0<<COM0A1)|(0<<COM0A0)|(0<<COM0B1)|(0<<COM0B0)|(1<<WGM01)|(0<<WGM00);
    TCCR0B = (1<<FOC0A)|(0<<FOC0B)|(0<<WGM02)|(1<<CS02)|(0<<CS01)|(1<<CS00);
    OCR0A = 0x82;
    TIMSK = (1<<OCIE0A);
    TIFR = (1<<OCF0A);

    DDRB = 0xFF;
    PORTB = 0x00;

    DDRD = 0xFF;
    PORTD = 0x00;
    #asm("sei")
    }

    Под atmel studio:
    #define F_CPU 8000000UL
    #include
    #include
    char n=0;
    ISR(TIMER0_COMPA_vect)
    {
    switch (n)
    {
    case 0:PORTB=0;PORTD=0xFF;PORTB=1;PORTD=0x7E;n++;
    break;
    case 1:PORTB=0;PORTD=0xFF;PORTB=0;PORTD=0x7D;n=0;
    break;
    }
    }
    int main(void)
    {
    TCCR0A = (0<<COM0A1)|(0<<COM0A0)|(0<<COM0B1)|(0<<COM0B0)|(1<<WGM01)|(0<<WGM00);
    TCCR0B = (1<<FOC0A)|(0<<FOC0B)|(0<<WGM02)|(1<<CS02)|(0<<CS01)|(1<<CS00);
    OCR0A = 0x82;
    TIMSK = (1<<OCIE0A);
    TIFR = (1<<OCF0A);

    DDRB = 0xFF;
    PORTB = 0x00;

    DDRD = 0xFF;
    PORTD = 0x00;
    sei();
    }

    Подскажите пожалуйста в чём проблема.

  • попробуйте в AS6 сделать переменную volatile char n=0;

  • Попробовал. Ничего не поменялось 🙁

  • А какой камень?

  • Алексей, ATtiny2313-20PU

  • Может все таки так:
    ISR(TIMER0_COMP_A_vect)
    {
    // Что-то.
    }

  • Хорошо. Да, для тиньки вектор правильно написан. Вопрос в другом, что именно не работает?

  • Ножки не дёргаются, которые должны дёргаться. На протеусе даже посмотрел, то же самое

  • А как они должны дергаться? Судя по коду на нулевой бит порта В должен давать меандр со скважностью два, а на порту D нулевой и первый разряды по очереди меняться.

  • Именно так. Но и протеус и глаза мои(светодиоды на «железной плате») говорят о том что и на PB.0 и на PD.0 PD.1 сигнал постоянно 0

  • Не, все работает.

  • #include \
    #include \

    volatile char n=0;

    ISR(TIMER0_COMPA_vect)
    {
    switch (n)
    {
    case 0:
    PORTB |= (1 << PORTB0);
    PORTD = 0x01;
    n = 1;
    break;
    case 1:
    PORTB &= ~(1 << PORTB0);
    PORTD = 0x02;
    n = 0;
    break;
    }
    }

    int main(void)
    {
    TCCR0A = (1<<WGM01);
    TCCR0B = (1<<FOC0A)|(1<<CS00);
    OCR0A = 0x82;
    TIFR = (1<<OCF0A);
    TIMSK = (1<<OCIE0A);

    sei();

    DDRB = 0x01;
    DDRD = 0x03;

    while(1)
    {

    }
    }

  • Черт. Режет скобки.

    #include avr/io.h
    #include avr/interrupt.h

  • У вас всё заработало?

  • include’ы у меня такие же

  • Да, только в протеусе. Живой тиньки нет.

  • Кажется я идиот… Все комменты можно удалять. Шил файлом из дебага, т.к. забыл что переключил на релиз… 😳

  • Бывает.

  • Разобрался почему не работает: стоит выкинуть бесконечный цикл из главной функции, как всё перестаёт работать, а в кодвижне работает. Вот такая тонкость

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Свежие записи
Последние комментарии
  • Загрузка...
Счетчик
Яндекс.Метрика