CodeVision AVR в вопросах и ответах
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Ну да только это не включить, а именно выключить цифровой вход. Вы ведь используете АНАЛОГОВЫЙ. Для того, чтобы цифровой вход не влиял на показания аналогового и придуманы эти галки.
Потрудились бы взять словарик и перевести- disable это деактивировать.
Аналоговый вход может получать значения от 0 до 255 при 8 битах точности и от 0 до 1024 при 10 битах точности.
А цифровой это 0 и 1 зачем вам это, если вы используете аналоговые сигналы?
Теперь понятно?
Потрудились бы взять словарик и перевести- disable это деактивировать.
Аналоговый вход может получать значения от 0 до 255 при 8 битах точности и от 0 до 1024 при 10 битах точности.
А цифровой это 0 и 1 зачем вам это, если вы используете аналоговые сигналы?
Теперь понятно?
- Реклама
Re: CodeVision AVR в вопросах и ответах
Всё более чем. Спасибо.
- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: CodeVision AVR в вопросах и ответах
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 <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);
}
}
}
}
}
}
}
}
}
}
Подскажите пожалуйста ,как поправить прошивку где кнопка №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 в вопросах и ответах
Импульс писал(а):Подскажите пожалуйста ,как поправить прошивку где кнопка №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 в вопросах и ответах
Как бы не хотелось всю программу переделывать
Не могу пока зделать для кнопки, функцию повтора куска программы-зациклить его.
И простой алгоритм преодаления дребезга.
Т.З.
Вообщем в машине будет !!!
Буду управлять поворотниками,дальним ближним светом фар ,аварийкой ,светом в салоне.
Схемотехника пока ждёт,или реле или п/п(полевики или транзисторы),самый мощный потребитель это HEllA фары передние (не ксенон).
Но если в первую очередь вкл например поворотники ,то пока они не отморгают ни чего другого не вкл(тоже головная проблема).
Тоже самое с аварийкой.
Как сделать чтоб при вкл поворотников или аварийки можно всё другое включать свет фар ?
Не отговаривайте пожалуйста меня даже если в машину не поставлю всё равно урок будет отличный !
Спасибо за содействие!
Не могу пока зделать для кнопки, функцию повтора куска программы-зациклить его.
И простой алгоритм преодаления дребезга.
Т.З.
Вообщем в машине будет !!!
Буду управлять поворотниками,дальним ближним светом фар ,аварийкой ,светом в салоне.
Схемотехника пока ждёт,или реле или п/п(полевики или транзисторы),самый мощный потребитель это 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 <delay.h>
unsigned char flag = 0;void main(void)
void main(void)
{
PORTA=0x07;
DDRA=0x00;
PORTB=0x00;
DDRB=0xFF;
PORTD=0x3F;
DDRD=0x40;
не , не хорошая программа получилась, постояно поворотники моргают не реагируя на нажатие кнопок...
Надо переделывать
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;
не , не хорошая программа получилась, постояно поворотники моргают не реагируя на нажатие кнопок...
Надо переделывать

Последний раз редактировалось Импульс Вт авг 13, 2013 09:37:03, всего редактировалось 2 раза.
- 0867532
- Встал на лапы
- Сообщения: 142
- Зарегистрирован: Сб май 25, 2013 21:14:11
- Откуда: Москва
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
а что ты хотел? ты на кнопки ничего не повесил. только ddr задал
нормально опиши чего ты хочешь.
например так: есть 3 кнопки.
кнопка#1: что должно происходить по её нажатию.
кнопка#2: что должно происходить по её нажатию.
и.т.д.
нормально опиши чего ты хочешь.
например так: есть 3 кнопки.
кнопка#1: что должно происходить по её нажатию.
кнопка#2: что должно происходить по её нажатию.
и.т.д.
Если возникнут вопросы - посмотрите на мой аватар.
-
Импульс
- Потрогал лапой паяльник
- Сообщения: 349
- Зарегистрирован: Пн ноя 29, 2010 05:52:05
- Откуда: Иркутск
Re: CodeVision AVR в вопросах и ответах
Да помоему написано уже давно...
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Импульс, выражения внутри программы типа delay_ms(500); - вообще не должно быть.
Заведи таймер на миллисекунду в прерывании, в мейне его обрабатывай и делай анализ клавиатуры.
По изменению режима - выставь счетчик на 500 - и по нему мигай, чем хочется.
Заведи таймер на миллисекунду в прерывании, в мейне его обрабатывай и делай анализ клавиатуры.
По изменению режима - выставь счетчик на 500 - и по нему мигай, чем хочется.
- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: CodeVision AVR в вопросах и ответах
urry писал(а):Импульс, выражения внутри программы типа delay_ms(500); - вообще не должно быть.
Заведи таймер на миллисекунду в прерывании, в мейне его обрабатывай и делай анализ клавиатуры.
По изменению режима - выставь счетчик на 500 - и по нему мигай, чем хочется.
эта программа некритична по времени исполнения и задержкам, так что можно обойтись без прерываний и таймеров
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: CodeVision AVR в вопросах и ответах
Импульс писал(а):Да помоему написано уже давно...
не увидел
распиши подробнее
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Дело не в критичности, а в проблемеunalex писал(а):эта программа некритична по времени исполнения и задержкам, так что можно обойтись без прерываний и таймеров
, которую человек не может решить. И понятно почему - он глупо зацикливает программу на длительное время, когда в это время, процессор может заниматься другими более нужными делами.Как сделать чтоб при вкл поворотников или аварийки можно всё другое включать свет фар ?
Как вариант - распараллеливать процессы, а все задержки считать в прерывании таймера, с установкой соответствующих флагов.
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Угу. Я специально не написал код, чтобы человек сам разобрался.
Тема - многозадачные процессы - ему еще понадобится. Пусть помучится пока.
Тема - многозадачные процессы - ему еще понадобится. Пусть помучится пока.
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
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 в вопросах и ответах
Да, кстати, я тоже не понял зачем тут макрос нужен и каким боком его приставлять.vitalik_1984 писал(а):Для использования вашего макроса нужно будет писать CALLFUNCY(2) вместо y2() в чем выгода?
-
Импульс
- Потрогал лапой паяльник
- Сообщения: 349
- Зарегистрирован: Пн ноя 29, 2010 05:52:05
- Откуда: Иркутск
Re: CodeVision AVR в вопросах и ответах
urry писал(а):Угу. Я специально не написал код, чтобы человек сам разобрался.
Тема - многозадачные процессы - ему еще понадобится. Пусть помучится пока.
А как лучше будет тайммер настроить, на прерывание или переполнение .
Думаю что таймер будет крутить бесконечный цикл поворотников и аварийки,тем самым не нагромождая процессор.
Но поворотники и аварийка раздельно должны включатся и не мешать другим кнопкам вкл.(свет фар ,салона,габаритов).
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Прерыванием по переполнению. 
Очень легко считать требуемое значение таймера
Например, на вход 1 таймера поступает 8 мег, нужно снять с него 1 килогерц (1 мс период)
Очень легко считать требуемое значение таймера
Например, на вход 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 в вопросах и ответах
vitalik_1984 писал(а):А что разве совать в макрос переменную это хороший тон?
Как же будет работать ваш код? Чувствую ничего из этого не получится.
И ваша функция обновления не более чем фикция.
Для использования вашего макроса нужно будет писать CALLFUNCY(2) вместо y2() в чем выгода?
1 нормальный тон
2 будет работать, не чувствуйте, а проверяйте
3 аргументируйте, в чем фикция
3 посмотрите код на предыдущей странице, вся эта простыня заменяется двумя строчками, которые я написал
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: CodeVision AVR в вопросах и ответах
Импульс писал(а):unsigned char flag = 0;---------- declare first in block(долно заявится сначала в блоке)
перемещать ее нужно в начало блока сразу после main, перед конфигурацией портов
не стоит ее делать глобальной, это не есть гуд
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...


