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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

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

Сообщение AI_Disable »

Забыл сказать, что лучше не привыкать к "фитчам" кодвижиона, таким как "работа с битами через точку", а делать всё стандартными средствами языка Си:

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

void main (void)
{
PORTB|=(1<<1); //включаем внутреннюю подтяжку
DDRC|=(1<<1); //делаем выходом PC.1
while(1)
{
if(!(PINB&(1<<1))) PORTC|=(1<<1); //Если на PB.1 НЕ единица (кнопка нажата), то зажигаем светодиод
else PORTC&=~(1<<1); //Иначе гасим (кнопка отпущена)
}
}

Тот же самый код, но понятный всем сишным компиляторам.
Последний раз редактировалось AI_Disable Сб май 29, 2010 17:22:05, всего редактировалось 2 раза.
ion11
Родился
Сообщения: 11
Зарегистрирован: Сб май 29, 2010 12:23:25

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

Сообщение ion11 »

СПАСИБО AI_Disable за быстрый ответ.
Проверил я этот код ,но мне надо чтобы при отпускании светодиод не тух а только при повторном нажатии и отпускании кнопки потух.
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

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

Сообщение AI_Disable »

Похоже, не правильно вас понял в первый раз. Попробуйте так:

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

см. ниже

Минус этого решения в том, что пока кнопка нажата программа "застревает" и не двигается дальше, пока её не отпустят.
Если это не приемлемо, то можно сделать так:

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

см. ниже
Последний раз редактировалось AI_Disable Сб май 29, 2010 15:24:41, всего редактировалось 1 раз.
ion11
Родился
Сообщения: 11
Зарегистрирован: Сб май 29, 2010 12:23:25

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

Сообщение ion11 »

После того как вы стали писать стандартным средствами языка Си ,код перестал работать в МК.Перепишите Пожалуйста последние два кода под CVAVR.типа PINB.1 и PORTC.2,так как я уже привык к фичам CVAVR.в дальнейшем попробую уйти от этих Фич в CVAVR.
Заранее вам Благодарен
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

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

Сообщение AI_Disable »

Это из-за дребезга контактов. Если скорость выполнения остального кода не критична, то можно просто добавить задержки:

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

void main (void)
{
PORTB|=(1<<1); //включаем внутреннюю подтяжку
DDRC|=(1<<1); //делаем выходом PC.1
while(1)
{
if(!(PINB&(1<<1))){ dalay_ms(100); while(!(PINB&(1<<1))); PORTC^=(1<<1); }//Если на PB.1 НЕ единица (кнопка нажата), то ждём пока будет единица (кнопку отпустят) и меняем логический уровень PC.1 на противоположный.
}
}


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

unsigned char flag; //создаём флаговую переменную
void main (void)
{
PORTB|=(1<<1); //включаем внутреннюю подтяжку
DDRC|=(1<<1); //делаем выходом PC.1
while(1)
{
if(!(PINB&(1<<1))) {dalay_ms(100); flag|=(1<<0);} //Если на PB.1 НЕ единица (кнопка нажата), то "поднимаем" флаг.
else if(flag&(1<<0)) {flag&=~(1<<0); PORTC^=(1<<1);} //Иначе (кнопка отпущена) проверяем, поднят ли флаг и если да, то сбрасываем его и меняем логический уровень PC.1 на противоположный.
}
}
Последний раз редактировалось AI_Disable Сб май 29, 2010 16:20:15, всего редактировалось 1 раз.
ion11
Родился
Сообщения: 11
Зарегистрирован: Сб май 29, 2010 12:23:25

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

Сообщение ion11 »

Спасибо AI_Disable за помощь.
Сейчас оба кода работают но одно но - не с первого раза после нажатия кнопки загорается светодиод а потом не с первого нажатия тухнет или вообще маргнёт светодиод.Объясните почему так.
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

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

Сообщение AI_Disable »

Случайно вместо ответа отредактировал моё предыдущее сообщение.
ion11
Родился
Сообщения: 11
Зарегистрирован: Сб май 29, 2010 12:23:25

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

Сообщение ion11 »

Сейчас вроде лутчше стало,но всёравно бывает через раз срабатывает.Вероятно надо как то по другому код для кнопки составлять.
И ещё раз Спасибо вам за Помощь.
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

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

Сообщение ValBag »

ion11 писал(а):чтобы при нажатии на кнопку - светодиод загорелся а при отпускании не потух.
Только когда я повторно нажму на кнопку он должен потухнуть и так по кругу.
Можно попробовать так:

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

