Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Есть: ATmega16 Нужны: help и схема
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
NightCat
Значится по порядку.
Буквально пару дней назад начал свое знакомство с программированием микроконтроллеров.
Много чего прочитал и попробовал (например, [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, но там никого нету...

Остается одна надежда на вас... Нервы уже сдают, от того, что ничего не могу понять...
defunct
Что-то вы так много написали.. С трудом можно все прочитать..
Давайте по-порядку.

Цитата
Буквально пару дней назад начал свое знакомство с программированием микроконтроллеров.
Много чего прочитал и попробовал (например, [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
Цитата
Превым делом советую вам начать знакомство не с 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.

А вот это не нравится по двум причинам - месяц - это ну ооочень долго, ассемблер изучать не хочу. Т.к. изначально собирался писать на Си.
А с архитектурой кое-как вроде бы разобрался, что там как устроено и т.д.
Хотя конечно не до конца, но ведь это самое до конца очень абстракто, зачем мне полностью досканально изучать всю структуру МК. Я ж не в производство лезу, а так для себя...
Цитата

Ссылка полезная, хотя с Си я уже знаком (конечно не супер-пупер, но).
Я писал на нем плагины под свой MP3плеер (Iriver H300, проект RockBox).
Но естественно утверждать, что много знаю, не буду... Так как это не правда...
Цитата
Вопросы по конкретному компилятору (прагмы, объявления прерываний и т.п.) устраняем с помощью справки на конкретно используемый компилятор.

А вот это очень даже хорошо, что-то я про это не подумал - чайник я...

Вам спасибо, а от остальных жду, кто что хочет добавить? smile.gif
defunct
Цитата(NightCat @ Feb 18 2006, 20:50) *
зачем мне полностью досканально изучать всю структуру МК. Я ж не в производство лезу, а так для себя...

Разобравшись досконально с архитектурой (тем более она не сильно сложная), вам будет потом очень просто писать программы на любом языке, и не задумываться почему что-то не работает так как планировалось.

Цитата
А вот это не нравится по двум причинам - месяц - это ну ооочень долго, ассемблер изучать не хочу.

месяц на изучение заняло у меня, у вас вероятно получится быстрее.
я же написал, что время на изучение зависит только от вас. ;>

PS: схему можете взять в соседней ветке http://electronix.ru/forum/index.php?showtopic=12809
NightCat
Хех, обнаружил интересную вещь (то о чем сам писал...):
В CVAVR есть библиотека delay.h и в ней ф-и:
void delay_us(unsigned int n);
void delay_ms(unsigned int n);
А с помощью rand() из SDTLIB, заставил мигать лампочки на порту случайно smile.gif Хи-хи.
Получилось запустить это на VMLAB.
Так что приоритеты выстраиваются в торону CVAVR + VMLAB.

Кстати, возник вопрос, какой интервал выдает ф-я rand()? Я так понимаю 0-255?

Значится лампочками я помигать уже могу, кнопку тоже присобачить, наверно сумею. Хотя тут возникает вопрос...
Как организовывать лучше считывание нажатой кнопки? По прерыванию или просто в тексте постоянно смотреть? Если в тексте постоянно смотреть, тогда я смогу это сделать, но тогда отпадает вариант с использованием delay, т.к. нажать кнопку можно именно тогда, когда МК в режиме delay и она не воспримет нажатие... Значит надо использовать прерывания. А это я пока не умею smile.gif
Можно вообще прерывания на нажатия кнопок-то ставить?
(Пока что пошел копать дальше... Уже руки от лопаты в мазолях.)
NightCat
Цитата
PS: схему можете взять в соседней ветке http://electronix.ru/forum/index.php?showtopic=12809

Видел я ее, проблемы две:
Первая - схема так и осталась непонятной...
Кто-то говорит так надо, кто-то говорит по другому. А мне нужно так, чтоб на рисунке было все в рабочем состоянии (без текстовых пояснений, ато я в них только запутаюсь и все испорчу...).
Вторая - меня смущает что-то, похожее на катушку в схеме обозначено буквой "L". Это катушка?
Где ее взять? Может ее вообще не надо?

В обсчем очень бы хотелось нормальный законченный рисунок (т.е. если написано L, так какой L, маркировку что-ли), про диод я понимаю, что стандратный мелкосхемный, короче любой...
Ну и я писал на счет понижения напряжения с 7.2 на 5, как это сделать?

Спасибо! smile.gif
defunct
Цитата(NightCat @ Feb 18 2006, 22:20) *
Вторая - меня смущает что-то, похожее на катушку в схеме обозначено буквой "L". Это катушка?
Где ее взять? Может ее вообще не надо?


Вторая схема там впринципе нормальная, L - можно не ставить.
Можно поставить кварц требуемой частоты между XTAL1, XTAL2, ноги кварца через конденсаторы по 22pf посадить на "землю".

Цитата
Ну и я писал на счет понижения напряжения с 7.2 на 5, как это сделать?

Кренку поставить:
КРЕН5А, 78C05, 78F05 etc.
NightCat
To defunct
Опять спасибо! smile.gif
Значит по этой
http://mypiter.user.kz/tmp4/stk.gif
делаю "программатор"
А по этой
http://mypiter.user.kz/tmp4/olad1.gif
МК-шную часть.
defunct
Цитата(NightCat @ Feb 18 2006, 22:57) *
Значит по этой
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
Хи-хи, и снова спасибо! smile.gif
vet
прерывание не вызывается, потому что самодеятельностью занимаетесь wink.gif CVAVR умеет генерировать каркас программы самостоятельно, с настройкой всей выбранной периферии, прерываний и прочего (см. CodeWizard).
Описание всех библиотек и функций - см. встроенный хелп.
Исходники всех библиотек и функций - см. c:\CVAVR\LIB.

в целом, связки CV+Studio вполне достаточно для полноценной работы со всеми кристаллами AVR, исключая совсем уж простые, под которые годится только ассемблер.
CV - транслятор С, программатор, терминал.
AVR Studio - отладчик, симулятор.
GDI
А прерывание таймера в АВР-Студио происходит (если все инициализировано правильно), только ждать этого придется очень долго, т.к. симулятор работает намного(очень намного) медленнее МК. По-этому когда мне нужно вызвать какое-либо прерывание - я вызываю его искусственно - для таймера, например можно записать значение в счетный регистр, близкое к тому для которого происходит прерывание, папример 0хFE, ели ожидаете переполнения 8-разрядного счетчика. Еще можно вызвать прерывание прямой установкой флага прерывания в соотв. регистре.
NightCat
Ребят, и вам тоже спасибо, но с прерываниями я уже разобрался, а самодеятельностью не занимался, код был собственно взять из примера, т.е. не мое творчество, а стороннее, я по нему пытался научиться.

Кстати, проблема там просто в синтаксисе была... Только уже не помню в чем...

Использую как рас CVAVR и именно код-визард - хорошая весчь.
А вот для тестов больше поравился протеус (Proteus)...
Вообще весчь классная!
Balaganov
Цитата(GDI @ Feb 20 2006, 11:43) *
А прерывание таймера в АВР-Студио происходит (если все инициализировано правильно), только ждать этого придется очень долго, т.к. симулятор работает намного(очень намного) медленнее МК. По-этому когда мне нужно вызвать какое-либо прерывание - я вызываю его искусственно - для таймера, например можно записать значение в счетный регистр, близкое к тому для которого происходит прерывание, папример 0хFE, ели ожидаете переполнения 8-разрядного счетчика. Еще можно вызвать прерывание прямой установкой флага прерывания в соотв. регистре.



Есть еще более простой способ. Допустим прерывание произошло и сработал переход на соответствующую функцию, тогда ставим курсоср на строку с этой функцией и нажимаем "Run to Cursor (Ctrl+F10)" и обработка прекращается. Либо, в новой студии, можно установить брекпоинт на любую переменную достигшую заданного Вами значения.
AndreyMS
Цитата(NightCat @ Feb 18 2006, 18:11) *
О, что вспомнил!!! Важно!!! На схему будет подаваться напряжение 7.2 вольта с аккумулятора Ni-Cd 700mAh.
Это обязательное условие. Т.е. на схему надо поместить еще и какой-то преобразователь 7.2 в 5, так?
Какой и куда?

По моему тут хватит стабилизатора напряжения. (я не эксперт просьба уточнить).
Цитата(NightCat @ Feb 18 2006, 18:11) *
Последняя необходимая мне схема - схема подключения 8 светодиодов к МК. Но тут вроде проблем нет, я все-таки понял, что они подключаются к ногам порта и к + питания через резистор 1кОм. Так?

Кнопку как подключить? Прочто через нее (кнопку) соединить одну из ног порта с + питания? Или с минусом?

Погляди как это сделано в STK500
NightCat
Как всегда, спасибо. smile.gif
zeleboba
Цитата(NightCat @ Feb 18 2006, 22:54) *
Значится лампочками я помигать уже могу, кнопку тоже присобачить, наверно сумею. Хотя тут возникает вопрос...
Как организовывать лучше считывание нажатой кнопки? По прерыванию или просто в тексте постоянно смотреть? Если в тексте постоянно смотреть, тогда я смогу это сделать, но тогда отпадает вариант с использованием delay, т.к. нажать кнопку можно именно тогда, когда МК в режиме delay и она не воспримет нажатие... Значит надо использовать прерывания. А это я пока не умею smile.gif
Можно вообще прерывания на нажатия кнопок-то ставить?
(Пока что пошел копать дальше... Уже руки от лопаты в мазолях.)


Обычно линии прерываний - "дефицитный" ресурс, вешать на них кнопки конечно можно, Ваше право...
Можно опрашивать кнопки(линии порта) через некоторые промежутки времени в цикле(тем более в программе почти всегда найдётся время для етого). Не стоит забывать про дребезг контактов(при нажатии/отпускании в реале возникает несколько переключений), для борьбы с ним можно использовать, например, небольшую задержку(порядка ~20-50мс - зависит от кнопки)
Сергей_
Я бы на Вашем месте нашел книжку Голубцова, Кириченковой по микроконтроллерам.Там подробно, на примере AT90S2313 разобраны различные примеры, дана архитектура есть небольшой хелп CVISION, примеры на нем, схемы различных устройств.В комплекте шел CD с даташитами, софтом, прошивками и т.д.
Для начинающего - в самый раз.
Електронный вариант, по моему, был на http://www.natahaus.ru

Вот прямой линк http://www.natahaus.ru/2005/10/28/mikrokon..._slozhnomu.html

Хотя я предпочитаю читать бумажный вариант - чтения с экрана как-то не комфортно wink.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.