Как бы это странно не звучало, но я никогда в жизни не использовал фирменную софтину от Atmel для написания прошивок. Изначально пользовался Eclipse, но в связи с тем, что для CodeVision было больше примеров, то до сих пор с ним и работал. Но все же интерес перевесил и я решил узнать, так ли страшен Atmel Studio как его малюют 🙂 Для простоты можно мигнуть светодиодом, заодно и описать впечатления.
Первое что бросается в глаза дизайн унаследованный от Visual Studio, не знаю кому как, а мне он привычен и рвотных позывов не наблюдается. Далее стандартная процедура File-New project. С типом проекта тоже никаких заморочек, микроконтроллер 8 битный, аргументов против GCC тоже никаких не имеется 🙂
С железом тоже все понятно, а вот за даташит отдельное спасибо. Кстати, довольно удобно прикинуть, сколько у какого микроконтроллера памяти и оперативы.
Сгенерился пустой проект, заголовочный файл немного отличается от 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); } } |
Протеус подтвердил работоспособность прошивки.
Что же я хотел сказать этой статьей? То, что важно разобраться с основными принципами работы микроконтроллера. Для начинающего радиолюбителя впринципе не важно в чем писать. Если вы будете понимать, что откуда берется, то вам не составит труда, перенести проект в любую другую среду.
ЗЫ ради прикола сравнил размер такой же прошивки в CAVR, оказалось что GCC сгенерил Hex вполтора раза меньше O_o.
У меня вопрос, возможно глупый. Кто-нибудь знает ресурс или книги, где можно найти описание всех библиотек входящих в 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, с чего начать
наверно так 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’ы у меня такие же
Да, только в протеусе. Живой тиньки нет.
Кажется я идиот… Все комменты можно удалять. Шил файлом из дебага, т.к. забыл что переключил на релиз… 😳
Бывает.
Разобрался почему не работает: стоит выкинуть бесконечный цикл из главной функции, как всё перестаёт работать, а в кодвижне работает. Вот такая тонкость