L293D 74HC595

Нет ответов
DIGIUS
Offline
Зарегистрирован: 17.09.2015

После несложных манипуляций с подключением библиотеки Shift595 и небольного редактирования библиотеки AccelStepper была переписана функция setOutputPins.

На входе в функцию setOutputPins  приходит это: 0b0101 (что в дальнейшем летит в регистр и включает соответственно указанные ноги).

 

До редактирования:

void AccelStepper::setOutputPins(uint8_t mask)
{
    uint8_t numpins = 2;
    if (_interface == FULL4WIRE || _interface == HALF4WIRE)
	numpins = 4;
    else if (_interface == FULL3WIRE || _interface == HALF3WIRE)
	numpins = 3;
    uint8_t i;
    for (i = 0; i < numpins; i++)
	digitalWrite(_pin[i], (mask & (1 << i)) ? (HIGH ^ _pinInverted[i]) : (LOW ^ _pinInverted[i]));
}

После:

void AccelStepper::setOutputPins(uint8_t mask)
{
    uint8_t numpins = 2;
    if (_interface == FULL4WIRE || _interface == HALF4WIRE)
	numpins = 4;
    else if (_interface == FULL3WIRE || _interface == HALF3WIRE)
	numpins = 3;
    uint8_t i;
    for (i = 0; i < numpins; i++)
	//Shifter.clearRegisters();
	Shifter.setRegisterPin(_pin[i], (mask & (1 << i)) ? (HIGH ^ _pinInverted[i]) : (LOW ^ _pinInverted[i]));
}

Изменение работает и движок крутиться, но только немного не с той скоростью с которой крутился без сдвиговых регистров (медленнее), после изменения скорости вращения двигателя со сдвиговыми регистрами через setMaxSpeed и setAcceleration ничего кроме замедления добиться не получаеться, в чем может быть проблема?