CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Ответить
Держит паяльник хвостом
Аватара пользователя
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Сообщение SubDia »

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

Код: Выделить всё

#include <tiny2313.h>
unsigned char x;

interrupt [EXT_INT0] void ext_int0(void)
{
x=++x;            
    switch (x)
    {
    case 1:
    PORTB = 0x99;
    break;
    case 2:
    PORTB = 0x81;
    break;
    case 3:
    PORTB = 0xAA;
    x=0;
    }
return;
}

void main(void)
{
x=0;
DDRB=0xFF; // порт В весь на выход
PORTB=0x00;
DDRD=0xFB; // порт PD2 как вход для прерывания
PORTD=0x00;
GIMSK=0b01000000;// Разрешаем прерывания INT0
MCUCR=0b0000011; // прерывание будет по заднему фронту
EIFR=0b01000000; //флажок прерывания сбрасываем - иначе улетим по вектору после ресета
#asm("sei") // Разрешаем глобальные прерывания

{
 //тут можно еще что-нибудь написать)
}
while(1);
} 
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Реклама
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 39
Зарегистрирован: Ср авг 03, 2011 22:26:02
Откуда: Севастополь

Сообщение totty »

Огромное спасибо, утром опробую на деле =)
но правда есть вопросы...
interrupt [EXT_INT0] void ext_int0(void)
{
x=++x;
switch (x)
{
case 1:
PORTB = 0x99;
break;
case 2:
PORTB = 0x81;
break;
case 3:
PORTB = 0xAA;
x=0;
}
return;
}
в case мощно будет циклы вписывать или массивы чисел для разнообразия эффектов? и сколько максимально можно использовать case? просто до этого в книге ещё не дочитал) и не совсем хо пробовать не поняв как работает(

и можно ли тоже самое организовать с помощью меток label? интересно я хоть был на верном пути или нет)
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Сообщение SubDia »

Насчет меток - можно и так, правда, программка видоизменится существенно Но я оператор goto не люблю что-то совершенно.
А в switch можно использовать любые конструкции и ветвления. Группа операторов, следующих за константным выражением case x будет выполняться до оператора break (если оный умышленно или по ошибке не будет установлен, то начнут выполняться следующие варианты case x).
Насчет массивов, правда, не нравится мне мысль. Громоздко.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 39
Зарегистрирован: Ср авг 03, 2011 22:26:02
Откуда: Севастополь

Сообщение totty »

Подскажи те плиз ещё, такая ситуация ( всё тот же переключатель режимов мигания), как заэкранировать кнопки, а то только подношу руку чтобы нажать кнопку МК и диоды ведут себя очень не адекватно, реагируют на мою эдс причём даже на расстоянии 30 см... неприятный был сюрприз... а вот если одной рукой берусь за провод (-) питание, то вроде норм, пробовал ставить конденсатор с кнопки на минус, вроде писали что устраняет дребезг контактов и наводки, но не помогло, удалённость кнопок от МК 3 см.
Реклама
Эиком - электронные компоненты и радиодетали
Держит паяльник хвостом
Аватара пользователя
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Сообщение SubDia »

Надо в первую очередь обратить внимание на источник питания (от которого питается МК), стабилизировать его выход; проследить за тем, чтобы на питающих ножках МК висели фильтрующие конденсаторы по 0,1 uF.
К иным способам не прибегал, в общем-то - всегда хватало вышеуказанных нюансов.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Реклама
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 39
Зарегистрирован: Ср авг 03, 2011 22:26:02
Откуда: Севастополь

Сообщение totty »

ну питание 3 батарейки Дюрасел, 4.5 В, думаю стабилизировать тут нет необходимости, а вот ёмкости повешу...
да, вот не пойму ещё одного, в том листинге что Вы написали, нажимаешь кнопку, пошёл решим горения, жмёшь снова, ничего не меняется, ждёшь 3 сек приблизительно, жмёшь, переключает, с чем связана такая задержка? Частота генератора выставлена 1МГц, мб из-за этого? ставил 4 МГц там ещё хуже... уже не знаю что думать...
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Сообщение SubDia »

Не знаю. Теоретически прерывание должно срабатывать при каждом нажатии. Практически же, в железе, схему я не собирал, сами понимаете. :)
Частота кварца тут ни при чем, она в данном случае ни на что не влияет.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 39
Зарегистрирован: Ср авг 03, 2011 22:26:02
Откуда: Севастополь

Сообщение totty »

Сделал на циклах if-else работает, но тоже самое, между нажатиями должно пройти какое-то время, есть смысл другой МК попробовать, помощнее? и что посоветуете почитать по программированию на С, желательно с разобранными примерами программ... а то каждый раз спрашивать на форуме, и так уже достал наверное =) Заранее спасибо
Держит паяльник хвостом
Аватара пользователя
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Сообщение SubDia »

