роботы робототехника микроконтроллеры


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

> Без описания
ОЛЕГ Супермодератор Post Id



Супермодератор


Сообщений всего: 1732
Дата рег-ции: Нояб. 2008  



Значится так. Улыбка
Собрал я на проводочках схему из статьи ПРОСТОЙ РОБОТ НА МИКРОКОНТРОЛЛЕРЕ (Часть 1) (чтоб не лазать: http://myrobot.ru/stepbystep/r_firstbot1.php), только вместо моторов светики разноцветные (красный типа вперед, желтый назад) привесил в целях экономии шума. Питание от КРЕНа с кондером, 5В.
Пользуюсь АВР Студио и программатором АВР910. Все нормально делается, компилится, прошивается (спасибо Подмигивающий ), НО:
после записи программы вращения моторами туда-сюда из вышеуказанной статьи, светики один раз перемигивают, а потом продолжают гореть все четыре в пол-накала. Замешательство
Как попробовать устранить? Там программа точно рабочая? Или я балбес?

Кстати, когда мы записываем программу- старая стирается? И еще я ГЕКС файл нечаянно первый раз не в Флэш, а в Еепром память записал- это не страшно? Как ее стереть? Впрочем, там он тоже не работал. гы-гы!

Эээ.. попробовал записать программу поворота на необходимый угол- постоянно горят только красные светики, желтые погасли.


Спасибо.
 
 Top
redcat Post Id



Главнокомандующий


Сообщений всего: 387
Дата рег-ции: Янв. 2009  



Попробуй для начала без драйвера моторов собрать, повесь светодиоды через резисторы на порты Меги. Если заработает, значит с МК всё норм. Единственное что светодиод не может "светить в разные стороны" при смене полярности подключения, в смысле что мотор крутит в разные стороны.

При записи во флеш, все знакомые мне программаторы очищают предварительно память. А то что ты залил в еепром никак не должно влиять на работу Меги.
 
 Top
ОЛЕГ Супермодератор Post Id



Супермодератор


Сообщений всего: 1732
Дата рег-ции: Нояб. 2008  



С памятью понял, спасибо, redcat. Улыбка

Драйвер стопудово рабочий. К его работе претензий нет. Светики работают именно "в разные стороны"- они встречно-параллельно подключены через резисторы. Вот и получается, что при смене полярности желтый гаснет, красный загорается.

Какие еще мнения?
 
 Top
ОЛЕГ Супермодератор Post Id



Супермодератор


Сообщений всего: 1732
Дата рег-ции: Нояб. 2008  



Я попробовал напрямую, без драйвера. Прошил мигалку светодиодом- светодиод горит, не мигает.
Как я догадался- в мигалке, где в программе мы конфигурируем порты С- работают С, все другие выключены, где про двигатели- там D, другие выключены.
Но ничего не мигает.
Пробовал и на внешнем кварце, и на внутреннем генераторе- один фиг.
В чем может быть проблема?
 
 Top
Белый Волк Супермодератор Post Id



Супермодератор


Сообщений всего: 648
Дата рег-ции: Февр. 2007  



ОЛЕГ
EEPROM - это энергонезависимая Flash-память микроконтроллера.
При использовании AVRProg и AVR910, в "Advanced" есть флаг (Fuse) EESAVE (могу ошибиться в названии). Когда он установлен, при перепрограммировании микроконтроллера, состояние EEPROM сохраняется. Этот Fuse изначально запрограммирован.

Простейшее использование EEPROM, которое может пригодиться Вам для простого робота - для генерации случайного числа.

Относительно Вашей проблемы:
Если Вы как-либо изменяли код с указанной страницы, выложите конечную версию, которую Вы компилируете.
 
 Top
бот_м_16 Супермодератор Post Id



Супермодератор


Сообщений всего: 1033
Дата рег-ции: Окт. 2008  



рёв в три ручья Светики через дд рёв в три ручья
Программу в студию
 
 Top
ОЛЕГ Супермодератор Post Id



Супермодератор


Сообщений всего: 1732
Дата рег-ции: Нояб. 2008  



Белый Волк, спасибо. Галочка там не стоит. Значит, все в порядке. Улыбка

бот_м_16, спокойно, без истерик. Улыбка
Я все сделал как в статье для того, чтобы не объяснять как там и чего у меня подключено. Устройство служит чисто образовательным целям, а на оплату света у меня скидка 50%. Голливудская улыбка

Программа вот эта. Вот как тут, так в блокнот и вставляю:


/*******************************************************
ПРИМЕР 1 :: ВРАЩЕНИЕ МОТОРАМИ ВПЕРЕД-НАЗАД :: MYROBOT.RU
********************************************************/

#include <avr/io.h>

/***************** Функция задержки ****************/
void delay(unsigned short ms) // Минимальная задержка с кварцем 8 МГц - 1 мс
{
unsigned short i, j, k; // объявляем переменные

for (i=0; i<ms; i++) // главный цикл формирования задержки
for (j=0; j<185; j++) // вложенный цикл формирования задержки
k++; // произвольное действие
}
/****************************************************/


int main(void) // начало основной программы
{

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

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

// ---------- вращаем моторы вперед 1 сек ----------

PORTC |= _BV(PC1); // установить "1" на линии 1 порта C
PORTC &= ~_BV(PC2); // установить "0" на линии 2 порта C
PORTC |= _BV(PC3); // установить "1" на линии 3 порта C
PORTC &= ~_BV(PC4); // установить "0" на линии 4 порта C

delay(1000); // ждем 1 сек.
// -------------------------------- ------------------


// ---------- вращаем моторы назад 1 сек ----------

PORTC &= ~_BV(PC1); // установить "0" на линии 1 порта C
PORTC |= _BV(PC2); // установить "1" на линии 2 порта C
PORTC &= ~_BV(PC3); // установить "0" на линии 3 порта C
PORTC |= _BV(PC4); // установить "1" на линии 4 порта C

delay(1000); // ждем 1 сек.
// -------------------------------- ------------------


} // закрывающая скобка бесконечного цикла

} // закрывающая скобка основной программы
 
 Top
