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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Ну да только это не включить, а именно выключить цифровой вход. Вы ведь используете АНАЛОГОВЫЙ. Для того, чтобы цифровой вход не влиял на показания аналогового и придуманы эти галки.
Потрудились бы взять словарик и перевести- disable это деактивировать.
Аналоговый вход может получать значения от 0 до 255 при 8 битах точности и от 0 до 1024 при 10 битах точности.
А цифровой это 0 и 1 зачем вам это, если вы используете аналоговые сигналы?
Теперь понятно?
Реклама
Aмstroн
Встал на лапы
Сообщения: 107
Зарегистрирован: Сб июл 27, 2013 10:52:37
Откуда: Украина

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

Сообщение Aмstroн »

Всё более чем. Спасибо.
Реклама
Аватара пользователя
unalex
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

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

Сообщение unalex »

0867532 писал(а):как это ужать???


а если так?

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

#define CALLFUNCX(number) x##number()
#define CALLFUNCY(number) y##number()

void update(void)
{
   CALLFUNCX(x);
   CALLFUNCY(y);
}


не проверял
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Импульс
Потрогал лапой паяльник
Сообщения: 349
Зарегистрирован: Пн ноя 29, 2010 05:52:05
Откуда: Иркутск

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

Сообщение Импульс »

Здравствуйте!
Подскажите пожалуйста ,как поправить прошивку где кнопка №1.
при нажатии один раз,
светодиод моргал через паузы 500ms(постояно)
при нажатии второй раз
выключался.
Здесь получилось 8* триггеров* раз on два off но два триггера надо задействовать для моргания.
Есть в протеусе проект.
Спойлер#include <tiny2313.h>
#include <delay.h>
void main(void)
{
PORTA=0x07;
DDRA=0x00;
PORTB=0x00;
DDRB=0xFF;
PORTD=0x3F;
DDRD=0x40;

while (1)
{if (PIND.0==0) // ==== №1 кнопка поворотники (если нажата на корпус то вкл...
{
PORTB ^= 1<<7;
delay_ms(500);
PORTB ^= 1<<7;
delay_ms(500);
PORTB ^= 1<<7;
delay_ms(500);
PORTB ^= 1<<7;
delay_ms(500);
PORTB ^= 1<<7;
delay_ms(500);
PORTB ^= 1<<7;
delay_ms(500);
PORTB ^= 1<<7;
delay_ms(500);
PORTB ^= 1<<7;
delay_ms(500);
PORTB ^= 1<<7;
delay_ms(500);
PORTB ^= 1<<7; //как только дошло до конца выключилось

}



{if (PIND.1==0) // ==== №2кнопка ближний свет
{
PORTB ^= 1<<6; // раз нажали вкл раз нажали выкл
delay_ms(100);
}



{if (PINA.1==0) // ==== №3 кнопка дальний свет
{
PORTB ^= 1<<5;
delay_ms(100);
}

{if (PINA.0==0) // ==== №4кнопка
{

PORTB ^= 1<<4;
delay_ms(100);

}


{if (PIND.2==0) // ==== №5кнопка аварийка
{
PORTB ^= 1<<3;
delay_ms(100);

PORTB ^= 1<<3;
delay_ms(300);
PORTB ^= 1<<3;
delay_ms(300);
PORTB ^= 1<<3;
delay_ms(300);
PORTB ^= 1<<3;
delay_ms(300);
PORTB ^= 1<<3;
delay_ms(300);
PORTB ^= 1<<3;
delay_ms(300);
PORTB ^= 1<<3;
delay_ms(300);
PORTB ^= 1<<3;
delay_ms(300);
PORTB ^= 1<<3;
delay_ms(300);


}


{if (PIND.3==0) // ==== №6кнопка
{
PORTB ^= 1<<2;
delay_ms(100);
}



{if (PIND.4==0) // ==== №7кнопка
{
PORTB ^= 1<<1;
delay_ms(100);
}

{if (PIND.5==0) // ==== последняя кнопка
{
PORTB ^= 1<<0;
delay_ms(100);
}



}
}
}
}
}
}
}
}
}
Вложения
для автомобиля.rar
(52.96 КБ) 158 скачиваний
Последний раз редактировалось Импульс Вт авг 13, 2013 09:33:22, всего редактировалось 1 раз.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
unalex
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

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

Сообщение unalex »

Импульс писал(а):Подскажите пожалуйста ,как поправить прошивку где кнопка №1.


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

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

#include <tiny2313.h>
#include <delay.h>

void main(void)
{
   PORTA=0x07;
   DDRA=0x00;
   PORTB=0x00;
   DDRB=0xFF;
   PORTD=0x3F;
   DDRD=0x40;
   
   unsigned char flag = 0;
   
   //для кнопки без фиксации
   // первое короткое нажатие - мигаем
   // второе - не мигаем
   //можно реагировать на отжатие кнопки, но я упростил
   
   
   while (1)
   {
      if(PIND.0 == 0)         //Если нажата кнопка 1
      {
         delay_ms(50);   //Антидребезговая задержка
         if(PIND.0 == 0)      //Если еще нажата
         {
            flag = 1;   //Запомнить состояние, будем мигать
         }
      }
      
      //тут код для других кнопок
      
      if(flag == 1)      //Тут будем мигать
      {
         PORTB ^= 1 << 7;
         delay_ms(500);
         if(PIND.0 == 0)      //Если кнопка нажата второй раз
         {
            flag = 0;   //Сброс, больше не мигаем
         }
      }
   }
}
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Реклама
Импульс
Потрогал лапой паяльник
Сообщения: 349
Зарегистрирован: Пн ноя 29, 2010 05:52:05
Откуда: Иркутск

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

Сообщение Импульс »

Как бы не хотелось всю программу переделывать :cry:
Не могу пока зделать для кнопки, функцию повтора куска программы-зациклить его.
И простой алгоритм преодаления дребезга.
Т.З.
Вообщем в машине будет !!!
Буду управлять поворотниками,дальним ближним светом фар ,аварийкой ,светом в салоне.
Схемотехника пока ждёт,или реле или п/п(полевики или транзисторы),самый мощный потребитель это HEllA фары передние (не ксенон).
Но если в первую очередь вкл например поворотники ,то пока они не отморгают ни чего другого не вкл(тоже головная проблема).
Тоже самое с аварийкой.
Как сделать чтоб при вкл поворотников или аварийки можно всё другое включать свет фар ?
Не отговаривайте пожалуйста меня даже если в машину не поставлю всё равно урок будет отличный !
Спасибо за содействие!
Последний раз редактировалось Импульс Вт авг 13, 2013 09:28:44, всего редактировалось 1 раз.
Реклама
Импульс
Потрогал лапой паяльник
Сообщения: 349
Зарегистрирован: Пн ноя 29, 2010 05:52:05
Откуда: Иркутск

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

Сообщение Импульс »