Смысла пробовать другой МК (помощнее) нет, программа и так проста до безобразия. =)
Почитать советую книгу Михаила Борисовича Лебедева - "CodeVision AVR для начинающих". Просто, доступно, понятно и (что главное) с разжеванными примерами.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула

Сообщение IfoR »

Эта строчка:
SubDia писал(а):x=++x;
у меня прям вызывает милую улыбку на лице. :)
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Сообщение Apparatchik »

totty писал(а):Подскажи те плиз ещё, такая ситуация ( всё тот же переключатель режимов мигания), как заэкранировать кнопки, а то только подношу руку чтобы нажать кнопку МК и диоды ведут себя очень не адекватно, реагируют на мою эдс причём даже на расстоянии 30 см... неприятный был сюрприз... а вот если одной рукой берусь за провод (-) питание, то вроде норм, пробовал ставить конденсатор с кнопки на минус, вроде писали что устраняет дребезг контактов и наводки, но не помогло, удалённость кнопок от МК 3 см.
Входы мк, на которых висят кнопки, должны быть подтянуты на питание внешними или внутреними резисторами.
А чтоб на нажатие реагировало "моментально" нужно по другому строить программу. Я бы переключал по прерываниям таймера, а кнопки опрашивал в основном цикле. С метками лучше не связыватся!
«И всё-таки она вертится!»
Держит паяльник хвостом
Аватара пользователя
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Сообщение SubDia »

IfoR писал(а):Эта строчка:
SubDia писал(а):x=++x;
у меня прям вызывает милую улыбку на лице. :)
Да хоть кислую мину на заднице. :)
Использован был исходник автора.
Последний раз редактировалось SubDia Чт авг 04, 2011 22:12:15, всего редактировалось 1 раз.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 39
Зарегистрирован: Ср авг 03, 2011 22:26:02
Откуда: Севастополь

Сообщение totty »

Я бы переключал по прерываниям таймера, а кнопки опрашивал в основном цикле. С метками лучше не связыватся!
а каким образом привязаться к таймеру? каков тут принцип заложен будет?

а вот если переключаться по прерыванию от "RESET" моментально ж должно быть? только счётчик нажатий ресет нужно вести, или ошибаюсь?
Держит паяльник хвостом
Аватара пользователя
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Сообщение Apparatchik »

totty писал(а):
Я бы переключал по прерываниям таймера, а кнопки опрашивал в основном цикле. С метками лучше не связыватся!
а каким образом привязаться к таймеру? каков тут принцип заложен будет?

а вот если переключаться по прерыванию от "RESET" моментально ж должно быть? только счётчик нажатий ресет нужно вести, или ошибаюсь?
"Моментально" есчо можна делать повесив кнопку на int0 или int1. А вообще это наверно уже выходит за рамки данной темы, пишите в личку чем смогу помогу.
«И всё-таки она вертится!»
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2029
Зарегистрирован: Сб ноя 15, 2008 10:09:56
Откуда: г. Тула

Сообщение IfoR »

2SubDia, ну вот. Сказал, что вызывает милую улыбку, а меня, вроде бы, послали. :(
Изображение
/dev/urandom - гигабайты информации.

OS: openSUSE 13.2 (x86_64)
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Сообщение SubDia »

IfoR, ну что Вы, ни в коем разе. Просто это прозвучало как..ну как легкая насмешка, что ли - непонятна причина милой улыбки. :)
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 39
Зарегистрирован: Ср авг 03, 2011 22:26:02
Откуда: Севастополь

Сообщение totty »

А в CodeVision есть библиотека для 7 сегментных индикаторов, ну как. например LCD.h ? если да, то где мона скачать? а то среди своих не вижу по названию ничего подходящего.
Держит паяльник хвостом
Аватара пользователя
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Сообщение SubDia »

А зачем? Во-первых, семисегментники бывают с общим катодом, а бывают - с общим анодом, во-вторых, бывают одинарные, бывают сдвоенные, строенные, и так далее.
Да и код писать под семисегментник несложно совершенно, достаточно поглядеть любой пример в сети, через пять минут Вы понимаете общий принцип, а через десять - уже самостоятельно пишете свою программу. :)
ЗЫ. А мы, оказывается, из одного города. =)
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 39
Зарегистрирован: Ср авг 03, 2011 22:26:02
Откуда: Севастополь

Сообщение totty »

ага, с одного)

все что видел в сети написаны на asm, и без комментариев либо просто .hex файлы, в литературе что была не нашёл я ничего по этим индикаторам, а с ЛСД рано ещё работать, не дорос)
если ссылки на ресурсы с описанием принципа вывода на индикацию? (не односегментные конечно) :)
Держит паяльник хвостом
Аватара пользователя
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Сообщение SubDia »

Ой, да достаточно просто ввести в гугле запрос вроде "AVR и семисегментный индикатор", выдаст стопиццот мильёнов ссылок.
Да хотя бы вот: http://avrlab.com/node/130
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Ответить

Вернуться в «AVR»