роботы
робототехника
микроконтроллеры
Главная
Как сделать робота
Новости
Спорт
Статьи
Wiki
Форум
Downloads
Ссылки
Контакты  


 Страниц (6): « 1 2 3 4 5 [6]   

> Без описания
Andrey 2004
Отправлено: 27 Марта, 2019 - 21:26:23
Post Id



Капитан


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





Хорошо, спасибо, не знал.
 
 Top
Predator Супермодератор
Отправлено: 27 Марта, 2019 - 21:37:35
Post Id


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


Сообщений всего: 1232
Дата рег-ции: Июль 2012  





опыт приходит сразу после того, как был нужен.
 
 Top
Andrey 2004
Отправлено: 27 Марта, 2019 - 21:40:30
Post Id



Капитан


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





Действительно Улыбка .
 
 Top
Andrey 2004
Отправлено: 14 Апреля, 2019 - 19:44:10
Post Id



Капитан


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





Здравствуйте, тут для того чтобы доделать мой проект, желателен MCP4013T-103E/CH, Цифровой потенциометр, может есть у кого нибудь какие-нибудь наработки по нему?
Работал кто-нибудь с ним? Зашел в даташит-ничего не понял(
Если работали, то буду очень признателен если сможете скинуть мне кусок кода с настройкой. Мне бы посмотреть пример, а потом сам напишу этот код под себя, ну а если код не найдете, то буду благодарен за любые разъяснения, (желательно на пальцах).В интернете инфы про него мало, а та инфа которая есть, на языке ардуино.

(Отредактировано автором: 14 Апреля, 2019 - 19:45:24)

 
 Top
Predator Супермодератор
Отправлено: 15 Апреля, 2019 - 00:22:31
Post Id


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


Сообщений всего: 1232
Дата рег-ции: Июль 2012  





две ноги: CS и U/D
CS - стоит в 1 (его естественное состояние)

Выставляете на U/D направление
Выставляете CS в 0
передергиваете U/D (0->1->0) столько раз, сколько нужно шагов.
Выставляете CS в 1.
 
 Top
Andrey 2004
Отправлено: 18 Апреля, 2019 - 15:24:14
Post Id



Капитан


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





Благодарю, будет время разберусь до конца.
А я тут опять "накодил" , написал я программу, проверил на железе, все работает.
Решил ее оптимизировать слегка, и вот что написал:

CODE:
#define F_CPU 1000000UL

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
int M,A,B,H,u,p,F;

// кнопка "меню"
ISR(INT1_vect)
{

PORTB|=(1<<0);
_delay_ms(50);
PORTB &=~(1<<0);

if (~PIND&(1<<3))// если кнопка"старт" нажато то флаг ставим в "1"
{

H=1;// сам флаг
u=0;// флаг устанавливаем в ноль чтобы обнуить Т1 и А
}
}
//------------------------------------------

// счетчик времени работы двигателя
ISR(TIMER1_OVF_vect)
{
A++;
TCNT1=32768;//тут надо подгадать под 10 сек.
}
//------------------------------------------

// кнопка "меню"
ISR(TIMER0_OVF_vect)
{
if (~PIND & (1<<1))
{


_delay_ms(250);

if (~PIND & (1<<1))
{
M++;
PORTB|=(1<<0);
_delay_ms(50);
PORTB&=~(1<<0);

}
if (M > 2)
{
M = 0;
}
}
}
//------------------------------------------

// кнопка"-" и "+"
ISR(TIMER2_OVF_vect)
{
//----------------------------------------

//-----------------------------------------
if (~PIND &(1<<2))
{
if (M==1)
{
if (B!=0)
{
PORTB|=(1<<0);
_delay_ms(50);
PORTB &=~(1<<0);
B--;
}
}

else if (M==2)
{
if (F!=0)
{
PORTB|=(1<<0);
_delay_ms(50);
PORTB &=~(1<<0);
F--;
}
}
}
//------------------------------------
if (~PIND &(1<<0))
{
if (M==1)
{
PORTB|=(1<<0);
_delay_ms(50);
PORTB &=~(1<<0);
B++;
}
else if (M==2)
{
PORTB|=(1<<0);
_delay_ms(50);
PORTB &=~(1<<0);
F++;
}
//-----------------------------------

//---------------------------------------------
}

}
//------------------------------------------
int main(void)
{
//-----------------------
DDRB=0xff;
PORTB=0x00;
DDRD=0x00;
//-----------------------
TCCR1B|=(1<<1);//Предделитель = 8
TCCR0|=(1<<0);//Предделитель = 1
TCCR2|=(1<<0);//Предделитель = 1

TIMSK|=(1<<TOIE0);//Разрешить прерывание по переполнению таймера 0
TIMSK|=(1<<TOIE1);//Разрешить прерывание по переполнению таймера 1
TIMSK|=(1<<TOIE2);//Разрешить прерывание по переполнению таймера 2

TCNT2=200;//Начальное значение таймера 2
TCNT0=200;//Начальное значение таймера 0
TCNT1=32768;//Начальное значение таймера 1
//------------------------------
sei();//Разрешить прерывания
//------------------------------
GICR |=(1<<7);// Разрешаем прерывание INT1
MCUCR =0b00000000;// Генерация сигнала при низком уровне на ножке PD3
//------------------------------
while(1)
{

if (H==1)// проверка: стоит ли флаг
{
if (u==0)// переменная которая обнуляет значен. Т1 и переменной А
{
TCNT1=0;//тут надо додгадать под 10 сек.
A=0;//обнуление
u=1;//ставим флаг в "1", теперь пока двиг. не остановится мы в этот код не попадем
}

if (A==B)// если А (переменная которая изменяется при переполнении Т1) сравняется с В (выставленная пользователем переменная) то двиг. остановится и мы обнулим флаг
{
PORTB &=~((1<<1)|(1<<2));// остан. двиг.
H=0;// т е если двигатель остановился то выходим из функции
u=0;// если
}
else
{
PORTB|=((1<<1)|(1<<2));// если А не равно В то крутим двиг.
}
}

}
}

(Добавление)
изначально у меня в этой программе опрос 3ей кнопки был в основном цикле:
CODE:
while(1)
{


if (~PIND&(1<<3))// если кнопка"старт" нажато то флаг ставим в "1"
{
PORTB|=(1<<0);
_delay_ms(50);
PORTB &=~(1<<0);
if (~PIND&(1<<3))
{
H=1;// сам флаг
u=0;// флаг устанавливаем в ноль чтобы обнуить Т1 и А
}
}

if (H==1)// проверка: стоит ли флаг
{
if (u==0)// переменная которая обнуляет значен. Т1 и переменной А
{
TCNT1=0;//тут надо додгадать под 10 сек.
A=0;//обнуление
u=1;//ставим флаг в "1", теперь пока двиг. не остановится мы в этот код не попадем
}

if (A==B)// если А (переменная которая изменяется при переполнении Т1) сравняется с В (выставленная пользователем переменная) то двиг. остановится и мы обнулим флаг
{
PORTB &=~((1<<1)|(1<<2));// остан. двиг.
H=0;// т е если двигатель остановился то выходим из функции
u=0;// если
}
else
{
PORTB|=((1<<1)|(1<<2));// если А не равно В то крутим двиг.
}
}

}

Но в процессе оптимизации решил что было бы неплохо перенести тот самый опрос кнопки во внешнее прерывание... Не покатило... Сижу мучаюсь, ничего понять не могу компилятор
говорит что все нормально... Вроде работаю в прерывании я только с переменными, че не так Замешательство
Может есть правило о котором я и не догадываюсь??
Надеюсь на вашу помощь. (в саму программу вникать не обязательно, тк даже я там путаюсь немного, главное дайте понять почему мой "оптимизированный" вариант с опросом кнопки в прерывании INT1 не работает).
 
 Top
Predator Супермодератор
Отправлено: 18 Апреля, 2019 - 23:20:12
Post Id


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


Сообщений всего: 1232
Дата рег-ции: Июль 2012  





что-то я не понял вашей затеи с таймерами и кнопками.
можно-же по одному таймеру прочитать весь порт D, и разобрать какие там кнопки нажаты.
 
 Top
Страниц (6): « 1 2 3 4 5 [6]
« С чего начать? »


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





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown