Встроенный программатор?
- Войдите на сайт для отправки комментариев
Доброго вроемени суток. Не знаю, в какую рубрику поместить свой вопрос, но, по всей видимости, в эту.
Так вот, хочу поиграться с Ассемблером и "чистым" Си кодом, для этих целей скачал Atmel Studio 7, и в перспективе скачаю winAVR. Но из микроконтроллеров на дайнный момент у меня только платки ардуино, и даже нет программатора. Но, насколько я знаю, в ардуино (скажем, Mega, хотя и в других вроде тоже) присутствует ATMega 8, которая "пропускает через себя" данные с USART1 и вроде как даже занимается программированием основного контроллера.
Так вот: могу ли я, находясь в одной из вышеперечисленных программ, прошить контроллер Ардуины без особых заморочек по поводу программатора, или нужно скачивать отдельные программы, создавать бинарные файлы и прошивать через них? Либо пользоваться теми же программаторами? Заранее спасибо.
P.s. в окне "программирование" в студии не отображается ни один из способов программирования, только "симуляция", в то время как в окне "Arduino IDE" этих программаторов/способов программирования - целая куча.
Так вот, хочу поиграться с Ассемблером и "чистым" Си кодом...
А что вам мешает делать это из Arduino IDE.
Если вы не будете использовать стандартных библиотек, то в компилятор попадет ваш чистый код на С. Компилятор стандартный AVR GCC. И Асемблер там тоже есть. В Arduino IDE нет своего языка програмирования. - Это всего-навсего надстройка над обычным компилятором упрощает инициализацию проэкта и упрощает работу с портами и регистрами. Тут можно и напрямую работать железом. Например так можно написать для инициации аналоговых портов:
Или сделать обработку прерывания
void setup() { //Енкодер включити переривання PCICR = 1 << PCIE1; //разрешить пренрывание PCMSK1 = B00111000 ; //(1<<PCINT12)|(1<<PCINT11); //выбрать входы } ISR (PCINT1_vect) { //static boolean n=0; if (n=!n){return;} // снять ремарку для энкодеров с двойным щелчком TimeClickB = millis(); static byte old_n = PINC & B00011000; // маска B00011000 что б читать только нужные 2 бита byte new_n = PINC & B00011000; if (old_n == 8 && new_n == 24 || old_n == 16 && new_n == 0) { if ((PINC&(1<<5))==0){NumberMenu = constrain(NumberMenu-1,0,4) ;} else {--EncoderGo /*-= 1*/;} } if (old_n == 16 && new_n == 24 || old_n == 8 && new_n == 0) { if ((PINC&(1<<5))==0){NumberMenu = constrain(NumberMenu+1,0,4) ;} else {++EncoderGo /*+= 1*/;} } old_n = new_n; }Тут 100% сомместимость.
Также открою вам секрет. Если из временной папки выдрать HEX фал, то его можно смело прошивать в голую ардуинку.
или так:
asm("cli"); // Проба ассемблерной вставки
В студии есть возможность вызова внешней тулзы для прошивки. Прикручиваете avrdude и можно пользоваться любым программатором, который поддерживает дудка.