HELP!!! Всё зашил, а не работает.
|
|
FireFly | Дата: Пятница, 06.06.2008, 00:12 | Сообщение # 31 |
Зарегистрирован 04.04.2008
Группа: Модераторы
Сообщений: 196
Город: Kamyshin
Статус: Offline
| Тэкс, по порядку резисторы на линиях управления драйвером спасут МК от возможных неприятностей со стороны драйвера (мало ли - прошьет его родимого или еще чего) + резистор сам по себе еще и простой фильтр. А так конечно все работает... пока Насчет кондера по питанию движков, в принципе можно и без него если питаешься от отдельного источника, но с ним будет лучше - там то же питание просаживается и кондер это дело поправит - движки будут ровно работать. гасящие кондеры я и имел в виду, просто многие про них либо не знают, либо пренебрегают (я там попутал - параллельно ) , а потом удивляются, что робот себя ведет как то не так как задумано - там помеха фигачит о го-го, я еще провода моторные пропускаю через ферритовое кольцо (2-5 витков) - дополнительно помеху снимает. Насчет вольтажа Л-ки - почитай даташит, там написано - 4.5 V to 36 V, но ИМХО лучше всего логику микрухи питать таки от 5 вольт, а на питание двигла уже скоа тебе надо ( до 36 вольт)
Robozone
|
|
| |
BORN | Дата: Пятница, 06.06.2008, 17:30 | Сообщение # 32 |
Зарегистрирован 25.05.2008
Группа: Новички
Сообщений: 16
Город: Минск
Статус: Offline
| Не по параметрам L293D от 5 - 36 В, мк от 4,5 - 5,5 В. Питания для испытаний я вообще даже брал не от батареек а от источника ХОРОШЕГО питания, с регулятарам по вольтажу. Но меня интересует почему если не припаивать не датчики не диоды, а оставить их пустыми, то моторчики крутятся, ведь на выходе нету логической 1, даже если допустить что потанциальная единица так работает, то при замыкании на минус, то там точно логический 0, но моторы работают.
|
|
| |
Space | Дата: Пятница, 06.06.2008, 18:20 | Сообщение # 33 |
Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
| это программа такая. я когда с ней работал у меня одна серва крутилась когда не было сигнала ни от одного из датчиков.
|
|
| |
FireFly | Дата: Суббота, 07.06.2008, 01:55 | Сообщение # 34 |
Зарегистрирован 04.04.2008
Группа: Модераторы
Сообщений: 196
Город: Kamyshin
Статус: Offline
| Quote (BORN) Не по параметрам L293D от 5 - 36 В, мк от 4,5 - 5,5 В. Питания для испытаний я вообще даже брал не от батареек а от источника ХОРОШЕГО питания, с регулятарам по вольтажу. Но меня интересует почему если не припаивать не датчики не диоды, а оставить их пустыми, то моторчики крутятся, ведь на выходе нету логической 1, даже если допустить что потанциальная единица так работает, то при замыкании на минус, то там точно логический 0, но моторы работают. Ладно опустим все остальное, но насчет стабилизатора однозначно фу! Понимаешь... ну не работает он нормально без обвески... не работает и все тут, и это не я придумал, а разработчики сего девайса... что бы ты на него не подавал (хоть супер хорошее питание) на выходе получишь каку... у него обязательный минимум обвеса таки должон быть - читай даташит Из моего опыта самопроизвольных телодвижений железа (каких привидений я ловил) 1. "микросопли" при пайке 2. помехи от двигателей (как лечится написал выше) 3. токопроводящий... мать его флюс... ну попался как то раз гадина такая... башку чуть не сломал... 4. крайне хреновая разводка платы - наводящиеся помехи от соседних токопроводящих дорожек 5. лажа при разводке платы (пиво иногда зло) 6. лажа в прошивке В принципе можно еще десяток косяков вспомнить, но опять же... если бы схема у тебя была построена правильно, была прописана работающая прошивка (только точно работающая), то причину твоих неприятностей искать было бы проще а так.... остается сказать ХЗ че у тя там происходит....128 вариантов
Robozone
|
|
| |
BORN | Дата: Суббота, 07.06.2008, 14:22 | Сообщение # 35 |
Зарегистрирован 25.05.2008
Группа: Новички
Сообщений: 16
Город: Минск
Статус: Offline
| Самая подхъодящяя причина это прошивка, всё остальное отменяется, Нашь вилики зубилограф (осцилограф), показывает нормальные параметры, и с ним спорить мне не хочется.
|
|
| |
Space | Дата: Воскресенье, 08.06.2008, 21:29 | Сообщение # 36 |
Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
| Можешь попробовать эту. Тоже работает как и предыдущая, но без ньюансов. Работу программы на видео смотри тут Но это для мк ATmega16 надеюсь сообразишь, что надо изменить для ATmega8. Code // Программа следования по линии для Проекта мобильного робота "R1-B1" // Автор Space: // -мк ATmega16 // -используется кварц на 8мГц // -компилятор WinAVR V2.0.5 // Программа 2008 для робота R1-B1 - www.robptsspace.ucoz.ru //------------------------------------------------------------------------ #include <avr/io.h> #define bit_is_clear(sfr, bit) \ (!(sfr & _BV(bit))) #define bit_is_set(sfr, bit) (sfr & _BV(bit)) // назначение определений для танкового привода #define OUT PORTA #define MOTOR_FR PA0 // вперед-вправо #define MOTOR_BR PA1 // назад-вправо #define MOTOR_BL PA2 // назад-влево #define MOTOR_FL PA3 // вперед-влево
#define IN PIND #define LIGHT_R PD0 // правый фотодиод #define LIGHT_L PD1 // левый фотодиод #define LED PD4 // светодиод
enum {STOP, F, FR, FL};
//------------------------------------------------------------------------------ // Задержка t х 10ms //------------------------------------------------------------------------------ //#define F_CPU 8000000 #define K_DELAY_10ms F_CPU/600 void Delay_10ms(unsigned char t) { if (t==0) return; unsigned int i; while (t--) for(i=0;i<K_DELAY_10ms; i++); }
//------------------------------------------------------------------------------ // Включение комбинации моторов для движения в заданном направлении //------------------------------------------------------------------------------ void go(unsigned char direction){
switch (direction) { case STOP: cbi(OUT, MOTOR_FR); cbi(OUT, MOTOR_BR); cbi(OUT, MOTOR_BL); cbi(OUT, MOTOR_FL); break;
case F: sbi(OUT, MOTOR_FR); cbi(OUT, MOTOR_BR); cbi(OUT, MOTOR_BL); sbi(OUT, MOTOR_FL); break;
case FR: cbi(OUT, MOTOR_FR); cbi(OUT, MOTOR_BR); cbi(OUT, MOTOR_BL); sbi(OUT, MOTOR_FL); break;
case FL: sbi(OUT, MOTOR_FR); cbi(OUT, MOTOR_BR); cbi(OUT, MOTOR_BL); cbi(OUT, MOTOR_FL); break;
} }
//------------------------------------------------------------------------------ // "STOP", ЕСЛИ НЕТ СИГНАЛА //------------------------------------------------------------------------------ unsigned char walk(void){ // нет сигнала ни от одного из датчиков освещенности while((bit_is_set(IN, LIGHT_R)) && (bit_is_set(IN, LIGHT_L))){ go(STOP);
cbi(PORTD, LED); // зажигаем светодиод на PD4 Delay_10ms(125); // движемся в этом направлении 2.5 сек sbi(PORTD, LED); // гасим светодиод на PD4 Delay_10ms(125); // движемся в этом направлении 2.5 сек } // этот цикл организует движение на свет, пока // есть сигнал хотя бы от одного из датчиков освещенности while((bit_is_clear(IN, LIGHT_R)) || (bit_is_clear(IN, LIGHT_L))){ if((bit_is_clear(IN, LIGHT_R)) && (bit_is_clear(IN, LIGHT_L))) go(F); else if(bit_is_clear(IN, LIGHT_R)) go(FR); else if(bit_is_clear(IN, LIGHT_L)) go(FL);
}
return(0); }
//------------------------------------------------------------------------------ // Главная программа //------------------------------------------------------------------------------ int main(void) {
DDRA = 0xff; // назначаем все линии порта A на выход PORTA = 0x00; // и устанавливаем на них низкий уровень
DDRD = 0x10; // назначаем все линии порта D на вход, кроме PD4 PORTD = 0xef; // подключаем внутренние нагрузочные резисторы, кроме PD4
// Задержка на старте 5 сек // чтобы успеть отбежать в сторону :)
// для подсчета числа миганий в цикле unsigned char i;
for (i=0;i<5;i++){ // Подмигиваем пять раз cbi(PORTD, LED); // Зажигаем LED Delay_10ms(250); // пауза sbi(PORTD, LED); // гасим LED Delay_10ms(250); // пауза }
// запускаем главный цикл while(1) walk();
}
}
|
|
| |
FireFly | Дата: Понедельник, 09.06.2008, 02:43 | Сообщение # 37 |
Зарегистрирован 04.04.2008
Группа: Модераторы
Сообщений: 196
Город: Kamyshin
Статус: Offline
| Quote Самая подхъодящяя причина это прошивка, всё остальное отменяется, Нашь вилики зубилограф (осцилограф), показывает нормальные параметры, и с ним спорить мне не хочется. ОК! осцил проявит истину однозначно ждем результатов
Robozone
|
|
| |
BORN | Дата: Понедельник, 09.06.2008, 13:41 | Сообщение # 38 |
Зарегистрирован 25.05.2008
Группа: Новички
Сообщений: 16
Город: Минск
Статус: Offline
| ругатся, хочется, неполучается у меня откомпилировать код, поменял makefile под atmega8 донастроил пару пораметров как надо, кое что просматрел, говорит еррор и компилировать отказывается Добавлено (09.06.2008, 13:41) ---------------------------------------------
Code DDRD = 0x10; // назначаем все линии порта D на вход, кроме PD4 PORTD = 0xef; // подключаем внутренние нагрузочные резисторы, кроме PD4 Как этот код преобразовать под другой порт ?? Мот у кого есть таблица какая ?? А то вроде откомпилировать удалось и славо богу мозг сломался, больше методом тыка не удаётся...
|
|
| |
Space | Дата: Понедельник, 09.06.2008, 15:03 | Сообщение # 39 |
Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
| Code PC порт 0 0x01 0xFE 1 0x02 0xFD 2 0x04 0xFB 3 0x08 0xF7 4 0x10 0xEF 5 0x20 0xDF 6 0x40 0xBF 7 0x80 0x7F для других портов тоже самое. а какой там у тебя компилятор. Если не WinAVR. то скомпилировать и не получится. Нужен именно он
|
|
| |
|