Например TDA7294

Форум РадиоКот • Просмотр темы - таймер и шаговый двигатель
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Ср янв 07, 2026 09:22:02

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: таймер и шаговый двигатель
СообщениеДобавлено: Вт окт 28, 2014 21:20:05 
Прорезались зубы

Карма: -10
Рейтинг сообщений: -20
Зарегистрирован: Пн окт 04, 2010 11:55:41
Сообщений: 226
Рейтинг сообщения: 0
Вечер добрый! Такая проблема- с помощью библиотеки AccelStepper.h управляем шаговым двигателем(крутим с определенной скоростью), одновременно с этим необходимо через 1 сек после начало вращения движка выдать на одном порту лог 1. Как это реализовать не могу понять, голова вскипела, возможно ли это вообще, ибо пока двигатель делает обороты, в loop-е ардуина больше ничего делать не может(я так понял).
Подскажите как написать что-то вроде внешнего таймер, чтобы независимо от loop-а работало.
Буду крайне благодарен за помощь. По идее даже если подскажите на С+, дальше переиначу, там ничего трудного не будет.
кусок кода приложил который крутит движку:
Код:
void goTo()
{ lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Press Select");
 
  if (key == 4) {
        isRun = 1 - isRun;
        if (isRun == 1) { 
          lcd.clear();
          lcd.print("+++ Running +++ ");
          stepper1.runSpeed();
                 
        } else {
          lcd.print("    Stopped     "); 
        }
   
      }
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: таймер и шаговый двигатель
СообщениеДобавлено: Вт окт 28, 2014 21:30:15 
Говорящий с текстолитом
Аватар пользователя

Карма: 8
Рейтинг сообщений: 212
Зарегистрирован: Чт июн 10, 2010 20:11:19
Сообщений: 1525
Рейтинг сообщения: 0
Самое простое - запустить таймер и следить за его переполнениями/сравнениями. Хоть в прерывании, хоть в основном цикле.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: таймер и шаговый двигатель
СообщениеДобавлено: Ср окт 29, 2014 07:35:45 
Прорезались зубы

Карма: -10
Рейтинг сообщений: -20
Зарегистрирован: Пн окт 04, 2010 11:55:41
Сообщений: 226
Рейтинг сообщения: 0
не совсем понимаю его использование, видимо еще дошел... есть вот пример из статьи возился с ним, когда хотел хоть что то понять... но в моем случаем как реализовать тоже, когда функция stepper1.runSpeed() работает?
Код:
#include <mega8.h>
#asm
  .equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd.h>
 unsigned int num; // наша переменная 
// Timer 1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
// Place your code here
  TCNT1H=0;
  TCNT1L=0;
  num++; // инкрементирруем
   
}
// Declare your global variables here
void main(void)
{
PORTB=0x00;
DDRB=0xFF;

PORTC=0x03;
DDRC=0x00;

PORTD=0x00;
DDRD=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 7,813 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x05;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x1E;
OCR1AL=0x85;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x10;

lcd_init(16);

// Global enable interrupts
#asm("sei")

while (1)
  { // Place your code here
  if (num==30) //если 30 сек. "зажигаем" ПОРТ В.0
  PORTB.0=1;
   
  if (num==100) // если num = 100 сек. зануляем num и тушим ПОРТ В.0
  {
    num=0;
    PORTB.0=0;
  }
  // выводим значение переменной на экран
  lcd_gotoxy(0,0); 
  lcd_putchar(num/10+0x30);
  lcd_putchar(num%10+0x30);

  };
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: таймер и шаговый двигатель
СообщениеДобавлено: Ср окт 29, 2014 19:06:56 
Говорящий с текстолитом
Аватар пользователя

Карма: 8
Рейтинг сообщений: 212
Зарегистрирован: Чт июн 10, 2010 20:11:19
Сообщений: 1525
Рейтинг сообщения: 0
Если по первой ссылке по RunSpeed() не обманули, этот метод надо вызывать периодически. В Вашем случае, если прошло меньше 100 секунд (или сколько там?) - вызывать, если больше - не вызывать, да и счетчик тогда можно остановить.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y