выругался на перемеенную
unsigned char flag = 0;---------- declare first in block(долно заявится сначала в блоке)
поставил до главной функции
Спойлер#include <tiny2313.h>
#include <delay.h>
unsigned char flag = 0;void main(void)
void main(void)
{
PORTA=0x07;
DDRA=0x00;
PORTB=0x00;
DDRB=0xFF;
PORTD=0x3F;
DDRD=0x40;

не , не хорошая программа получилась, постояно поворотники моргают не реагируя на нажатие кнопок...
Надо переделывать :dont_know:
Последний раз редактировалось Импульс Вт авг 13, 2013 09:37:03, всего редактировалось 2 раза.
Аватара пользователя
0867532
Встал на лапы
Сообщения: 142
Зарегистрирован: Сб май 25, 2013 21:14:11
Откуда: Москва
Контактная информация:

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

Сообщение 0867532 »

а что ты хотел? ты на кнопки ничего не повесил. только ddr задал
нормально опиши чего ты хочешь.
например так: есть 3 кнопки.
кнопка#1: что должно происходить по её нажатию.
кнопка#2: что должно происходить по её нажатию.
и.т.д.
Если возникнут вопросы - посмотрите на мой аватар.
Импульс
Потрогал лапой паяльник
Сообщения: 349
Зарегистрирован: Пн ноя 29, 2010 05:52:05
Откуда: Иркутск

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

Сообщение Импульс »

Да помоему написано уже давно...
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

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

Сообщение urry »

Импульс, выражения внутри программы типа delay_ms(500); - вообще не должно быть.

Заведи таймер на миллисекунду в прерывании, в мейне его обрабатывай и делай анализ клавиатуры.
По изменению режима - выставь счетчик на 500 - и по нему мигай, чем хочется.
Аватара пользователя
unalex
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

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

Сообщение unalex »

urry писал(а):Импульс, выражения внутри программы типа delay_ms(500); - вообще не должно быть.

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



эта программа некритична по времени исполнения и задержкам, так что можно обойтись без прерываний и таймеров
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Аватара пользователя
unalex
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

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

Сообщение unalex »

Импульс писал(а):Да помоему написано уже давно...

не увидел
распиши подробнее
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

unalex писал(а):эта программа некритична по времени исполнения и задержкам, так что можно обойтись без прерываний и таймеров
Дело не в критичности, а в проблеме
Как сделать чтоб при вкл поворотников или аварийки можно всё другое включать свет фар ?
, которую человек не может решить. И понятно почему - он глупо зацикливает программу на длительное время, когда в это время, процессор может заниматься другими более нужными делами.
Как вариант - распараллеливать процессы, а все задержки считать в прерывании таймера, с установкой соответствующих флагов.
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

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

Сообщение urry »

Угу. Я специально не написал код, чтобы человек сам разобрался.
Тема - многозадачные процессы - ему еще понадобится. Пусть помучится пока.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

unalex писал(а):
0867532 писал(а):как это ужать???


а если так?

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

#define CALLFUNCX(number) x##number()
#define CALLFUNCY(number) y##number()

void update(void)
{
   CALLFUNCX(x);
   CALLFUNCY(y);
}


не проверял

А что разве совать в макрос переменную это хороший тон?
Как же будет работать ваш код? Чувствую ничего из этого не получится.
И ваша функция обновления не более чем фикция.
Для использования вашего макроса нужно будет писать CALLFUNCY(2) вместо y2() в чем выгода?
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

vitalik_1984 писал(а):Для использования вашего макроса нужно будет писать CALLFUNCY(2) вместо y2() в чем выгода?
Да, кстати, я тоже не понял зачем тут макрос нужен и каким боком его приставлять. :roll:
Импульс
Потрогал лапой паяльник
Сообщения: 349
Зарегистрирован: Пн ноя 29, 2010 05:52:05
Откуда: Иркутск

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

Сообщение Импульс »

urry писал(а):Угу. Я специально не написал код, чтобы человек сам разобрался.
Тема - многозадачные процессы - ему еще понадобится. Пусть помучится пока.

А как лучше будет тайммер настроить, на прерывание или переполнение .
Думаю что таймер будет крутить бесконечный цикл поворотников и аварийки,тем самым не нагромождая процессор.
Но поворотники и аварийка раздельно должны включатся и не мешать другим кнопкам вкл.(свет фар ,салона,габаритов).
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

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

Сообщение urry »

Прерыванием по переполнению. :)
Очень легко считать требуемое значение таймера
Например, на вход 1 таймера поступает 8 мег, нужно снять с него 1 килогерц (1 мс период)

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

#define F_IN 8000000
#define F_OUT 1000
#define TM1_C 65536 - (F_IN/F_OUT)

interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
TCNT1+=TM1_C;
// выставляем флаг, что прошла миллисекунда
Аватара пользователя
unalex
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

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

Сообщение unalex »

vitalik_1984 писал(а):А что разве совать в макрос переменную это хороший тон?
Как же будет работать ваш код? Чувствую ничего из этого не получится.
И ваша функция обновления не более чем фикция.
Для использования вашего макроса нужно будет писать CALLFUNCY(2) вместо y2() в чем выгода?


1 нормальный тон
2 будет работать, не чувствуйте, а проверяйте
3 аргументируйте, в чем фикция
3 посмотрите код на предыдущей странице, вся эта простыня заменяется двумя строчками, которые я написал
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Аватара пользователя
unalex
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

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

Сообщение unalex »

Импульс писал(а):unsigned char flag = 0;---------- declare first in block(долно заявится сначала в блоке)


перемещать ее нужно в начало блока сразу после main, перед конфигурацией портов
не стоит ее делать глобальной, это не есть гуд
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Ответить

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