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

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

1. mrbin - 17 Августа, 2013 - 06:38:09 - перейти к сообщению
Добрый день! подскажите как написать задержку перед началом програмы что бы робот не сзазу начинал движение а секунд через пять мигнув диодом?
2. Predator - 17 Августа, 2013 - 11:21:13 - перейти к сообщению
у вас наверняка есть примерно такая конструкция:

CODE:

main()

{
io_init();
motor_init();
vsa_figna_init();
while(1)
{
смотреть куда ехать и ехать куда не надо...
};
};


так вот перед этим бесконечным циклом ( while(1) ) надо вставить задержку. Например delayms(5000);
3. mrbin - 17 Августа, 2013 - 19:11:01 - перейти к сообщению
спасибо за ответ,теперь другая проблема записываю в протеусе,все работает как надо,сначало минает ждет потом едет,записываю в микроконтролер,диод замигал и мигает бесконечно ,робот стоит,микроконтролер мега8515,в чем может быть причина?задержку пишу перед while.
4. killgur - 17 Августа, 2013 - 23:38:11 - перейти к сообщению
mrbin пишет:
спасибо за ответ,теперь другая проблема записываю в протеусе,все работает как надо,сначало минает ждет потом едет,записываю в микроконтролер,диод замигал и мигает бесконечно ,робот стоит,микроконтролер мега8515,в чем может быть причина?задержку пишу перед while.


уже вроде один раз намекнули что надо код показать...
5. mrbin - 18 Августа, 2013 - 07:17:13 - перейти к сообщению
#include <mega8515.h>
#include <delay.h>
#include <io.h>
#include <stdlib.h>



