Технический форум по робототехнике.
KiCom » 05 ноя 2005, 14:44
Эээ нет, теперь я уже сделаю на МК

.
Это я уже понял, интересно получаеться человек тебе говорит, что тут всего два проводка спаять, и програмки готовые есть. А потом начинет выесняться что не два проводка а 200 да и програмку самому писать надо. Стабильности нет

да еще похоже вчера спалил МК вот теперь думаю идти новый покупать, но точно такого нет, ждать две недели пока его привезут под заказ или купить MEGA8, а при нашем раздолбайстве они хотябы в месяц с заказом уложились.
Сергей » 05 ноя 2005, 14:57
Тогда покупа сразу мегу16 чтоб не парится. Но если бошься опять спалить контроллер то бери мегу8, она подешевле. Могу подкинуть пример управления одной сервой. Сам пользовался, потом достало тк нестабильно у меня работала.
KiCom » 05 ноя 2005, 14:59
Ага подкинь, посмотрю как она работает.
Сергей » 05 ноя 2005, 15:05
Она по внешнему виду мне не очень нравится. Будет свободное время - подкоректирую может.
- Код: Выделить всё • Развернуть
#include <io2313v.h>
#include <macros.h>
void port_init(void);
void timer0_init(void);
void init_devices(void);
void delaysa(unsigned int mks);
unsigned char deltaServo1 = 100;
unsigned int maxServo1 = 4000;
unsigned int minServo1 = 900;
void nomovieServo1(void);
const int period = 30800; //period = 20 ms
int N = 2497; //neutral servo = 1.5 ms
//TIMER0 initialize - prescale:256
// desired value: 200Hz
// actual value: 200,321Hz (0,2%)
void timer0_init(void)
{
TCCR0 = 0x00; //stop timer
TCNT0 = 0x3D; //set count
TCCR0 = 0x04; //start timer
}
#pragma interrupt_handler timer0_ovf_isr:7
void timer0_ovf_isr(void)
{
TCNT0 = 0x3D; //reload counter value
if (PIND==0x04)
forwardServo1(deltaServo1);
if (PIND==0x08)
backwardServo1(deltaServo1);
if((PIND!=0x04)&&(PIND!=0x08))
nomovieServo1();
}
//The first servo
void forwardServo1(unsigned char deltaServo1)
{
if(N<maxServo1)
{
N=N+deltaServo1;
PORTB|=0x10;
delaysa(N);
PORTB&=~0x10;
delaysa(period);
}
}
void backwardServo1(unsigned char deltaServo1)
{
if(N>minServo1)
{
N=N-deltaServo1;
PORTB|=0x10;
delaysa(N);
PORTB&=~0x10;
delaysa(period);
}
}
void nomovieServo1(void)
{
N=N-0;
PORTB|=0x10;
delaysa(N);
PORTB&=~0x10;
delaysa(period);
}
void delaysa(unsigned int mks)
{
while(mks>0)
{
mks--;
}
}
//Init ports
void port_init(void)
{
PORTB = 0x00;
DDRB = 0xFF;
PORTD = 0x0C; // for buttons
DDRD = 0x00;
}
//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
timer0_init();
MCUCR = 0x00;
GIMSK = 0x00;
TIMSK = 0x02;
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
void main(void)
{
init_devices();
while(1);
}
ЗЫ
Там совсем легко можно подправить под любой компилятор. Можно ставить прогу на любой контроллер - только значения поменять не забудь.
Сергей » 06 ноя 2005, 00:50
- Код: Выделить всё • Развернуть
#include <io2313v.h>
#include <macros.h>
void port_init(void);
void init_devices(void);
void delaysa(unsigned int mks);
void forward(unsigned char delta);
void backward(unsigned char delta);
void nomovie(void);
const int period = 30800; //period = 20 ms
int N=2497;//neutral servo = 1.5 ms
unsigned char delta = 20;//skorost` perekladki
void forward(unsigned char delta)
{
if(N<4000){
N=N+delta;
PORTB|=0xFF;
delaysa(N);
PORTB&=~0xFF;
delaysa(period);
}
}
void backward(unsigned char delta1)
{
if(N>900){
N=N-delta;
PORTB|=0xFF;
delaysa(N);
PORTB&=~0xFF;
delaysa(period);
}
}
void nomovie(void)
{
N=N-0;
PORTB|=0xFF;
delaysa(N);
PORTB&=~0xFF;
delaysa(period);
}
void delaysa(unsigned int mks)
{
while(mks>0){
mks--;
}
}
void port_init(void)
{
PORTB = 0x00;
DDRB = 0xFF;
PORTD = 0x0C;// for buttons
DDRD = 0x00;
}
//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
MCUCR = 0x00;
GIMSK = 0x00;
TIMSK = 0x00;
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
main()
{
init_devices();
while(1){
if (PIND==0x08)
forward(delta);
if (PIND==0x04)
backward(delta);
if((PIND!=0x04)&&(PIND!=0x08))
nomovie();
}
return(0);
}
Вот 100% работающий вариант.
Тимофей » 15 ноя 2005, 21:23
Вопросы по сабжу:
1. Александр, в вашем списке стоит 10-проводной шлейф, т.е как я понимаю "лапша" (в магазине мне сказали, и это, кстати, логично

, что шлейф это готовое устройство, с разъемами и т.п), так вот почему именно 10-проводной? на разъеме же в 2 ряда по 5 контактов? и еще - по схеме. их (ряды), как я понимаю по схеме, нужно соединять между собой? тогда опять же - зачем 10-проводной кабель? вообщем, разьясните ламеру, очень прошу.
2. на схеме (с надписью "программатор") - только провод нарисован? т. е выводы контроллера цеплять на контакты кабеля? А нахрена тогда 10 контактный разъем?
3. схемка avr-rs232-pc непосредственно для устройства управления? для уже прошитого чипа?
Кстати, я сейчас купил МК - 120 р. Это норм. цена? Мне просто интересно узнать, сколько я переплатил.
Сергей » 15 ноя 2005, 21:46
Начну с конца. Какой МК ты купил? Ты про AT90S2313? тогда переплатил...
Я хуже некуда ламер

