Страница 74 из 421

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

Добавлено: Сб май 29, 2010 13:20:33
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); //Иначе гасим (кнопка отпущена)
}
}
Тот же самый код, но понятный всем сишным компиляторам.

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

Добавлено: Сб май 29, 2010 13:31:56
ion11
СПАСИБО AI_Disable за быстрый ответ.
Проверил я этот код ,но мне надо чтобы при отпускании светодиод не тух а только при повторном нажатии и отпускании кнопки потух.

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

Добавлено: Сб май 29, 2010 14:25:44
AI_Disable
Похоже, не правильно вас понял в первый раз. Попробуйте так:

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

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

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

см. ниже

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

Добавлено: Сб май 29, 2010 15:03:34
ion11
После того как вы стали писать стандартным средствами языка Си ,код перестал работать в МК.Перепишите Пожалуйста последние два кода под CVAVR.типа PINB.1 и PORTC.2,так как я уже привык к фичам CVAVR.в дальнейшем попробую уйти от этих Фич в CVAVR.
Заранее вам Благодарен

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

Добавлено: Сб май 29, 2010 15:23:05
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 на противоположный.
}
}

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

Добавлено: Сб май 29, 2010 16:09:07
ion11
Спасибо AI_Disable за помощь.
Сейчас оба кода работают но одно но - не с первого раза после нажатия кнопки загорается светодиод а потом не с первого нажатия тухнет или вообще маргнёт светодиод.Объясните почему так.

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

Добавлено: Сб май 29, 2010 16:21:34
AI_Disable
Случайно вместо ответа отредактировал моё предыдущее сообщение.

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

Добавлено: Сб май 29, 2010 16:28:36
ion11
Сейчас вроде лутчше стало,но всёравно бывает через раз срабатывает.Вероятно надо как то по другому код для кнопки составлять.
И ещё раз Спасибо вам за Помощь.

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

Добавлено: Сб май 29, 2010 16:38:07
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;
}
}

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

Добавлено: Сб май 29, 2010 20:11:23
ion11
ValBag спасибо вам так же за помощь,но код ваш в МК неработает.

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

Добавлено: Сб май 29, 2010 20:20:48
ValBag
ion11 писал(а):ValBag спасибо вам так же за помощь,но код ваш в МК неработает.
Компилятор показывает ошибку? Какую?

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

Добавлено: Сб май 29, 2010 20:22:58
ion11
Ошибок в кмпиляторе нет но Микроконтроллер не отрабатывает этот код,использую я CVAVR.

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

Добавлено: Сб май 29, 2010 20:44:31
nsl2004
2ion11
Скажите , а Вы проект создавали? Т.к тот кусок кода что Вам подсказали, в CV надо вставлять в определенное место в проекте. И он может даже скомпилироватся , но работать не будет. Вы написали что новичек, так вот и спрашиваю. Прикрепите весь Ваш проект, что бы можно было посмотреть.

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

Добавлено: Сб май 29, 2010 20:56:14
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;
}
}

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

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

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

Добавлено: Сб май 29, 2010 21:36:37
ion11
ValBag - Спасибо вам огромное.
Это код пошёл как надо ток включил задержку.
Теперь буду разбираться с этим кодом что и как работает и буду думать как сделать тоже самое ток на 2е кнопки и светодиода.

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

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

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

Добавлено: Пн май 31, 2010 05:35:57
ssvd
привет!

нужна помощь!
есть atmega8, хотелось бы запустить один таймер(на внутреннем кристалле) для вывода данных, а часы посадить на таймер2 работающий в асинхронном режиме. подскажите как это настроить.
или может ссылку кто даст на разъяснение про такой режим работы..

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

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

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

Добавлено: Пн май 31, 2010 05:42:45
AI_Disable