void main(void)
{
int i; // объявляем переменную i




DDRD = 0xFF; // все выводы порта D сконфигурировать как выходы
DDRC = 0x00; // все выводы порта C сконфигурировать как входы


PORTC = 0xff; // установить "1" на всех выводах порта D,




for (i = 1; i <= 10; i++) // цикл "для", повторяющийся 10 раз
{

PORTD |= 1<<5; // установить "1" (высокий уровень) на выводе PD5,
//зажечь светодиод

delay_ms(250); // ждем 0.25 сек.

PORTD &= ~ (1<<5); // установить "0" (низкий уровень) на выводе PD5,
//погасить светодиод

delay_ms(250); // ждем 0.25 сек.

}

while(1) // Бесконечный цикл.

{
//ВРАЩАЕМ МОТОРЫ ВПЕРЕД.

PORTD&=~(1<<1); //PORTD.1=0; // установить "0" на линии 2 порта D
PORTD|= 1<<2; //PORTD.2=1; // установить "1" на линии 1 порта D `
PORTD&=~(1<<3); //PORTD.3=0; // установить "0" на линии 2 порта D
PORTD|= 1<<4 ; //PORTD.4=1; // установить "1" на линии 3 порта D





// ПРОВЕРЯЕМ СИГНАЛ НИЗКОГО УРОНЯ ОТ ФОТОДАТЧИКА PORTC.1

if (!(PINC & (1<<PINC1))) // проверить "0" на линии 1;
{

// ПРИ ПОСТУПЛЕНИИ СИГНАЛА Н/У PORTC.1/ МИГНУТЬ ДИОДОМ ...

PORTD.6=1;
delay_ms(50);
PORTD.6=0;
delay_ms(50);
PORTD.6=1;
delay_ms(50);
PORTD.6=0;
delay_ms(50);
PORTD.6=1;
delay_ms(50);
PORTD.6=0;

//СТОП МОТОРЫ.

PORTD&=~ (1<<1); //PORTD.1=0; // установить "0" на линии 1 порта D ; `
PORTD&=~ (1<<2); //PORTD.2=0; // установить "0" на линии 2 порта D ;
PORTD&=~ (1<<3); //PORTD.3=0; // установить "0" на линии 3 порта D ;
PORTD&=~ (1<<4); //PORTD.4=0; // установить "0" на линии 4 порта D ;
delay_ms(500);

//ЗДАТЬ НАЗАД.

PORTD|= 1<<1; //PORTD.1=1; // установить "1" на линии 1 порта D
PORTD&=~(1<<2); //PORTD.2=0; // установить "0" на линии 4 порта C
PORTD|= 1<<3; //PORTD.3=1; // установить "1" на линии 2 порта D
PORTD&=~(1<<4); //PORTD.4=0; // установить "0" на линии 4 порта C
delay_ms(1000);

//РАЗВЕРНУТСЯ НА ПРАВО.

PORTD|= 1<<1; //PORTD.1=1; // установить "1" на линии 1 порта D
PORTD&=~(1<<2); //PORTD.2=0; // установить "0" на линии 4 порта C
PORTD&=~(1<<3); //PORTD.3=0; // установить "0" на линии 4 порта C
PORTD|= 1<<4; //PORTD.4=1; // установить "1" на линии 2 порта D
delay_ms(700);

}
(Добавление)
вот код
6. Роботов - 18 Августа, 2013 - 08:44:21 - перейти к сообщению
Скорее всего, если в протеусе работает, значит происходит сбой во время включения моторов, МК сбрасывается и начинается всё сначала. Короче копайте в питании. попробуйте запитать МК от отдельного источника. Почти всегда помогает.
7. mrbin - 18 Августа, 2013 - 16:26:53 - перейти к сообщению
Спасибо буду пробовать,и еще вопрос lm358,в нем же два усилителя,собираю на нем да фотодатчика,подключаю,первый раз срабатывают оба,потом один работает второй просо горит,и хоть что ты делай ни чего не помогает,один работает другой нетю
8. mrbin - 19 Августа, 2013 - 15:16:20 - перейти к сообщению
НЕ ПОМОГЛО ТАКАЯ ЖЕ ЕРУНДА
9. Роботов - 20 Августа, 2013 - 13:37:44 - перейти к сообщению
mrbin пишет:
НЕ ПОМОГЛО ТАКАЯ ЖЕ ЕРУНДА

Емкости по питанию стоят? Электролит и керамика обязательно.
Reset к плюсу подтянут? Через резистор 10 кОм. желательно.
Чем питаемся-то вообще?
10. Петр Киселев - 20 Августа, 2013 - 18:37:28 - перейти к сообщению
Желательно, чтобы mrbin выложил схему питания своего устройства!
(Добавление)
mrbin пишет:
PORTD|= 1<<1; //PORTD.1=1; // установить "1" на линии 1 порта D
PORTD&=~(1<<2); //PORTD.2=0; // установить "0" на линии 4 порта C
PORTD&=~(1<<3); //PORTD.3=0; // установить "0" на линии 4 порта C
PORTD|= 1<<4; //PORTD.4=1; // установить "1" на линии 2 порта D
delay_ms(700);

Роботов, все ли здесь правильно? Интуитивно мне тут кое-что не нравится!
11. Роботов - 20 Августа, 2013 - 19:35:02 - перейти к сообщению
Петр Киселев пишет:
Интуитивно мне тут кое-что не нравится!

В комментариях порт D и порт С перепутаны? Ну это на скорость не влияет)
12. mrbin - 20 Августа, 2013 - 19:58:03 - перейти к сообщению
ну а правильное питание схему можно,да кондецаторы стоят перед крен и после,возле ноги нет,а схему правильного питания можно?
(Добавление)
[quote=mrbin]ну а правильное питание схему можно,да кондецаторы стоят перед крен и после,возле ноги нет,резет к плюсу подтянут через 50килоом
13. Роботов - 20 Августа, 2013 - 20:07:53 - перейти к сообщению
От КРЕН-ки только МК питается? Какое напряжение подается на КРЕН? Должно быть больше 7,5 вольт
14. mrbin - 21 Августа, 2013 - 07:13:06 - перейти к сообщению
больше 7.5,контролер,драйвер двигателя питается от крен
15. Роботов - 21 Августа, 2013 - 13:24:45 - перейти к сообщению
Если двигатели питаются от другого источника, то должно быть всё нормально. Разве что какая-то мощная помеха от движков всё таки пролазит. Хорошо бы осцилографом посмотреть цепи питания на предмет просадки.