|
|
|
|
280306 636 44 30 |
|
Опции темы | Поиск в этой теме |
21.05.2011, 23:10 | 1 |
Завсегдатай Фонарёвки
Регистрация: 16.02.2011 Последняя активность: 22.05.2017 13:07
Сообщений: 731
Сказал(а) спасибо: 4
Поблагодарили: 177 раз(а) в 92 сообщениях
|
Прошивка микроконтроллеров AVR
Прошивка микроконтроллеров семейства AVR в домашних условиях.
Ни одно современное электронное устройство сейчас не обходится без микроконтроллеров. Фонарики не исключение. Достаточно часто в драйверах светодионых фонарей мы можем видеть микроконтроллеры ATtiny13A семейства AVR фирмы Atmel. Например, всем известные драйверы Всё семейство микроконтроллеров AVR рассчитано на программирование прямо в схеме устройства, если конечно разработчик не позаботится об обратном, но об этом чуть позже. Проще всего воспользоваться готовым программатором, коих сейчас для AVR продаётся огромное множество за сущие копейки. Типа такого, например Тем у кого есть подобный программатор дальше можно не читать, ибо наверняка он у вас появился не случайно и как прошивать микроконтроллеры вы уж точно знаете. Если откатиться в историю лет на 15 назад, то мы увидим, что фирма Atmel далеко не первая вышла на рынок однокристальных микроконтроллеров. Но почему же её AVR-ки так полюбились всем? Всё очень просто. Чтобы начать их применять кроме желания не надо было больше ничего. Полная документация, бесплатное программное обеспечение и возможность прошивки вообще без программатора. Что ещё надо "бедному студенту"? Ну вот давайте и представим себя подобными студентами, в руки которых попал фонарь или драйвер фонаря с микроконтроллером Tiny13A на борту. Что нам потребуется: 1. Паяльник. Пожалуй это основное, так как нам надо будет припаять провода к микросхеме, шаг выводов которой равен 1,25 мм. По современным меркам просто огромное расстояние, но без паяльника мощностьюе 5-10 Вт с жалом шириной 1-2 мм новичкам лучше даже не пытаться. 2. Провода и желательно миниатюрные разъёмы, чтобы каждый раз не отпаивать провода для проверки что же у нас получилось. Для тех кто не дружит с паяльником совсем есть вариант приобретения вот такой клипсы для подключения к микросхеме без пайки. Но это не наш путь, ибо это деньги и время. Я не супер спец в пайке, но у меня получается как-то так. На разъём провода к компьютеру, а через жёлтый МГТФ подаём питание. 3. Ещё нам понадобится программное обеспечение. Лучше всего для изучения подойдёт PonyProg 4. Ну и самое главное - надо сделать "хвостик" к компьютеру. Тут есть два варианта. Либо в СОМ-порт вот такой Либо в LPT-порт вот такой вообще без единой радиодетали Если есть возможность, то лучше собрать первый вариант, так как в COM-порте более мощные и надёжные выходные буферы. Но и второй вариант для поиграться пойдёт. Теперь надо подключит "хвостик" к микроконтроллеру согласно следуюзей таблице: Reset - ножка 1 SCK - ножка 7 MOSI - ножка 5 MISO - ножка 6 GND - минус питания драйвера На всякий случай привожу нумерацию выводов микросхемы Когда микроконтроллер подключен к компьютеру, то подаём на драйвер питание от одного Li-Ion и запускаем PonyProg. В программе выбираем тип микроконтроллера ATtiny13 и способ подключения к компьютеру. Примерно как на картинке. Теперь, как говорят, если всё собрано правильно, то схема работает сразу. Выбираем меню Command->Security and Configuration bits и либо получаем вот такое окно, означающее что всё получилось либо сообщение об ошибке, которое может означать две вещи. Или что-то не так спаяли и надо искать ошибку, или нам попался драйвер в микроконтроллере которого отключена возможность программирования в схеме. Мне такие попадались в DX-ских sku.7612. Тут, к сожалению, только замена микроконтроллера на чистый. Если же никаких ошибок не возникло, то теперь можно смело перетащить в окно программы прошивку, стереть микроконтроллер командой Erase и запрограммировать новую прошивку командой Write Program. Отключить драйвер от компьютера и испытать в работе. Вопрос где брать прошивки в этой статье я рассматривать не буду. Краткий ответ на него - брать в интернете готовые или писать самому. Официальный сайт Atmel (даташиты, бесплатный софт): atmel.com Самоучитель по программированию AVR: http://proavr.narod.ru/ Море книг по применению AVR: http://lord-n.narod.ru/wall... |
Поблагодарили: 36 раз(а) |
-Вовчик- (17.11.2022), 027 (07.12.2011), Admin (27.09.2012), Anton (04.01.2012), Baskery (27.07.2014), Dima.shym (22.03.2015), DmNuts (01.12.2011), dr oleg (03.02.2015), fnksb (13.09.2014), Gary (02.02.2012), gorsv (15.06.2011), grek21 (15.01.2013), hohol38 (07.04.2015), Ikepod (16.10.2014), IVAN_44 (22.08.2012), klialex (28.03.2014), ko54 (07.12.2013), lonish (26.02.2015), Lopuh (21.08.2013), Mauser (20.06.2011), nkk (14.12.2015), OldRanger (03.02.2017), Optich (02.03.2019), Reyden (30.01.2015), Rime (07.07.2013), roman78 (12.06.2014), rus75 (10.09.2017), sav (21.09.2014), seryoga (31.03.2015), stradivarius (19.02.2016), sturr (03.11.2011), Variant (21.05.2013), vitali (15.12.2013), Vovan Hz (14.08.2015), yeti (23.01.2012), Славный (23.10.2014)
|
22.05.2011, 09:02 | 2 |
Ветеран Фонарёвки
|
Re: Прошивка микроконтроллеров AVR
Статья хорошая, большое спасибо, но хотелось бы увидеть полносью разжеваный материал начиная от описанного выше и кончая написанием прошивок (пусть даже не с нуля, а используя слитые с тех же контроллеров фонарных драйверов, да и многоуважаемый VladislavS, как я знаю по форуму iXBT практические всегда перепрошивает родные контроллеры, если это позволяет само железо, и как говорится на этом съел собаку)... Думаю многие меня поддержать в этом плане с просьбой более подробного написания материала по программированию, а многоуважаемый VladislavS не откажет в этом камрадам фонаревщикам...
[Исправлено: Leon, 22.05.2011 в 09:06] |
Поблагодарили: 1 раз |
Gotlib (16.06.2021)
|
22.05.2011, 13:35 | 3 |
Завсегдатай Фонарёвки
Регистрация: 16.02.2011 Последняя активность: 22.05.2017 13:07
Сообщений: 731
Сказал(а) спасибо: 4
Поблагодарили: 177 раз(а) в 92 сообщениях
|
Re: Прошивка микроконтроллеров AVR
Не, написать очередную книжку по программированию микроконтроллеров я не потяну, да и полно их уже написано.
Мой опыт работы со студентами говорит, что выпускник технического ВУЗа, владеющий несколькими языками программирования, начинает программировать микроконтроллеры за пару дней при наличии железки на которой можно экспериментировать. На самом деле всё очень просто. Вот такая маленькая программа, зашитая в драйвер фонаря из первого поста, заставит его бодренько так мигать. Код:
#include <ioavr.h> int main( void ) { //Настроим порты ввода/вывода DDRB=(0<<DDB5)|(0<<DDB4)|(0<<DDB3)|(0<<DDB2)|(1<<DDB1)|(0<<DDB0); PORTB=(0<<PORTB5)|(0<<PORTB4)|(0<<PORTB3)|(0<<PORTB1)|(0<<PORTB0); for(;;) { __delay_cycles(1000000); //Задержка PORTB|=(1<<PORTB1); //Включить свет __delay_cycles(1000000); //Задержка PORTB&=~(1<<PORTB1); //Выключить свет } } Код:
#include <ioavr.h> #include <intrinsics.h> volatile __regvar __no_init unsigned char mode @ 15; volatile __regvar __no_init unsigned char power_low_counter @ 14; volatile __regvar __no_init unsigned int adc_c @ 12; __no_init __eeprom unsigned char ee_mode; #ifdef __cplusplus extern "C" { #endif char __low_level_init() { CLKPR|=(1<<CLKPCE); CLKPR=1; //Снизим тактовую частоту до 9.6/2 МГц DDRB=(0<<DDB5)|(0<<DDB4)|(0<<DDB3)|(0<<DDB2)|(1<<DDB1)|(1<<DDB0); PORTB=(0<<PORTB5)|(0<<PORTB4)|(0<<PORTB3)|(0<<PORTB1)|(0<<PORTB0); ACSR=(1<<ACD); //Analog Comparator Disable DIDR0=(1<<ADC0D)|(0<<ADC1D)|(1<<ADC2D)|(1<<ADC3D)|(1<<AIN1D)|(1<<AIN0D); PRR=(1<<PRTIM0)|(0<<PRADC); ADMUX=(1<<REFS0)| 1; // Vref=1.1V , ADC1 ADCSRA=(1<<ADEN)|(0<<ADSC)|(1<<ADATE)|(0<<ADIF)|(1<<ADIE)|(1<<ADPS2)|(0<<ADPS1)|(1<<ADPS0); ADCSRB=0; return 1; } #ifdef __cplusplus } #endif #pragma vector=ADC_vect __interrupt void ADC_Interrupt(void) { switch(mode) { case 0: // Яркость 100% if(ADC<531) power_low_counter++; else power_low_counter=0; if(power_low_counter>250) { ee_mode=0; mode=3; power_low_counter=0; } PORTB|=(1<<PORTB1); PORTB|=(1<<PORTB0); break; case 1: // Яркость 40% if(ADC<531) power_low_counter++; else power_low_counter=0; if(power_low_counter>250) { ee_mode=1; mode=3; power_low_counter=0; } PORTB|=(1<<PORTB0); PORTB&=~(1<<PORTB1); break; case 2: // Яркость 14,2% if(ADC<531) power_low_counter++; else power_low_counter=0; if(power_low_counter>250) { ee_mode=1; mode=3; power_low_counter=0; } PORTB&=~(1<<PORTB1); PORTB|=(1<<PORTB0); __delay_cycles(156); PORTB&=~(1<<PORTB0); break; case 3: // Яркость 3.5% if(ADC<530) power_low_counter++; else power_low_counter=0; if(power_low_counter>250) { ee_mode=3; mode++; } PORTB&=~(1<<PORTB1); PORTB|=(1<<PORTB0); __delay_cycles(35); PORTB&=~(1<<PORTB0); break; default: // Защитное выключение PORTB&=~(1<<PORTB0); PORTB&=~(1<<PORTB1); MCUCR=(1<<SE)|(2<<SM0); //Power Down __sleep(); break; } adc_c++; }; int main( void ) { __delay_cycles(100000); adc_c=0; power_low_counter=0; mode=ee_mode; switch(mode) { case 0: case 1: case 2: ee_mode++; break; default: mode=3; ee_mode=0; break; } ADCSRA|=(1<<ADSC); __enable_interrupt(); while(adc_c<16000); __disable_interrupt(); PORTB&=~(1<<PORTB1); PORTB&=~(1<<PORTB0); ee_mode=mode; __delay_cycles(300000); __enable_interrupt(); for(;;) { MCUCR=(1<<SE)|(1<<SM0); //Sleep __sleep(); } } |
22.05.2011, 20:48 | 4 |
Ветеран Фонарёвки
|
Re: Прошивка микроконтроллеров AVR
|
22.05.2011, 22:07 | 5 |
Завсегдатай Фонарёвки
Регистрация: 16.02.2011 Последняя активность: 22.05.2017 13:07
Сообщений: 731
Сказал(а) спасибо: 4
Поблагодарили: 177 раз(а) в 92 сообщениях
|
Re: Прошивка микроконтроллеров AVR
Стыдно признаться, но не прочитал ни одной книжки по программированию именно микроконтроллеров. Всё как-то ограничивалось официальными спецификациями на микросхемы и средства разработки.
Как и все, изучал в школе Бэйсик, потом в институте 4 разных ассемблера и 4 языка высокого уровня. Основа основ, конечно, С/C++. После этого изучение следующего языка занимает час-другой. Написание прошивки ничем не отличается от написания обычных программ для компьютера, кроме того что скомпилированную программу не на USB-флэшку копируют, а в память микроконтроллера. Упрощённо как-то так: Текст программы -> компилятор -> прошивка -> программатор -> микроконтроллер. Два последних шага я описал в первом посте. Первые два делаются обычно в какой-нибудь интегрированной среде разработки. Бесплатная WinAVR, платный IAR Emedded Workbench или другими. У них очень хорошая документация в комплекте, которой достаточно для изучения. Идея считать готовую прошивку из микроконтроллера для изучения сама по себе несостоятельна. Этим занимаются разве что хакеры со знаниями выше среднего с целью украсть/клонировать. Для обучения надо брать исходные тексты несложных проектов. Как пример - исходный текст прошивки, который я выше выложил. |
22.05.2011, 22:31 | 6 |
Ветеран Фонарёвки
Регистрация: 09.07.2010 Последняя активность: 23.05.2023 09:41 Адрес: Ижевск
Сообщений: 3247
Сказал(а) спасибо: 206
Поблагодарили: 1040 раз(а) в 466 сообщениях
|
Re: Прошивка микроконтроллеров AVR
Полезный мануал Может пользователи наделают под подобные драйверы прошивок и поделятся с народом интересными реализациями.
Кстати, ломать чужие прошивки тут вообще бессмысленно, проще заново написать. С трудом себе представляю что там может быть такого, что захочется доработать забиванием байтов в бинарном виде.. PS: Ещё бы интересно узнать варианты готовых программаторов, которые можно купить в инете, чтобы не паять и задёшево |
22.05.2011, 22:58 | 7 | |
Завсегдатай Фонарёвки
Регистрация: 16.02.2011 Последняя активность: 22.05.2017 13:07
Сообщений: 731
Сказал(а) спасибо: 4
Поблагодарили: 177 раз(а) в 92 сообщениях
|
Re: Прошивка микроконтроллеров AVR
Ну это как раз просто. На ebay в поиске "AVR programmer". Единственное, они будут не с PonyProg работать, а с другими программами работать. Но это непринципиально.
Цитата:
|
|
22.05.2011, 23:02 | 8 |
Начитанный пони
Регистрация: 25.11.2010 Последняя активность: 31.10.2016 03:47 Адрес: Москва
Сообщений: 6822
Записей в дневнике: 18 Сказал(а) спасибо: 1790
Поблагодарили: 1363 раз(а) в 892 сообщениях
|
Re: Прошивка микроконтроллеров AVR
__________________
Всё написанное может быть ошибочно. Who needs calories when you can have lumens? |
Поблагодарили: 1 раз |
nkk (14.12.2015)
|
22.05.2011, 23:05 | 9 |
Глобальный модератор
Регистрация: 31.05.2010 Последняя активность: 02.01.2023 22:23 Адрес: Украина, Киев
Сообщений: 4464
Записей в дневнике: 44 Сказал(а) спасибо: 357
Поблагодарили: 2428 раз(а) в 816 сообщениях
|
Re: Прошивка микроконтроллеров AVR
Спасибо за статью!!! Думаю теперь народу понятней будет что там в контролерах и откуда оно берется, и чего фонари могут глючить
__________________
Обзоры на YouTube - подписывайтесь! Мы люди мирные, но наш бронепоезд стоит на запасном пути. |
22.05.2011, 23:28 | 10 |
Завсегдатай Фонарёвки
Регистрация: 16.02.2011 Последняя активность: 22.05.2017 13:07
Сообщений: 731
Сказал(а) спасибо: 4
Поблагодарили: 177 раз(а) в 92 сообщениях
|
Re: Прошивка микроконтроллеров AVR
|
Поблагодарили: 1 раз |
Deviator2x (24.01.2016)
|
22.05.2011, 23:35 | 12 |
Администратор
Регистрация: 17.05.2010 Адрес: Москва
Сообщений: 18905
Сказал(а) спасибо: 4325
Поблагодарили: 10615 раз(а) в 2535 сообщениях
|
Re: Прошивка микроконтроллеров AVR
Тема сделана Важной и теперь находится в прикрепленных темах вверху раздела!
Отличный FAQ! |
24.05.2011, 00:12 | 13 |
Увлеченный
Регистрация: 29.05.2010 Последняя активность: 04.03.2024 08:32
Сообщений: 145
Сказал(а) спасибо: 7
Поблагодарили: 9 раз(а) в 7 сообщениях
|
Re: Прошивка микроконтроллеров AVR
Ну-ну. Т.е. Mete0 расхакавший Aladdin-овскую защиту, и показавщий, что ее нет как таковой - типичный пример такого хакера со средними знаниями?
|
24.05.2011, 01:12 | 14 |
Ветеран Фонарёвки
Регистрация: 07.04.2011 Последняя активность: 05.07.2019 16:52
Сообщений: 2838
Сказал(а) спасибо: 25
Поблагодарили: 402 раз(а) в 189 сообщениях
|
Re: Прошивка микроконтроллеров AVR
Цитата:
|
24.05.2011, 06:48 | 15 |
Ветеран Фонарёвки
Регистрация: 09.07.2010 Последняя активность: 23.05.2023 09:41 Адрес: Ижевск
Сообщений: 3247
Сказал(а) спасибо: 206
Поблагодарили: 1040 раз(а) в 466 сообщениях
|
Re: Прошивка микроконтроллеров AVR
Детали надо ещё найти и правильно припаять Кроме того, отсутствие в компе RS232/LPT уже обычное дело..
|
24.05.2011, 08:19 | 16 | |
Завсегдатай Фонарёвки
Регистрация: 16.02.2011 Последняя активность: 22.05.2017 13:07
Сообщений: 731
Сказал(а) спасибо: 4
Поблагодарили: 177 раз(а) в 92 сообщениях
|
Re: Прошивка микроконтроллеров AVR
Цитата:
COM-порты действительно стремительно исчезают из ноутбуков, но в стационарных компьютерах пока не замечено этой тенденции. Я уже почти 15 лет профессионально занимаюсь различного рода микропроцессорами/микроконтроллерами/ПЛИС и программаторов/отладчиков разных за это время заимел полный ящик стола. Но, как это ни странно, для AVR всё это время основной лошадкой остаётся COM-хвостик из первого сообщения. Мы его, правда, на печатной плате спаяли, но всё равно считай на коленке: |
|
24.05.2011, 09:22 | 17 |
Регистрация: 19.05.2010 Последняя активность: 25.05.2019 16:13 Адрес: Москва
Сообщений: 1690
Сказал(а) спасибо: 242
Поблагодарили: 632 раз(а) в 285 сообщениях
|
Re: Прошивка микроконтроллеров AVR
Еще для новичков:
http://proavr.narod.ru/ Очень удобная штука для прошивки и отладки - JTAG ICE. Дороговато для любительского бюджета, но 100% клоны от Olimex продаются за $30-$40. Прелесть в том, что программу можно отлаживать из среды разработки прямо внутри чипа: ставить точки останова, смотреть регистры, ставить Watch на изменения переменных и т.п. Ускоряет время отладки по сравнению со "слепой" раз в 5. VladislavS: лучше в нулевую ячейку EEPROM ничего не писать - иногда при инициализации AVR они слетают, нахлебались в свое время с этим на объекте. Хотя бы начинать с 1. Если сохранять выбранный режим в одну и ту же ячейку, лет через 5-10 работы фонарь может перестать запоминать режимы из-за износа ячейки EEPROM. Есть механизм "размазывания" данных по нескольким ячейкам. |
24.05.2011, 10:19 | 18 | |
Завсегдатай Фонарёвки
Регистрация: 16.02.2011 Последняя активность: 22.05.2017 13:07
Сообщений: 731
Сказал(а) спасибо: 4
Поблагодарили: 177 раз(а) в 92 сообщениях
|
Re: Прошивка микроконтроллеров AVR
Хороший инструмент всегда хорошо. Это даже не обсуждается. Но AVR настолько легко программируются и так предсказуемы, что внутрисхемная отладка на них больше техническое извращение напоминает. C-компиляторы для AVR такой классный код генерят, что там отлаживать то ничего и не остаётся. Особенно в тиньках c их 1К флэша.
Лет 10 назад так и было. Компиляторы даже по умолчанию размещали переменные с первой ячейки. Сейчас эта детская болезнь в прошлом. Можно смело использовать нулевую ячейку. Цитата:
Чтобы за 10 лет выработать ресурс EEPROM надо фонарь включать 100000/10/365/2 = 14 раз в ночь каждую ночь в течении 10 лет. Слабо представляю себе такое использование фонаря. Да и сломается по другой причине или морально устареет он быстрей за это время. Ну и 100 тысяч это сильно заниженная цифра. Да, вполне можно его применить для успокоения души. Оставим этот вопрос на откуп перфекционистам. |
|
24.05.2011, 10:42 | 19 | ||
Регистрация: 19.05.2010 Последняя активность: 25.05.2019 16:13 Адрес: Москва
Сообщений: 1690
Сказал(а) спасибо: 242
Поблагодарили: 632 раз(а) в 285 сообщениях
|
Re: Прошивка микроконтроллеров AVR
Компиляторы, кстати, бывает, так "наоптимизируют", что потом часть программы не работает
Цитата:
Цитата:
Была такая проблема у магнитол JVC в свое время - программисты не стали "размазывать" данные и сохраняли значение громкости при каждом повороте энкодера. За 2 года ячейка деградировала, и магнитола включалась на произвольной громкости. Отзывали серию потом. Кстати, очень популярны год назад были фонари Nitecore SmartPD. Для них тоже есть открытые прошивки: https://code.google.com/p/a... http://www.candlepowerforum... |
||
24.05.2011, 22:35 | 20 |
Завсегдатай Фонарёвки
Регистрация: 28.05.2010 Последняя активность: 22.12.2013 16:40 Адрес: msk
Сообщений: 843
Сказал(а) спасибо: 0
Поблагодарили: 80 раз(а) в 53 сообщениях
|
Re: Прошивка микроконтроллеров AVR
Можно добавить, что 8-ногие тиньки практически полностью взаимозаменяемы в пределах семейства, в сторону увеличения номера. Если есть исходники на 13, то на 25, 45, 85 все легко компилируется, особых знаний в С не требуется. И наоборот- написанное и отлаженное на макете в 85, если поместится в 13 или 25, будет работать.
Начинающим- приведенные в топике открытые прошивки написаны в WinAVR |