С такими значениями работает и мой SPI как надо.
3250 = 0°
1450 = 180°
Только вот странновато всё это, вы заметели что теперь минимум (3250) то больше чем максимум (1450).
Да и вообще. Что это вдруг нужно слать, настолько длинный импульс, ведь судя по замеренным данным #36 SPI работает довольно быстро, даже быстрей чем родные digitalWrite.
Никак не могу понять, можно ли с помощью 74HC595 управлять яркостью диодов (надо подключить около 30 диодов)
Как я понимаю, с 74HC595 идёт аналоговый сигнал 1 или 0, а надо цифровой 0--255. Уже много пролистал но не нашёл инфы, в статьие http://robocraft.ru/blog/arduino/541.html увидел строку, что на серву через 74HC595 подаётся сигнал в виде 0-255, но видать ещё не дошёл мозгом, как получилось... вообще, это всё таки, возможно?
1. Можно. Но для вашей задачи лучше использовать два вот таких вот драйвера TLC5940NT.
2. 1 или 0 - это как раз цифровой сигнал.
3. 0-255 - это 8 битный ШИМ - цифровое представление аналогового сигнала.
Попробуйте погонять в протеусе
Нашел я настоящий осцилограф и прозвонил то что у меня шлёт ардуина. В итоге добился "методом тыка" того что сервы начали двигаться на заданный угол.
Честно презнаюсь был удивлён когда увидел сигнал идущий с регистра. Да и значения каторые я нашол путём проб в вели меня в звблуждение.
Дапустим, вот эти значения характеризуют максимальный и минимальный импульс:
Дак вот, если я юзаю регистр без SPI (т.е. управляю регистром через digitalWrite(..)), то всё работает идеально.
350 = 0°
2150 = 180°
Но после того как переписал всё на SPI, я получил следущее:
С такими значениями работает и мой SPI как надо.
3250 = 0°
1450 = 180°
Только вот странновато всё это, вы заметели что теперь минимум (3250) то больше чем максимум (1450).
Да и вообще. Что это вдруг нужно слать, настолько длинный импульс, ведь судя по замеренным данным #36 SPI работает довольно быстро, даже быстрей чем родные digitalWrite.
Похоже, у Вас полярность импульса не та. Такое впечатление, что Ваши константы соответствуют не длине импульса, а интервалу между импульсами.
Вот именно что длинне.
#define SERVO_MIN_PULSE 3250 #define SERVO_MAX_PULSE 1450 #define SERVO_REFRESH 20000 // Управляет сервой через SPI void writeToServoSPI(uint8_t pos){ // MIN 3250 // MAX 1450 int imp = map(pos,0,180,SERVO_MIN_PULSE,SERVO_MAX_PULSE); for(int i=0; i<100; i++){ writeMIO(7, HIGH); delayMicroseconds(imp); writeMIO(7, LOW); delayMicroseconds(SERVO_REFRESH-imp); } }может что в эти функциях не так:
// Bit's #define B_SPE 6 #define B_MSTR 4 #define B_SPI2X 0 byte outValue = 0; // Настраиваем мк на рпботу через SPI void initSPI(){ //настраиваем на выход DDRB |= _BV(P_MOSI); DDRB |= _BV(P_SCK); DDRB |= _BV(P_SS); // P_MISO по умолчанию на входе SPCR = (1<<B_SPE)|(1<<B_MSTR); //вкл SPI, ведущий, SPSR |= _BV(B_SPI2X); // частота fck/2 = 16/2 = 8MHz } // Передаём данные и одновременно получаем byte transport(byte in){ PORTB |= _BV(P_SS); // HIGH SPDR = in; while(!(SPSR & _BV(SPIF))); PORTB &= ~_BV(P_SS); // LOW return SPDR; } // Пишим в конкретный пин по SPI в 595 void writeMIO(byte pin, boolean state){ if(state) outValue |= _BV(pin); else outValue &= ~_BV(pin); inValue = transport(outValue); }Доброго времени суток
Никак не могу понять, можно ли с помощью 74HC595 управлять яркостью диодов (надо подключить около 30 диодов)
Как я понимаю, с 74HC595 идёт аналоговый сигнал 1 или 0, а надо цифровой 0--255. Уже много пролистал но не нашёл инфы, в статьие http://robocraft.ru/blog/arduino/541.html увидел строку, что на серву через 74HC595 подаётся сигнал в виде 0-255, но видать ещё не дошёл мозгом, как получилось... вообще, это всё таки, возможно?
тапками не бить плз, как и многие, только начал
1. Можно. Но для вашей задачи лучше использовать два вот таких вот драйвера TLC5940NT.
2. 1 или 0 - это как раз цифровой сигнал.
3. 0-255 - это 8 битный ШИМ - цифровое представление аналогового сигнала.
Сижу, читаю о TLC5940, интересно, но не могу найти у себя в городе их, а уже очень срочно.
с цифровым и ШИМ я понлял, моя ошибка
Поскажите как пойти с 74HC595 всё таки? планировал ещё ULN2003 использовать чтобы не попалить 74HC595.
Если на одном выходе 74HC595 будет не более 3 стандартных светодиодов, то сгореть не должно.
Это не самое простое и быстрое решение в плане ПО.
может есть какие то готовые библиотеки для этого случая с 74HC595
скажите, правильно ли я понимаю, что управляя через 74HC595 сервой, как в этом примере:
http://arduino.ru/forum/programmirovanie/upravlyaem-vsem-s-pomoshchyu-re...
как раз и дописали библиотеку, которая позволяет посылать не только 0 и 1, а 0..255?
Все правильно, только не от 0 до 255, а ШИМ с длительностью импульса от 600 до 2200 микросекунд. Попробуйте поискать похожие готовые проэкты.
может плохо ищу, но за неделю так и не нарыл, тем временем, пора уже собирать. похоже прийдётся использовать меньше выходов :(
Немного перебью разговор, если позволите...
Помогите, как через 74HC595 управлять яркостью диодов, т.е. сделать на выводах ШИМ? не завалялся ли у кого кусочек кода?