Описание: Простой робот на микроконтроллере (Часть2) Робот с фотодатчиком |
Поиск в теме | Версия для печати |
ilnur888 |
Отправлено: 31 Октября, 2010 - 08:30:52
|
Маршал
Сообщений всего: 103
Дата рег-ции: Окт. 2010
|
nest пишет:ilnur888 пишет:вот созданный мною hex-файл (нерабочий): а с чего вы взяли, что он нерабочий?
Nest, я зашивал его в МК, результата никакого. Понимаете, я подозреваю что я вставил и то что надо и то что не надо...
http://myrobot.ru/stepbystep/r_firstbot2.php
- пример №4
я скомпилировал весь текст с комментариями, и даже там где звездочки... потому и грешу на то, что сделал hex файл неправильный, отсюда и схемка не работает...
компиляция проходила без ошибок, а теперь постоянно жалуется на ошибку в makefile!
makefile-шаблон пробовал и с этого сайта скачивать и переделывать -- не помогло, ошибок стало больше...
Вот посмотрите пример №4, для него делал, ничего в программе не изменял.(Отредактировано автором: 31 Октября, 2010 - 08:32:15) |
|
|
ilnur888 |
Отправлено: 31 Октября, 2010 - 08:52:03
|
Маршал
Сообщений всего: 103
Дата рег-ции: Окт. 2010
|
cjA пишет:какой то он махонький, пустой main в hex выдает 14 строчек.
ilnur888 а что за ошибки? Пути к библиотекам не прописали? (Схема тут непричем, компилятор про нее ничего не знает.)
cjA про пути к библиотекам ничего не слышал, я делал все так, как написано здесь:
http://myrobot.ru/stepbystep/mc_makefile.php
что за библиотеки???
Файл makefile и rob.c находятся в одной отдельной папке, пути к ним без пробелов и без русского языка, так что в этом все норм.
вот текст makefile:
http://ifolder.ru/20036013 ОН ПРИЛОЖЕН НИЖЕ И К СООБЩЕНИЮ
там в архиве папка с makefile и rob.c, посмотрите пожалуйста, может у вас получиться что-то сделать. Здесь выложить не могу, слишком оно длинное.
файл программы "rob.c":
CODE:
#include <avr/io.h>
int main(void) // начало основной программы
{
DDRC = 0xff; // все выводы порта C сконфигурировать как выходы
DDRD = 0x00; // все выводы порта D сконфигурировать как входы
PORTD = 0xff; // установить "1" на всех выводах порта D,
// включаем подтягивающие резисторы
while (1) { // Бесконечный цикл
// ПРОВЕРЯЕМ СИГНАЛ НИЗКОГО УРОНЯ ОТ ФОТОДАТЧИКА
if (!(PIND & (1<<PIND1))) // проверить "0" на линии 1 порта D
{
// ---- включаем левый мотор, останавливаем правый -----
PORTC |= _BV(PC1); // установить "1" на линии 1 порта C
PORTC &= ~_BV(PC2); // установить "0" на линии 2 порта C
PORTC |= _BV(PC3); // установить "1" на линии 3 порта C
PORTC &= ~_BV(PC4); // установить "1" на линии 4 порта C
// -----------------------------------------------------
}
else
{
// ---- останавливаем левый мотор, включаем правый -----
PORTC &= ~_BV(PC1); // установить "1" на линии 1 порта C
PORTC |= _BV(PC2); // установить "1" на линии 2 порта C
PORTC &= ~_BV(PC3); // установить "1" на линии 3 порта C
PORTC |= _BV(PC4); // установить "0" на линии 4 порта C
// -----------------------------------------------------
}
} // закрывающая скобка бесконечного цикла
} // закрывающая скобка основной программы
(Добавление)
mihail пишет:ilnur888
HEX является результатом компиляции написанной Вами программы. Какова программа - таков и HEX. Правда, возможны проблемы вызванные оптимизацией программы компилятором, но здесь не этот случай.
Подозреваю, что Вы просто воспользовались написанной кем то программой и не вникали в ее суть. Если бы Вы попытались разобраться в логике работы программы, то легко нашли бы все ошибки. Вы очень невнимательны!
cjA пишет:Схема тут непричем Схема и программа взаимосвязаны. Рассматривать схему без программы и программу без схемы - непросто.
Да, я это понимаю, потому и хотел hex-то переделать, и вот здесь ошибкииии...
Воспользовался кем-то написанной? Ну да, я ж сначала уже написал откуда схема,
текст программы отсюда
http://myrobot.ru/stepbystep/r_firstbot2.php
- пример №4
Программа-то простая, вроде все понятно, ничего не изменял.
Насчет проблем с оптимизацией, это я тоже подозреваю, по схеме (см. выше) на схеме стоит кварц на 8МГц, а когда провожу через makefile, то прописал частооту такую: 1000000
вот, да еще и галочки узнал что надо ставить для того чтобы МК установить на частоту тактирования кварца. НО! В программе не используются никакие таймеры и др., отсюда МК всет равно должен по сути работать...
Если что не так поправьте, отругайте, отошлите, но хоть как-нибудь помогите пожалуйста
Заранее благодарен!
(Отредактировано автором: 31 Октября, 2010 - 09:05:09) |
|
|
ilnur888 |
Отправлено: 31 Октября, 2010 - 10:53:40
|
Маршал
Сообщений всего: 103
Дата рег-ции: Окт. 2010
|
cjA пишет:ручками
вначале предпроцессор
потом компилятор
потом линковщик
потом сборщик
потом транслятор
потом программатор
потом ...
Это все должен делать маке. но не делает, елки-палки!!!
(Добавление)
например тип и частоту я могу задать в программе, так?
РУЧКАМИ???
cjA,
(Добавление)
Не я конечно может и тупой в этом деле, ручками!!! вот это объяснение!!!
(Добавление)
cjA пишет:
(Добавление)
например тип и частоту я могу задать в программе, так?
Ну так да, смотря в какой программе и где в ней задавать тип и частоту. Вот я и хотел бы чтобы кто-нибудь мне помог сделать hex-файл в какой-нить проге, НО! На сайте myROBOT там не указано какие галочки при прошивке отмечать, какую частоту выставлять - всего этого нет, а я в этом деле новичок(Отредактировано автором: 31 Октября, 2010 - 11:02:33) |
|
|
ilnur888 |
Отправлено: 31 Октября, 2010 - 13:19:59
|
Маршал
Сообщений всего: 103
Дата рег-ции: Окт. 2010
|
mihail пишет:nest пишет:Всё работает как положено. Если работает, то это хорошо. Хотя, по моему, не должно
ilnur888
В Makefile указывается частота на которой работает микроконтроллер. У Вас установлен 1 MHz. И это правильно. На эту частоту МК настроен производителем. Подключение кварцевого резонатора не приводит к немедленному изменению тактовой частоты МК. Частоту микроконтроллера изменяют с помощью Fuse Bits. Про них читайте в datasheet и в Wiki myROBOT. Не трогайте их пока.
Программа должна работать примерно так: когда фотосенсор освещен, моторы крутятся в одну сторону, а когда фотосенсор не освещен, то в другую. Проверьте. Если все так, то схема в порядке.
Фотосенсор у Вас не очень хороший (ИМХО). И он расположен слишком далеко от поверхности. Он должен быть в нескольких миллиметрах от линии. Может он еще и подключен наоборот.
Фотосенсор инфракрасный и оба они настроены на работу с одинаковыми длинами волн.
Видите на 5-ой фотке ручку, а на конце дырка, в дырке зеленый светодиод? Так вот я с ним проверял работают они или нет. Если поставить машинку над черной поверхностью то светодиод потухнет, если же над белой - засветиться.
Я тоже думал в этом дело, но потом вот параллельно подкл светодиод и проверил - ик-диод и ик-фоторезистор работают.
(Добавление)
mihail пишет:nest пишет:Всё работает как положено. Если работает, то это хорошо. Хотя, по моему, не должно
ilnur888
Программа должна работать примерно так: когда фотосенсор освещен, моторы крутятся в одну сторону, а когда фотосенсор не освещен, то в другую. Проверьте. Если все так, то схема в порядке.
Фотосенсор у Вас не очень хороший (ИМХО). И он расположен слишком далеко от поверхности. Он должен быть в нескольких миллиметрах от линии. Может он еще и подключен наоборот.
Когда я его включаю, то моторы (оба и сразу) начинают вращаться в одну сторону, а должно быть: один вращается в одну сторону, а второй стоит и наоборот в зависимости от нахождния робота на белой или черной линии.
Нет, нет при подключении я соблюдал полярности, смотрел где эмиттер, где коллектор(кажись так зовут).
Вот и незнаю, что же делать, в чем дело?(Отредактировано автором: 31 Октября, 2010 - 14:59:02) |
|
|
|
Поиск в теме | Версия для печати |
Страниц (6): [1] 2 3 4 5 6 » |
« С чего начать? » |
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
|
|
|
|
|