#include <delay.h>
bit flag; //создаём флаговую переменную
void main (void)
{
PORTB|=(1<<1); //включаем внутреннюю подтяжку
DDRC|=(1<<1); //делаем выходом PC.1
while(1)
{
//delay_ms(50); // если будет нестабильно реагировать на кнопку, то раскомментировать эту строку
if(!(PINB&(1<<1)))
   {     
      if (flag)
      {
        PORTC^=2;
        flag=0;
      }
   }
else
   flag=1;
}
}
Последний раз редактировалось ValBag Сб май 29, 2010 21:13:34, всего редактировалось 1 раз.
ion11
Родился
Сообщения: 11
Зарегистрирован: Сб май 29, 2010 12:23:25

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

Сообщение ion11 »

ValBag спасибо вам так же за помощь,но код ваш в МК неработает.
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

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

Сообщение ValBag »

ion11 писал(а):ValBag спасибо вам так же за помощь,но код ваш в МК неработает.
Компилятор показывает ошибку? Какую?
ion11
Родился
Сообщения: 11
Зарегистрирован: Сб май 29, 2010 12:23:25

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

Сообщение ion11 »

Ошибок в кмпиляторе нет но Микроконтроллер не отрабатывает этот код,использую я CVAVR.
Аватара пользователя
nsl2004
Мучитель микросхем
Сообщения: 402
Зарегистрирован: Пт май 29, 2009 10:14:29

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

Сообщение nsl2004 »

2ion11
Скажите , а Вы проект создавали? Т.к тот кусок кода что Вам подсказали, в CV надо вставлять в определенное место в проекте. И он может даже скомпилироватся , но работать не будет. Вы написали что новичек, так вот и спрашиваю. Прикрепите весь Ваш проект, что бы можно было посмотреть.
ion11
Родился
Сообщения: 11
Зарегистрирован: Сб май 29, 2010 12:23:25

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

Сообщение ion11 »

Вот весь код,я добавляю только тип используемого в изучении Микроконтроллера
ATMEGA 32.
#include <mega32.h>
#include <delay.h>
bit flag; //создаём флаговую переменную
void main (void)
{
PORTB|=(1<<1); //включаем внутреннюю подтяжку
DDRC|=(1<<1); //делаем выходом PC.1
while(1)
{
//delay_ms(50); // если будет нестабильно реагировать на кнопку, то раскомментировать эту строку
if(!PINB&(1<<1))
{
if (flag)
{
PORTC^=2;
flag=0;
}
}
else
flag=1;
}
}
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

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

Сообщение ValBag »

ion11 писал(а):Вот весь код,я добавляю только тип используемого в изучении Микроконтроллера
Поправил, см. выше. Добавлены скобки в первом операторе if. Если будет влиять дребезг контактов кнопки, то уберите первые два слэш-а перед delay_ms(50)
ion11
Родился
Сообщения: 11
Зарегистрирован: Сб май 29, 2010 12:23:25

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

Сообщение ion11 »

ValBag - Спасибо вам огромное.
Это код пошёл как надо ток включил задержку.
Теперь буду разбираться с этим кодом что и как работает и буду думать как сделать тоже самое ток на 2е кнопки и светодиода.
ion11
Родился
Сообщения: 11
Зарегистрирован: Сб май 29, 2010 12:23:25

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

Сообщение ion11 »

Потихоньку двигаюсь дальше.
И опять вопрос!
Подскажите Пожалуйста как вывести из МК. звук(тон) на PORTD.7( динамик),так чтобы при нажатии на кнопку PINB.1 в динамике пикнуло(как бы подтверждения нажатия).
Аватара пользователя
ssvd
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Ср ноя 04, 2009 18:00:56
Откуда: Алтайский край
Контактная информация:

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

Сообщение ssvd »

привет!

нужна помощь!
есть atmega8, хотелось бы запустить один таймер(на внутреннем кристалле) для вывода данных, а часы посадить на таймер2 работающий в асинхронном режиме. подскажите как это настроить.
или может ссылку кто даст на разъяснение про такой режим работы..
http://abro-nsk.ru
Аватара пользователя
ssvd
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Ср ноя 04, 2009 18:00:56
Откуда: Алтайский край
Контактная информация:

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

Сообщение ssvd »

ion11 писал(а):Потихоньку двигаюсь дальше.
И опять вопрос!
Подскажите Пожалуйста как вывести из МК. звук(тон) на PORTD.7( динамик),так чтобы при нажатии на кнопку PINB.1 в динамике пикнуло(как бы подтверждения нажатия).


тебе на динамик или пьезоизлучатель? обычно если просто пискнуть достаточно пьезоизлучателя!?
http://abro-nsk.ru
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

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

Сообщение AI_Disable »

Ответить

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