бот_м_16 Супермодератор Post Id



Супермодератор


Сообщений всего: 1033
Дата рег-ции: Окт. 2008  



Во первых такую зпдержку делать не спортивно!!! Ухмылка
Лучше на таймере 0 меге 8 он самый простой-один режим нормал
Для задержки -
прочти DS Голливудская улыбка
посчитай период переполнения таймера - T=M(Nmax-N0)/Fтакт
где
M предделитель
Nmax - максимальное значение таймера +1(=256 для таймера 0)
N0-начальное значение таймера
Fтакт - тактовая частота мк
зная какой флаг устанавливается по переполнению счётного регистра в регистре TIFR (см DS)
от туда же узнаём что пока не произошло переполнение флаг =0
ну и всё - установился флаг переключаем ногу и сбрасываем флаг Подмигивающий
(Добавление)
ЗЫ
Хорошая подпись! Помираю со смеху
 
 Top
ОЛЕГ Супермодератор Post Id



Супермодератор


Сообщений всего: 1732
Дата рег-ции: Нояб. 2008  



бот_м_16, вопрос стоит несколько иначе. Пока что я хочу, чтобы у меня просто ЗАРАБОТАЛО. До мастера спорта мне ооочень далеко Улыбка , но, по крайней мере, я буду знать, что аппарат рабочий.

Программа, которую я привел, рабочая? С чем может быть проблема? Что мне проверить?
 
 Top
бот_м_16 Супермодератор Post Id



Супермодератор


Сообщений всего: 1033
Дата рег-ции: Окт. 2008  



это не мастер спорта а граматный подход к решению задачи! Улыбка
Качни лучше кодвижен для начало самое оно!
ЗЫ
На генератор начального кода не надеится а делать всё обдуманно !!
 
 Top
redcat Post Id



Главнокомандующий


Сообщений всего: 387
Дата рег-ции: Янв. 2009  



чтобы заработало сделай такую программу -

#include <avr/io.h>
#include <util/delay.h>


int main(void)
{

DDRC = 0xff;

while(1) {

PORTC |= _BV(PC1);

_delay_ms(100);

PORTC &= ~_BV(PC1);

_delay_ms(100);

}

}



Светодиод подключи через резистор ~300оМ к выводу 1 порта С, второй вывод светодиода на массу.
С этой программой он должен быстро мигать, что и будет говорить о работоспособности.
 
 Top
бот_м_16 Супермодератор Post Id



Супермодератор


Сообщений всего: 1033
Дата рег-ции: Окт. 2008  



лучше PORTC^=1<<1;
это понятний и писать меньше Подшучивать, дразнить
 
 Top
ОЛЕГ Супермодератор Post Id



Супермодератор


Сообщений всего: 1732
Дата рег-ции: Нояб. 2008  



Ну вот, вроде как ништяк!
Загрузил программу, предложенную redcat, светик зажегся, но боковым зрением увидел, что он мигает. Навскидку частота около 50Гц (как люминисцентная лампа). Увеличил delay до 1000мс, стал вспыхивать раза 4 в секунду.

У меня реальные сомнения по поводу тактовой частоты! Или все верно?
 
 Top
бот_м_16 Супермодератор Post Id



Супермодератор


Сообщений всего: 1033
Дата рег-ции: Окт. 2008  



FUSE точно не трогал ? Подмигивающий
 
 Top
ОЛЕГ Супермодератор Post Id



Супермодератор


Сообщений всего: 1732
Дата рег-ции: Нояб. 2008  



Да нет, не трогал. Замешательство

Выбрал только в настройках источник тактового сигнала- внешний кварц средней частоты. Ну и Атмега8, соответственно.
Если выставить источником сигнала внутренний генератор 1МГц и прописать задержку 1000 мс, диодик начинает зажигаться чуть дольше (заметно), чем на секунду, ну и гаснуть, соответственно, тоже.

У меня паленый кварц? Грустный
 
 Top
Страниц (2): [1] 2 »
« Программирование микроконтроллеров »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru