nest
:) да asm ("nop"::); помогло.
Только это не решение. Теперь такой код:
CODE:
// ехать вперед
/ ехать вперед
PORTC |= 0b00100100; // на PINC2 и PINC5 подаем высокий уровень сигнала - 5В
PORTC &= ~0b00011000; // на PINC3 и PINC4 подаем низкий уровень сигнала - 0В
while((PIND & 0b00000100) != 0b100)
{ // ожидание сигнала логической 1
asm ("nop"::); // пустая операция
}
PORTC &= ~0b00111100;
//_delay_ms(1000);
// ехать назад
PORTC |= 0b00011000; // на PINC3 и PINC4 подаем высокий уровень сигнала - 5В
PORTC &= ~0b00100100; // на PINC2 и PINC5 подаем низкий уровень сигнала - 0В
while((PIND & 0b00000100) == 0b100)
{ // ожидание сигнала логического 0
asm ("nop"::); // пустая операция
}
PORTC &= ~0b00111100; // стоп - на PINC2-5 подаем низкий уровень
while(1) // вечный цикл
{
PORTC |= 0b00000010; // высокий уровень на PC1 - зажечь светодиод
_delay_ms(1000); // ожидание 1с
PORTC &= ~0b00000010; // низкий уровень на PC1 - потушить светодиод
_delay_ms(1000); // ожидание 1с
}
В мк сразу проскакивает до вечного цикла. Если убрать строчку перед вечным циклом
PORTC &= ~0b00111100; // стоп - на PINC2-5 подаем низкий уровень
то рабоает точно по коду: едет вперед, после подачи высокого уровня на PD2 едет назад и после подачи низкого уровня на PD2 продолжает ехать и мигает светодиод.
Оптимизация отключена. Также пробовал все уровни оптимизации в WinAVR - результат один.(в некоторых случаях оптимизация в режиме s = optimize for size меняет поведение МК, только правильным оно не стает)
mctim
Отправлено: 27 Ноября, 2009 - 14:01:07
Маршал
Сообщений всего: 109
Дата рег-ции: Нояб. 2009
Я вот что заметил: если двигатели отключить от МК, то этот код выполняется правильно.
Если схему от двигателей держать на растоянии 15 см - тоже правильно работает. Или если держать палец возле(!) МК. Получается это двигатели вызывают перепады и МК глючит?
Тут дело в том что я поставил по 3 конденсатора на двигатели, на стабилизатор питания и возле МК тоже как описано здесь http://myrobot.ru/articles/mc_stab.php .
Что же тут сделать еще?
Белый Волк
Отправлено: 27 Ноября, 2009 - 15:39:13
Супермодератор
Сообщений всего: 648
Дата рег-ции: Февр. 2007
mctim
Микроконтроллер ловит электромагнитные помехи.
Что у Вас находится на PD2?
nest
Отправлено: 27 Ноября, 2009 - 19:55:04
Администратор
Сообщений всего: 4866
Дата рег-ции: Сент. 2009
mctim, запитайте драйвер двигателя от батареи, а МК - через стабилизатор.
mctim
Отправлено: 27 Ноября, 2009 - 19:59:51
Маршал
Сообщений всего: 109
Дата рег-ции: Нояб. 2009
Белый Волк, nest
Вот такая схема у меня.
(Добавление) nest
nest пишет:
mctim, запитайте драйвер двигателя от батареи, а МК - через стабилизатор.
у меня МК через стабилизатор а драйвер напрямую от источника. Источник - 4 АА.
Двигатели - обычные моторчики от игрушки.
nest
Отправлено: 27 Ноября, 2009 - 20:29:08
Администратор
Сообщений всего: 4866
Дата рег-ции: Сент. 2009
С6, С4, С5 - по сколько ? (Добавление)
mctim пишет:
Получается это двигатели вызывают перепады и МК глючит?
покажите плату.
возможно некрасиво развели питание ...
покажите плату. возможно некрасиво развели питание ...
Плата действительно некрасивая
nest
Отправлено: 27 Ноября, 2009 - 21:13:25
Администратор
Сообщений всего: 4866
Дата рег-ции: Сент. 2009
мдэ :)
поставьте кондёр 10 мкФ на пятивольтовое питание! : ))))
mctim
Отправлено: 27 Ноября, 2009 - 21:19:13
Маршал
Сообщений всего: 109
Дата рег-ции: Нояб. 2009
nest .
В смысле С10 заменить с 0,1 mF на 10 mF?
nest
Отправлено: 27 Ноября, 2009 - 21:22:31
Администратор
Сообщений всего: 4866
Дата рег-ции: Сент. 2009
параллельно к С10 :)
золотое правило:
на каждый корпус микросхемы - 0,1 или 0,01 мкф блокировочный "кондёр" возле каждого корпуса, возможно ближе к ножкам питания.
плюс "электролит" минимум 5-10 мкФ на каждые 5-10 корпусов.
С6, С7 я бы убрал.
mctim
Отправлено: 27 Ноября, 2009 - 21:45:11
Маршал
Сообщений всего: 109
Дата рег-ции: Нояб. 2009
Добавил 10 mF - не помогло.
Снял С6, С7 - не помогло.
nest
Отправлено: 27 Ноября, 2009 - 22:21:50
Администратор
Сообщений всего: 4866
Дата рег-ции: Сент. 2009
подпаяйте мотор прямо к ногам L293
подайтне +5в на МК прямо с ноги стабилизатора
mctim
Отправлено: 27 Ноября, 2009 - 22:42:27
Маршал
Сообщений всего: 109
Дата рег-ции: Нояб. 2009
двигатель подпаял - не помогло.
питание подал прямо - не помогло.
хоть в клетку фарадея суй!
nest
Отправлено: 27 Ноября, 2009 - 23:00:55
Администратор
Сообщений всего: 4866
Дата рег-ции: Сент. 2009
оба провода к моторам пропустить через катушку, последовательно.
C1 - пару тысяч пФ. Прикреплено изображение
mctim
Отправлено: 28 Ноября, 2009 - 00:05:58
Маршал
Сообщений всего: 109
Дата рег-ции: Нояб. 2009
nest, в этом определенно есть смысл. Как лучше возле двигателя или можно на плате разместить? (Добавление)
вот еще что: какая тут зависимость от количества витков и толщины провода?
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.