Перейти к содержанию
    

Есть: ATmega16 Нужны: help и схема

Значится по порядку.

Буквально пару дней назад начал свое знакомство с программированием микроконтроллеров.

Много чего прочитал и попробовал (например, [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, но там никого нету...

 

Остается одна надежда на вас... Нервы уже сдают, от того, что ничего не могу понять...

Изменено пользователем NightCat

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что-то вы так много написали.. С трудом можно все прочитать..

Давайте по-порядку.

 

Буквально пару дней назад начал свое знакомство с программированием микроконтроллеров.

Много чего прочитал и попробовал (например, [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. Вопросы по конкретному компилятору (прагмы, объявления прерываний и т.п.) устраняем с помощью справки на конкретно используемый компилятор.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Превым делом советую вам начать знакомство не с 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).

Но естественно утверждать, что много знаю, не буду... Так как это не правда...

Вопросы по конкретному компилятору (прагмы, объявления прерываний и т.п.) устраняем с помощью справки на конкретно используемый компилятор.

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

 

Вам спасибо, а от остальных жду, кто что хочет добавить? :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

зачем мне полностью досканально изучать всю структуру МК. Я ж не в производство лезу, а так для себя...

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

 

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

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

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

 

PS: схему можете взять в соседней ветке http://electronix.ru/forum/index.php?showtopic=12809

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хех, обнаружил интересную вещь (то о чем сам писал...):

В 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 и она не воспримет нажатие... Значит надо использовать прерывания. А это я пока не умею :)

Можно вообще прерывания на нажатия кнопок-то ставить?

(Пока что пошел копать дальше... Уже руки от лопаты в мазолях.)

Изменено пользователем NightCat

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

PS: схему можете взять в соседней ветке http://electronix.ru/forum/index.php?showtopic=12809

Видел я ее, проблемы две:

Первая - схема так и осталась непонятной...

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

Вторая - меня смущает что-то, похожее на катушку в схеме обозначено буквой "L". Это катушка?

Где ее взять? Может ее вообще не надо?

 

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

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

 

Спасибо! :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вторая - меня смущает что-то, похожее на катушку в схеме обозначено буквой "L". Это катушка?

Где ее взять? Может ее вообще не надо?

 

Вторая схема там впринципе нормальная, L - можно не ставить.

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

 

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

Кренку поставить:

КРЕН5А, 78C05, 78F05 etc.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

To defunct

Опять спасибо! :)

Значит по этой

http://mypiter.user.kz/tmp4/stk.gif

делаю "программатор"

А по этой

http://mypiter.user.kz/tmp4/olad1.gif

МК-шную часть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Значит по этой

http://mypiter.user.kz/tmp4/stk.gif

делаю "программатор"

программатор может быть гораздо проще:

вот по это схеме:

http://www.ic-prog.com/funcard.jpg

плюс Vcc вам не нужен, итого всего 5 проводов (весь программатор).

 

А по этой

http://mypiter.user.kz/tmp4/olad1.gif

МК-шную часть.

Да МКшную часть по этой, без L ;>

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

прерывание не вызывается, потому что самодеятельностью занимаетесь ;) CVAVR умеет генерировать каркас программы самостоятельно, с настройкой всей выбранной периферии, прерываний и прочего (см. CodeWizard).

Описание всех библиотек и функций - см. встроенный хелп.

Исходники всех библиотек и функций - см. c:\CVAVR\LIB.

 

в целом, связки CV+Studio вполне достаточно для полноценной работы со всеми кристаллами AVR, исключая совсем уж простые, под которые годится только ассемблер.

CV - транслятор С, программатор, терминал.

AVR Studio - отладчик, симулятор.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ребят, и вам тоже спасибо, но с прерываниями я уже разобрался, а самодеятельностью не занимался, код был собственно взять из примера, т.е. не мое творчество, а стороннее, я по нему пытался научиться.

 

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

 

Использую как рас CVAVR и именно код-визард - хорошая весчь.

А вот для тестов больше поравился протеус (Proteus)...

Вообще весчь классная!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

 

Есть еще более простой способ. Допустим прерывание произошло и сработал переход на соответствующую функцию, тогда ставим курсоср на строку с этой функцией и нажимаем "Run to Cursor (Ctrl+F10)" и обработка прекращается. Либо, в новой студии, можно установить брекпоинт на любую переменную достигшую заданного Вами значения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

О, что вспомнил!!! Важно!!! На схему будет подаваться напряжение 7.2 вольта с аккумулятора Ni-Cd 700mAh.

Это обязательное условие. Т.е. на схему надо поместить еще и какой-то преобразователь 7.2 в 5, так?

Какой и куда?

По моему тут хватит стабилизатора напряжения. (я не эксперт просьба уточнить).

Последняя необходимая мне схема - схема подключения 8 светодиодов к МК. Но тут вроде проблем нет, я все-таки понял, что они подключаются к ногам порта и к + питания через резистор 1кОм. Так?

 

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

Погляди как это сделано в STK500

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...