, но шлейв это много провоков аккуратно "склеиных" между собой. Это не готовое устройство. Бывают шлейфы продаются в компьютерных магазинах, там они уже готовые. В Чип и Дип там по метрам отрезают такой шлейф который те нужен.
Можешь использовать и пять проводков. Главное чтобы програмировалось нормально.
KiCom » 16 ноя 2005, 13:17
Ну с сервами кое как вроде разобрался, но там где я изучал небыло примера как посылать в МК числа с СОМ порта, вообще как им управлять? Может какой пример накидаете?
Тимофей » 17 ноя 2005, 17:58
Сергей.
Да, купил AT90S2313. А на сколько, если не секрет?
Что такое шлейф и что такое лапша я хорошо знаю. Наверное, это банальные трения в терминологии. И, подумай сам, обжатые проводки в сист. блоке - это ведь готовое устройство? А по поводу этих самых склееных проводков - я для них другого названия, кроме "лапша" у нас на кружке и не слышал. Важно в данный момент то, что в нашем городе ШЛЕЙФОВ НЕТ. Ужас.
Кварц привезут на неделе. Сегодня надо еще пойти поискать 5-контактный разъем.
Кстати, нашел у себя дома позаимствованную на кружке "макетку" под DIP16 (питание там под них сделано) и под какие-то древние разъемы с множеством контактов, на ней написано 7. 104.090 ИЗМ2. Паять на ней буду. Что это такое, никто не в курсе? Так, для общего развития.
Сергей » 18 ноя 2005, 23:47
Ну я не помню точно сколко стоит 2313.. хотя ща я посмотрю в чеке.(всегда оставляй чек после покупки эл. компонентов - очень удобно потом смотреть).
Так, 2313 я покупал за 90р в Чипе и Дипе, тамже можно приобрести АТмегу8 за 68р. Она пофункциональней будет :)
Так называемую тобой лапшу можешь достать из старых телевизоров, ну и в этом роде.
Плата под 16ног тебе я думаю не пригодится, хотя может и наоборот. Я ведь ее не видел даже)) На 2313 20 ног, на АТмега8 28 ног. А 16 ног небось у какойнить ТиниХХ...
Название платы видимо старое. Это надо смотреть в методичках для кружков, может там есть описание если тебе эт очень нада.
Тимофей » 20 ноя 2005, 22:24
Сергей.
Старые отечественные ТВ врядли подойдут: там у шлейфов другие параметры: шаг и т.д
Плата под 16 ног уже пригодилась:) Она конструктивно "специализирована" по микросхемы dip16 только подводом питания к 8 и 16 ноге. Так что нужно тольк оудалить перемычку и... вуаля!
Кстати, да ЧипДипа мне приблизительно 200 км. ехать, так что, с учетом проезда, я еще и сэкономил:)
Сергей » 21 ноя 2005, 16:50
Я имел ввиду не полностью брать из телека шлейфы, а только провода. А разъемы самому поставть.
Тимофей » 04 янв 2006, 20:10
Купил я сегодня atmega8-8pi (кстати, 2313 у меня называлась at90s2313-10pi, цифра-это частота кварца, как я понимаю?), если она не заработает, Я ПОВЕШУСЬ:evil:
avr123.nm.ru » 04 янв 2006, 20:23
"делай как я" на стр 7 курса - и веревка не понадобится ...
=DeaD= » 05 янв 2006, 00:21
Тимофей писал(а):Купил я сегодня atmega8-8pi (кстати, 2313 у меня называлась at90s2313-10pi, цифра-это частота кварца, как я понимаю?)
Какая цифра? "8pi" или "10pi"? Вроде это какое-то время обращения к памяти, а частоты надо в сводных таблицах или ДШ смотреть, у меги8 максимальная частота 16МГц.