Здравствуйте, а не могли бы Вы мне помочь с исходником пытаясь сделать реальный проект для самообучения столкнулся с проблемой, при нажатии кнопки на вход поступает 0, а с выхода выходит 1 и запускает двигатель, но при отпускании кнопки происходит какая то ерунда на всех выходах как гирлянды. Почитав информацию понял что необходимо сделать что-то с постоянным опросом входа. Помогите разобраться!
Заранее спасибо!
вот кусочек кода в котором и скорее всего ошибка: while (1)
{
if(PINB.0==1)//ЕЗДА ВПЕРЕД ЕСЛИ НА Б0=1
{
PORTC.0=1; // ЕДИМ ВПЕРЕД (ПЕРЕДНИЙ ПРИВОД)
PORTC.2=1;
PORTC.1=0;
PORTC.3=0;
PORTD.0=1; // ЕДИМ ВПЕРЕД (ЗАДНИЙ ПРИВОД)
PORTD.2=1;
PORTD.1=0;
PORTD.3=0;
}
else;
{
PORTC.0=0; // СТОИМ НА МЕСТЕ
PORTC.2=0;
PORTC.1=0;
PORTC.3=0;
PORTD.0=0; // СТОИМ НА МЕСТЕ
PORTD.2=0;
PORTD.1=0;
PORTD.3=0;
}
if(PINB.1==1)//ЕЗДА НАЗАД ЕСЛИ НА Б1=1
{
PORTC.0=0; // ЕДИМ НАЗАД (ПЕРЕДНИЙ ПРИВОД)
...
PORTD.0=0; // ЕДИМ НАЗАД (ЗАДНИЙ ПРИВОД)
...
}
else;
{
PORTC.0=0; // СТОИМ НА МЕСТЕ
...
PORTD.0=0; // СТОИМ НА МЕСТЕ
...
}
фото схемы подключение из ПРОТЕУСА:
а это осциллограмма :
но при отпускании кнопки происходит какая то ерунда на всех выходах как гирлянды
Если подтяжки нет, то гирлянда будет точно.
Включите внутреннюю подтяжку для входов работающих на кнопки..
mihail
Отправлено: 13 Февраля, 2014 - 21:52:48
Гуру
Сообщений всего: 1065
Дата рег-ции: Март 2010
Уберите ; после else
Duha
Отправлено: 13 Февраля, 2014 - 23:04:43
Рядовой
Сообщений всего: 3
Дата рег-ции: Февр. 2014
исправил, дурацкая ошибка, но она не помогла.
привязка порта В делает еще хуже на выходах, гирлянда даже без нажатия на кнопку, а без привязки гирлянда но только при нажатии на кнопку и теми выходами которые указани в if.
Может тут проблема не в дребезге контактов, а?
mihail
Отправлено: 13 Февраля, 2014 - 23:20:48
Гуру
Сообщений всего: 1065
Дата рег-ции: Март 2010
Если кнопки при нажатии соединяют ножки МК с VCC, то на этих ножках должны быть pull-down резисторы. Они прижимают ножки МК к GND пока не нажата кнопка и тем самым обеспечивают на ножках стабильный логический 0.
Если использовать внутренние pull-up резисторы МК, то нужно чтобы при нажатии кнопки соединяли ножки МК с GND.
И для борьбы с дребезгом задержку в 50 ms добавить не помешает.
А подскажите и мне с моим первым кодом для AVR. Конкретно для mega16.
Пытаюсь зажечь 2х разрядный семисегментный индикатор. Конкретно для начала хочу вывести цифры скажем от нуля до 50ти. Код такой: http://pastebin.com/A4R2HAMW
Для одного разряда испытал и массив numbers правильный и подключение ножек индикатора к порту B всё работает, цифры от 0 до 9 смог вывести без проблем. Как только решил ввести второй разряд ввел деление по модулю и остаток в программу, добавил два транзистора на порт А для поочередного зажигания первого/второго разряда - индикатор начал выводить какую то ерунду.. при отладке заметил что в переменные tens и nums с каждой итерацией цикла for в функции IndicatorOn лезут какие то странные цифры. При этом при первом проходе цикла цифры в переменных те что должны быть, при втором уже меняются на какие то невероятные... откуда они там берутся то? Или где в логике программы ошибка?
elmot
Отправлено: 14 Февраля, 2014 - 13:44:05
Гуру
Сообщений всего: 1141
Дата рег-ции: Дек. 2010
Начнем с того, что numbers надо объявить вне функции и как const
В текущем варианте этот массив набивается в стек при каждом вызове функции.
Warnings от компилятора есть?
n1k3
Отправлено: 14 Февраля, 2014 - 13:54:55
Лейтенант
Сообщений всего: 21
Дата рег-ции: Февр. 2014
elmot пишет:
Начнем с того, что numbers надо объявить вне функции и как const
В текущем варианте этот массив набивается в стек при каждом вызове функции.
Warnings от компилятора есть?
Да, были! Как раз на него и был warning, вроде бы ругался на то, что он типа char, не обращал на это внимание.. дома посмотрю точнее, вынесу массив. Спасибо за подсказку.
elmot
Отправлено: 14 Февраля, 2014 - 14:12:01
Гуру
Сообщений всего: 1141
Дата рег-ции: Дек. 2010
На Сшные ворнинги _нельзя_ не обращать внимания. Дьявол именно там
n1k3
Отправлено: 14 Февраля, 2014 - 22:40:31
Лейтенант
Сообщений всего: 21
Дата рег-ции: Февр. 2014
Вобщем сделал!
Ворнинг и правда исчез. Однако глюк остался. Моделирую ситуацию в протеусе и видимо глюк именно в нем.. Убрал подключение к ножке первого разряда индикатора, разряд не загорается, НО. Не смотря на то что сигнал не подается на базу транзистора ВТОРОГО разряда - второй разряд ВСЁ РАВНО загорается и показывает цифру предназначенную для первого разряда!
Это глюк ISIS ? Или транзисторы надо какие то другие.. тут поставил BC547.
PS скриншоты прилагаю. В первом МК выводит единицу на порт PA1, который никуда не подключен(по задумке должен быть подключен к первому разряду), на сегменты подаются сигналы для отображения цифры 0(предназначена соответственно для первого разряда), НО этот ноль всё равно загорается на втором разряде!
На втором скриншоте всё правильно - цифра 1 загорается. По задумке это шаг где должно гореть два разряда и показывать 01
ТС собирается лишиться толи МК, толи своего индикатора. Где балластные резисторы?
Ну насколько я вижу, Q1 постоянно открыт. А вот почему - разбирайтесь. (Добавление)
Возможно R1 великоват, но я не электронщик, точно не подскажу.
morokoriss
Отправлено: 15 Февраля, 2014 - 14:57:11
Генералиссимус
Сообщений всего: 697
Дата рег-ции: Нояб. 2011
Судя по схеме, первый разряд никогда гореть не будет. Транзистор только на второй разряд работает. Надо 4 транзистора на 4 разряда.
morokoriss
Отправлено: 15 Февраля, 2014 - 15:00:27
Генералиссимус
Сообщений всего: 697
Дата рег-ции: Нояб. 2011
Вот если сделать так, то только первый будет работать. Смысл понятен? (Добавление)
Это же четырёхразрядный семисегментный индикатор с ОБЩИМ КАТОДОМ! Кто землю подключать будет к сегменту? Прикреплено изображение
elmot
Отправлено: 15 Февраля, 2014 - 16:55:48
Гуру
Сообщений всего: 1141
Дата рег-ции: Дек. 2010
Выше по тексту было - ТС спецом второй катод отключил. Вот транзистор-то почему всегда открыт?
Duha
Отправлено: 15 Февраля, 2014 - 18:47:22
Рядовой
Сообщений всего: 3
Дата рег-ции: Февр. 2014
Возможно ли сделать кнопку которая работает не на спад или всплеск а от постоянного сигнала, тоесть есть подали ноль на вход на выходе сигнал есть, отпустили кнопку, пропал.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.