Форум myROBOT.ru » Шаг за шагом » С чего начать? » Помогите с написанием моего первого кода

Страниц (3): [1] 2 3 »
 

1. Duha - 13 Февраля, 2014 - 15:24:46 - перейти к сообщению
Здравствуйте, а не могли бы Вы мне помочь с исходником пытаясь сделать реальный проект для самообучения столкнулся с проблемой, при нажатии кнопки на вход поступает 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; // СТОИМ НА МЕСТЕ
...
}


фото схемы подключение из ПРОТЕУСА:

а это осциллограмма :
2. Роботов - 13 Февраля, 2014 - 20:38:45 - перейти к сообщению
Duha пишет:
но при отпускании кнопки происходит какая то ерунда на всех выходах как гирлянды

Если подтяжки нет, то гирлянда будет точно.
Включите внутреннюю подтяжку для входов работающих на кнопки..
3. mihail - 13 Февраля, 2014 - 21:52:48 - перейти к сообщению
Уберите ; после else
4. Duha - 13 Февраля, 2014 - 23:04:43 - перейти к сообщению
исправил, дурацкая ошибка, но она не помогла.
привязка порта В делает еще хуже на выходах, гирлянда даже без нажатия на кнопку, а без привязки гирлянда но только при нажатии на кнопку и теми выходами которые указани в if.

Может тут проблема не в дребезге контактов, а?
5. mihail - 13 Февраля, 2014 - 23:20:48 - перейти к сообщению
Если кнопки при нажатии соединяют ножки МК с VCC, то на этих ножках должны быть pull-down резисторы. Они прижимают ножки МК к GND пока не нажата кнопка и тем самым обеспечивают на ножках стабильный логический 0.

Если использовать внутренние pull-up резисторы МК, то нужно чтобы при нажатии кнопки соединяли ножки МК с GND.

И для борьбы с дребезгом задержку в 50 ms добавить не помешает.
6. n1k3 - 14 Февраля, 2014 - 12:56:16 - перейти к сообщению
Добрый день!

А подскажите и мне с моим первым кодом для AVR. Конкретно для mega16.
Пытаюсь зажечь 2х разрядный семисегментный индикатор. Конкретно для начала хочу вывести цифры скажем от нуля до 50ти. Код такой: http://pastebin.com/A4R2HAMW

Для одного разряда испытал и массив numbers правильный и подключение ножек индикатора к порту B всё работает, цифры от 0 до 9 смог вывести без проблем. Как только решил ввести второй разряд ввел деление по модулю и остаток в программу, добавил два транзистора на порт А для поочередного зажигания первого/второго разряда - индикатор начал выводить какую то ерунду.. при отладке заметил что в переменные tens и nums с каждой итерацией цикла for в функции IndicatorOn лезут какие то странные цифры. При этом при первом проходе цикла цифры в переменных те что должны быть, при втором уже меняются на какие то невероятные... откуда они там берутся то? Или где в логике программы ошибка?
7. elmot - 14 Февраля, 2014 - 13:44:05 - перейти к сообщению
Начнем с того, что numbers надо объявить вне функции и как const
В текущем варианте этот массив набивается в стек при каждом вызове функции.
Warnings от компилятора есть?
8. n1k3 - 14 Февраля, 2014 - 13:54:55 - перейти к сообщению
elmot пишет:
Начнем с того, что numbers надо объявить вне функции и как const
В текущем варианте этот массив набивается в стек при каждом вызове функции.
Warnings от компилятора есть?


Да, были! Как раз на него и был warning, вроде бы ругался на то, что он типа char, не обращал на это внимание.. дома посмотрю точнее, вынесу массив. Спасибо за подсказку.
9. elmot - 14 Февраля, 2014 - 14:12:01 - перейти к сообщению
На Сшные ворнинги _нельзя_ не обращать внимания. Дьявол именно тамУлыбка
10. n1k3 - 14 Февраля, 2014 - 22:40:31 - перейти к сообщению
Вобщем сделал!
Ворнинг и правда исчез. Однако глюк остался. Моделирую ситуацию в протеусе и видимо глюк именно в нем.. Убрал подключение к ножке первого разряда индикатора, разряд не загорается, НО. Не смотря на то что сигнал не подается на базу транзистора ВТОРОГО разряда - второй разряд ВСЁ РАВНО загорается и показывает цифру предназначенную для первого разряда!

Это глюк ISIS ? Или транзисторы надо какие то другие.. тут поставил BC547.

PS скриншоты прилагаю. В первом МК выводит единицу на порт PA1, который никуда не подключен(по задумке должен быть подключен к первому разряду), на сегменты подаются сигналы для отображения цифры 0(предназначена соответственно для первого разряда), НО этот ноль всё равно загорается на втором разряде!
На втором скриншоте всё правильно - цифра 1 загорается. По задумке это шаг где должно гореть два разряда и показывать 01





11. elmot - 15 Февраля, 2014 - 11:52:54 - перейти к сообщению
ТС собирается лишиться толи МК, толи своего индикатора. Где балластные резисторы?

Ну насколько я вижу, Q1 постоянно открыт. А вот почему - разбирайтесь.
(Добавление)
Возможно R1 великоват, но я не электронщик, точно не подскажу.
12. morokoriss - 15 Февраля, 2014 - 14:57:11 - перейти к сообщению
Судя по схеме, первый разряд никогда гореть не будет. Транзистор только на второй разряд работает. Надо 4 транзистора на 4 разряда.
13. morokoriss - 15 Февраля, 2014 - 15:00:27 - перейти к сообщению
Вот если сделать так, то только первый будет работать. Смысл понятен?
(Добавление)
Это же четырёхразрядный семисегментный индикатор с ОБЩИМ КАТОДОМ! Кто землю подключать будет к сегменту?
14. elmot - 15 Февраля, 2014 - 16:55:48 - перейти к сообщению
Выше по тексту было - ТС спецом второй катод отключил. Вот транзистор-то почему всегда открыт?
15. Duha - 15 Февраля, 2014 - 18:47:22 - перейти к сообщению
Возможно ли сделать кнопку которая работает не на спад или всплеск а от постоянного сигнала, тоесть есть подали ноль на вход на выходе сигнал есть, отпустили кнопку, пропал.