Страница 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