NightCat 0 18 февраля, 2006 Опубликовано 18 февраля, 2006 (изменено) · Жалоба Значится по порядку. Буквально пару дней назад начал свое знакомство с программированием микроконтроллеров. Много чего прочитал и попробовал (например, [banned]). Но осталась куча черных дыр (или белых пятен). Что мне нужно: В общем-то квалифицированный хелп и В ДОСТУПНОЙ ДЛЯ НОВИЧКА ФОРМЕ. Только большая просьба, не пишите как обычно "ну поройся на форуме". Ведь у каждого из вас наверняка есть ссылки на какие-то доки и т.п., которыми вы сами пользуетесь, не поленитесь помочь. Конкретнее: (Только не говорите, что это уже было на форуме, знаю, что было, читал.) Хочу поморгать лампочками для начала. Имеются: ATmega16 в DIP корпусе, кроватка к ней и макетка. Из софта есть: CodeVision AVR 1.24.6 ImageCraft ICCAVR Pro v6.31a AB490 (Algorithm Builder) AVR Studio 4b460 AtmanAvr5.3 Proteus_6.7sp3 vmlab312 WinAVR-20050214 Первое: что лучше взять из софта? IAR не предлагать. ГЛАВНОЕ для программирования на Си!!! Потому что для меня намного понятнее конструкции Си (типа for или while), нежели то же самое на ASM. Далее, где взять возможно используемые функции? Где-то я читал, что в какой-то из приведенных сред разработки есть, к примеру, стандартная функция delay_ms()??? Это правда? Если нет, значит придется разбираться с таймерами, так? К слову, открываю в CVAVR пример LED.prj. Там есть такая ф-я: interrupt [TIM1_OVF] void timer1_overflow(void) { } Я понимаю - эта ф-я должна по идее вызываться по прерыванию переполнения таймера 1, так? Но я не понимаю ее синтаксис. Т.е. стандартно для Си: void timer1_overflow(void) { } Слово interrupt в принципе понятно далее в [] скобках TIM1_OVF это как раз и есть выбор прерывания? Если так, значит имя ф-и timer1_overflow можно писать вообще любое и это не важно? Ладно дальше пример этот в CVAVR компилится нормально. Создаю cof файл и т.д. и пытаюсь открыть его в AVR studio для тестирования. Открывается, и даже компилится и даже дебаг включается и программа запускается и выполняет секцию main, кста, вот вся LED.prj: /* Moving LED example CodeVisionAVR C Compiler © 2000-2002 HP InfoTech S.R.L. www.hpinfotech.ro Chip: AT90S8515 Memory Model: SMALL Data Stack Size: 128 bytes 8 LEDs are connected between the PORTC outputs and +5V using 1K current limiting resistors The LEDs anodes are connected to +5V On the STK500 it's only necessary to connect the PORTC and LEDS headers together with a 10-wire cable */ // I/O register definitions for AT90S8515 #include <90s8515.h> // quartz crystal frquency [Hz] #define xtal 3686400 // moving LED frequency [Hz] #define fmove 2 // the LED on PORTC output 0 will be on unsigned char led_status=0xfe; // TIMER1 overflow interrupt service routine // occurs every 0.5 seconds interrupt [TIM1_OVF] void timer1_overflow(void) { // preset again TIMER1 TCNT1=0x10000-(xtal/1024/fmove); // move the LED led_status<<=1; led_status|=1; if (led_status==0xff) led_status=0xfe; // turn on the LED PORTC=led_status; } void main(void) { // set the I/O ports // all PORTC pins are outputs DDRC=0xff; // turn on the first LED PORTC=led_status; // init TIMER1 // TIMER1 is disconnected from pin OC1 // no PWM TCCR1A=0; // TIMER1 clock is xtal/1024 TCCR1B=5; // preset TIMER1 TCNT1=0x10000-(xtal/1024/fmove); // clear TIMER1 interrupts flags TIFR=0; // enable TIMER1 overflow interrupt TIMSK=0x80; // all other interrupt sources are disabled GIMSK=0; // global enable interrupts #asm sei #endasm // the rest is done by TIMER1 overflow interrupts while (1); } Но, на сколько я понял (ставил брейкпоинты), все работает но секция timer1_overflow не выполняется ни разу!!! Почему? (Проще говоря не вызывается прерывание...) Зачем мне все это надо, да просто. Первое требование, это подобрать для себя какую-то среду разработки чтобы можно было писать на Си и где-то по простому отлаживать!!! WMLab в принципе тоже хорошо, но перебор... По мне так стандартного отображения портов и др. ножек и регистров МК в AVR studio вполне достаточно. Значит комплект CVAVR + AVR studio подходит, но тогда почему не сработало то, что я описал выше? Т.е. одно из требований к среде - 100% работа, т.к. я новичек и чтобы что-то попробовать, я должен быть уверен в том, что если есть какая-то ошибка, то это моя ошибка, а не ошибка программы... Далее, допустим я разобрался со средой программирования. Следующая проблема - электроника. А именно, что такое конденсатор и резистор я понимаю и как их подключить по схеме тоже разберусь, но для этого НУЖНА РАБОЧАЯ СХЕМА!!! Я планирую ATmega16 разместить на устройстве и сделать на нем же разъем для подключения программатора. На первых парах хочу использовать "5 проводков". (Дальше может быть куплю программатор.) Так вот, где взять схему, на которой четко (СО ВСЕМИ НОМИНАЛАМИ И ПРОЧ.) показано, как собрать все начиная от LPT разъема и заканчивая разъемом из 5 проводков - папа. Второе, где взять схему, на которой четко (СО ВСЕМИ НОМИНАЛАМИ И ПРОЧ.) показано, как собрать все начиная от разъема 5 проводков - мама и заканчива собственно ATmega16, т.е. стандартную обвязку (простейшую), с кнопкой Reset и проч. О, что вспомнил!!! Важно!!! На схему будет подаваться напряжение 7.2 вольта с аккумулятора Ni-Cd 700mAh. Это обязательное условие. Т.е. на схему надо поместить еще и какой-то преобразователь 7.2 в 5, так? Какой и куда? Когда будут у меня эти две схемы, пойду докупать нужные детали. Программатор (т.е. программную его часть) для этих 5 проводков хочу использовать с сайта http://avr.nikolaew.org/, это правильно или есть другие решения? Последняя необходимая мне схема - схема подключения 8 светодиодов к МК. Но тут вроде проблем нет, я все-таки понял, что они подключаются к ногам порта и к + питания через резистор 1кОм. Так? Кнопку как подключить? Прочто через нее (кнопку) соединить одну из ног порта с + питания? Или с минусом? Когда все это у меня будет, смогу сделать первые шаги. А именно, написать программу, которая будет переключать лампочки, а по нажатию кнопки менять программу переключения. Подключить "программатор", залить прошивку в МК, отключить "программатор", откинуться на спинку стула и наслаждаться мигалкой! Пока вроде все, хотя конечно много пятен по теории... Я понимаю, что такое регистры, как туда что-то записывать. Но к примеру не понимаю таких вещей, как использовать таймер, чтобы создать вункцию delay() (думаю, понятно зачем, по прерываниям не охота). Или как его же использовать, чтобы запустить ШИМ (нужен будет для изменения скорости двигателей, подключенных через дрйвер к МК). Кстати, читал с gaw.ru аппнот про ШИМ - ничего не понял... Там все так пространно... Не понимаю, как использовать АЦП. Если честно я привык примерно к таким хелпам: function_bla_bla_bla(a,b:int):int; Сравнивает a и b и возвращает максимальное. Вот такие хелпы я понимаю хорошо, когда написано, что нужно ввести, чтобы получить желаемый результат... Эх, и так я много написал, но это все потому, что привык вопросы выяснять в процессе общения, а общаться тут не с кем, единомышленников нет, по кр. мере пока что... Пытался выйти на канал #ru_embedded, но там никого нету... Остается одна надежда на вас... Нервы уже сдают, от того, что ничего не могу понять... Изменено 18 февраля, 2006 пользователем NightCat Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 18 февраля, 2006 Опубликовано 18 февраля, 2006 · Жалоба Что-то вы так много написали.. С трудом можно все прочитать.. Давайте по-порядку. Буквально пару дней назад начал свое знакомство с программированием микроконтроллеров. Много чего прочитал и попробовал (например, [banned]). Но осталась куча черных дыр (или белых пятен). за буквально пару дней "Много чего прочитать" нельзя успеть просто физически... Превым делом советую вам начать знакомство не с C. а с архитектурой MK посредством AVR-Studio. Для этого скачиваем вот этот http://www.atmel.com/dyn/resources/prod_documents/novice.pdf документ, и читаем его полностью (5 страничек). Далее следуя рекомендациям данного документа, качаем даташит с сайта www.atmel.com на интересующий вас MK. Далее примерно месяц (зависит только от вас) играемся с ним на ассемблере а AVR-Studio, изучаем архитектуру МК, на примерах appnotes с сайта www.atmel.com. После того как с архитектурой разберетесь идем сюда: http://www.opennet.ru/docs/RUS/ansi-c/ . После того как с языком все ОК, берем любой компилятор C или среду разработки на C, и для уже изученой вами архитектуры AVR пробуем писать программы на C. Вопросы по конкретному компилятору (прагмы, объявления прерываний и т.п.) устраняем с помощью справки на конкретно используемый компилятор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NightCat 0 18 февраля, 2006 Опубликовано 18 февраля, 2006 · Жалоба Превым делом советую вам начать знакомство не с C. а с архитектурой MK посредством AVR-Studio. Для этого скачиваем вот этот http://www.atmel.com/dyn/resources/prod_documents/novice.pdf документ, и читаем его полностью (5 страничек). Далее следуя рекомендациям данного документа, качаем даташит с сайта www.atmel.com на интересующий вас MK. Гм, первое скачал, чичас читаю. Даташит уже есть на мою ATmega16. Далее примерно месяц (зависит только от вас) играемся с ним на ассемблере а AVR-Studio, изучаем архитектуру МК, на примерах appnotes с сайта www.atmel.com. А вот это не нравится по двум причинам - месяц - это ну ооочень долго, ассемблер изучать не хочу. Т.к. изначально собирался писать на Си. А с архитектурой кое-как вроде бы разобрался, что там как устроено и т.д. Хотя конечно не до конца, но ведь это самое до конца очень абстракто, зачем мне полностью досканально изучать всю структуру МК. Я ж не в производство лезу, а так для себя... http://www.opennet.ru/docs/RUS/ansi-c/ . Ссылка полезная, хотя с Си я уже знаком (конечно не супер-пупер, но). Я писал на нем плагины под свой MP3плеер (Iriver H300, проект RockBox). Но естественно утверждать, что много знаю, не буду... Так как это не правда... Вопросы по конкретному компилятору (прагмы, объявления прерываний и т.п.) устраняем с помощью справки на конкретно используемый компилятор. А вот это очень даже хорошо, что-то я про это не подумал - чайник я... Вам спасибо, а от остальных жду, кто что хочет добавить? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 18 февраля, 2006 Опубликовано 18 февраля, 2006 · Жалоба зачем мне полностью досканально изучать всю структуру МК. Я ж не в производство лезу, а так для себя... Разобравшись досконально с архитектурой (тем более она не сильно сложная), вам будет потом очень просто писать программы на любом языке, и не задумываться почему что-то не работает так как планировалось. А вот это не нравится по двум причинам - месяц - это ну ооочень долго, ассемблер изучать не хочу. месяц на изучение заняло у меня, у вас вероятно получится быстрее. я же написал, что время на изучение зависит только от вас. ;> PS: схему можете взять в соседней ветке http://electronix.ru/forum/index.php?showtopic=12809 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NightCat 0 18 февраля, 2006 Опубликовано 18 февраля, 2006 (изменено) · Жалоба Хех, обнаружил интересную вещь (то о чем сам писал...): В CVAVR есть библиотека delay.h и в ней ф-и: void delay_us(unsigned int n); void delay_ms(unsigned int n); А с помощью rand() из SDTLIB, заставил мигать лампочки на порту случайно :) Хи-хи. Получилось запустить это на VMLAB. Так что приоритеты выстраиваются в торону CVAVR + VMLAB. Кстати, возник вопрос, какой интервал выдает ф-я rand()? Я так понимаю 0-255? Значится лампочками я помигать уже могу, кнопку тоже присобачить, наверно сумею. Хотя тут возникает вопрос... Как организовывать лучше считывание нажатой кнопки? По прерыванию или просто в тексте постоянно смотреть? Если в тексте постоянно смотреть, тогда я смогу это сделать, но тогда отпадает вариант с использованием delay, т.к. нажать кнопку можно именно тогда, когда МК в режиме delay и она не воспримет нажатие... Значит надо использовать прерывания. А это я пока не умею :) Можно вообще прерывания на нажатия кнопок-то ставить? (Пока что пошел копать дальше... Уже руки от лопаты в мазолях.) Изменено 18 февраля, 2006 пользователем NightCat Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NightCat 0 18 февраля, 2006 Опубликовано 18 февраля, 2006 · Жалоба PS: схему можете взять в соседней ветке http://electronix.ru/forum/index.php?showtopic=12809 Видел я ее, проблемы две: Первая - схема так и осталась непонятной... Кто-то говорит так надо, кто-то говорит по другому. А мне нужно так, чтоб на рисунке было все в рабочем состоянии (без текстовых пояснений, ато я в них только запутаюсь и все испорчу...). Вторая - меня смущает что-то, похожее на катушку в схеме обозначено буквой "L". Это катушка? Где ее взять? Может ее вообще не надо? В обсчем очень бы хотелось нормальный законченный рисунок (т.е. если написано L, так какой L, маркировку что-ли), про диод я понимаю, что стандратный мелкосхемный, короче любой... Ну и я писал на счет понижения напряжения с 7.2 на 5, как это сделать? Спасибо! :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 18 февраля, 2006 Опубликовано 18 февраля, 2006 · Жалоба Вторая - меня смущает что-то, похожее на катушку в схеме обозначено буквой "L". Это катушка? Где ее взять? Может ее вообще не надо? Вторая схема там впринципе нормальная, L - можно не ставить. Можно поставить кварц требуемой частоты между XTAL1, XTAL2, ноги кварца через конденсаторы по 22pf посадить на "землю". Ну и я писал на счет понижения напряжения с 7.2 на 5, как это сделать? Кренку поставить: КРЕН5А, 78C05, 78F05 etc. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NightCat 0 18 февраля, 2006 Опубликовано 18 февраля, 2006 · Жалоба To defunct Опять спасибо! :) Значит по этой http://mypiter.user.kz/tmp4/stk.gif делаю "программатор" А по этой http://mypiter.user.kz/tmp4/olad1.gif МК-шную часть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 18 февраля, 2006 Опубликовано 18 февраля, 2006 · Жалоба Значит по этой http://mypiter.user.kz/tmp4/stk.gif делаю "программатор" программатор может быть гораздо проще: вот по это схеме: http://www.ic-prog.com/funcard.jpg плюс Vcc вам не нужен, итого всего 5 проводов (весь программатор). А по этой http://mypiter.user.kz/tmp4/olad1.gif МК-шную часть. Да МКшную часть по этой, без L ;> Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NightCat 0 18 февраля, 2006 Опубликовано 18 февраля, 2006 · Жалоба Хи-хи, и снова спасибо! :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vet 0 20 февраля, 2006 Опубликовано 20 февраля, 2006 · Жалоба прерывание не вызывается, потому что самодеятельностью занимаетесь ;) CVAVR умеет генерировать каркас программы самостоятельно, с настройкой всей выбранной периферии, прерываний и прочего (см. CodeWizard). Описание всех библиотек и функций - см. встроенный хелп. Исходники всех библиотек и функций - см. c:\CVAVR\LIB. в целом, связки CV+Studio вполне достаточно для полноценной работы со всеми кристаллами AVR, исключая совсем уж простые, под которые годится только ассемблер. CV - транслятор С, программатор, терминал. AVR Studio - отладчик, симулятор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GDI 0 20 февраля, 2006 Опубликовано 20 февраля, 2006 · Жалоба А прерывание таймера в АВР-Студио происходит (если все инициализировано правильно), только ждать этого придется очень долго, т.к. симулятор работает намного(очень намного) медленнее МК. По-этому когда мне нужно вызвать какое-либо прерывание - я вызываю его искусственно - для таймера, например можно записать значение в счетный регистр, близкое к тому для которого происходит прерывание, папример 0хFE, ели ожидаете переполнения 8-разрядного счетчика. Еще можно вызвать прерывание прямой установкой флага прерывания в соотв. регистре. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NightCat 0 20 февраля, 2006 Опубликовано 20 февраля, 2006 · Жалоба Ребят, и вам тоже спасибо, но с прерываниями я уже разобрался, а самодеятельностью не занимался, код был собственно взять из примера, т.е. не мое творчество, а стороннее, я по нему пытался научиться. Кстати, проблема там просто в синтаксисе была... Только уже не помню в чем... Использую как рас CVAVR и именно код-визард - хорошая весчь. А вот для тестов больше поравился протеус (Proteus)... Вообще весчь классная! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Balaganov 0 20 февраля, 2006 Опубликовано 20 февраля, 2006 · Жалоба А прерывание таймера в АВР-Студио происходит (если все инициализировано правильно), только ждать этого придется очень долго, т.к. симулятор работает намного(очень намного) медленнее МК. По-этому когда мне нужно вызвать какое-либо прерывание - я вызываю его искусственно - для таймера, например можно записать значение в счетный регистр, близкое к тому для которого происходит прерывание, папример 0хFE, ели ожидаете переполнения 8-разрядного счетчика. Еще можно вызвать прерывание прямой установкой флага прерывания в соотв. регистре. Есть еще более простой способ. Допустим прерывание произошло и сработал переход на соответствующую функцию, тогда ставим курсоср на строку с этой функцией и нажимаем "Run to Cursor (Ctrl+F10)" и обработка прекращается. Либо, в новой студии, можно установить брекпоинт на любую переменную достигшую заданного Вами значения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AndreyMS 0 22 февраля, 2006 Опубликовано 22 февраля, 2006 · Жалоба О, что вспомнил!!! Важно!!! На схему будет подаваться напряжение 7.2 вольта с аккумулятора Ni-Cd 700mAh. Это обязательное условие. Т.е. на схему надо поместить еще и какой-то преобразователь 7.2 в 5, так? Какой и куда? По моему тут хватит стабилизатора напряжения. (я не эксперт просьба уточнить). Последняя необходимая мне схема - схема подключения 8 светодиодов к МК. Но тут вроде проблем нет, я все-таки понял, что они подключаются к ногам порта и к + питания через резистор 1кОм. Так? Кнопку как подключить? Прочто через нее (кнопку) соединить одну из ног порта с + питания? Или с минусом? Погляди как это сделано в STK500 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться