Ви не увійшли.
Я правильно понял, все через логическое XOR и в конце, через И ?
Так, щось типу такого:
unsigned char pkt[] =
// 0 1 2 3 4 5 6
{ 0xFF, 0xFF, 0x07, 0x00, 0x07, 0x00, 0x00 }; // cmd STAT, no data
for (int id = 1; id <= 20; ++id) {
pkt[3] = id;
pkt[5] = 0; // zero check_sum_1
pkt[6] = 0; // zero check_sum_2
unsigned char checksum = 0;
for (int i = 2; i < sizeof(pkt); ++i) {
checksum ^= pkt[i];
}
pkt[5] = checksum & 0xFE;
pkt[6] = ~pkt[5] & 0xFE;
send_packet(pkt, sizeof(pkt));
wait_response();
}
Дивний і ненадійний алгоритм контрольної суми, але так написано
check_sum_1 = (N^ID^CMD^data[0]^data[1]^...^data[N-8]) & 0xFE - (N XOR ID XOR CMD XOR data[0] XOR data[1] XOR ... XOR data[N-8]) И 0xFE
сheck_sum_2 = (~check_sum_1) & 0xFE - (~check_sum_1) И 0xFE
Я правильно понял, все через логическое XOR и в конце, через И ?
Протоколы все перепробовал, качал еще пару альтернативных программ
Я би все-таки спробував той протокол, що для A1-16. Тільки не сторонньою програмою, а своєю, щоб гарантовано видавала правильно сформований пакет. Наприклад, STAT для ID 1: 0xFF 0xFF 0x07 0x01 0x07 0x01 0x00. З перебором ID від 1 до 20 і перерахуванням байтів контрольної суми. Також з перебором чотирьох бодрейтів. І дивитись, чи прийде відповідь хоч на один. Всього-то 80 варіантів Ну або впевнетись, що альтернативні програми генерують пакет, відповідний протоколу.
На плате сервопривода, два резистора 1кОм припаяны вместе, отводы распаяны на разные входы микросхемы.
А видно маркування мікросхеми? Чи можна змалювати схему, хоча б частково, куди подається вхід, земля і живлення? Або фото плати?
А він точно з керуванням по послідовному протоколу?
На сайті виробника по назві DM0900 знаходиться два серво:
DM0900 10.5KG Digital Metal Gear Servo
Digital Metal Gear Servo DM0900
Обидва з PWM-керуванням. У маркетологів PWM також вважається "digital"
Може в описі товару тупо переплутали, написавши про послідовну шину. Таке буває.
PWM так же пробовал, результа 0
MG996R - работает норм по ШИМ
https://youtube.com/shorts/umBPXf9SeYQ
Так, програма у вас видає Dynamixel Protocol 1.0.
Ще є Protocol 2.0. А на сторінці товару посилання на даташит для A1-16, де протокол схожий, але несумісний ні з Dynamixel 1.0, ні з 2.0. Кожен виробник модифікує протокол як хоче, аби було несумісно з продукцією конкурентів.
Протоколы все перепробовал, качал еще пару альтернативных программ
Так же, что нашел по примерам ардуино, все глухо.
Теоретично, якщо зі сторони серво відкритий колектор з підтяжкою
Нет подтяжки.
На плате сервопривода, два резистора 1кОм припаяны вместе, отводы распаяны на разные входы микросхемы.
Документ, что прилагается не от него, от похожего
А він точно з керуванням по послідовному протоколу?
На сайті виробника по назві DM0900 знаходиться два серво:
DM0900 10.5KG Digital Metal Gear Servo
Digital Metal Gear Servo DM0900
Обидва з PWM-керуванням. У маркетологів PWM також вважається "digital"
Може в описі товару тупо переплутали, написавши про послідовну шину. Таке буває.
Так, програма у вас видає Dynamixel Protocol 1.0.
Ще є Protocol 2.0. А на сторінці товару посилання на даташит для A1-16, де протокол схожий, але несумісний ні з Dynamixel 1.0, ні з 2.0. Кожен виробник модифікує протокол як хоче, аби було несумісно з продукцією конкурентів.
Готового решения сразу не нашел )
Теоретично, якщо зі сторони серво відкритий колектор з підтяжкою, то одного діода Шотткі з серво на TX має бути достатньо. Принаймні debugWIRE для AVRок у мене так працює без проблем.
Але мені все ж здається, що там не послідовний протокол, а звичайний PWM.
9.6 МГц і фʼюз CKDIV8
9.6 , делитель снят, тоесть на полной скорости
Доречі, в прошивці для Attiny не бачу конфігурування CLKPR. Якщо Attiny працює від внутрішнього осциллятора на 9.6 МГц і фʼюз CKDIV8 не скинуто, то його тактова частота - 1.2 МГц. Один такт - це біля 10% від такту для 115200 бод. Далеко не всякий UART буде нормально працювати при такій похибці.
Не та версія протокола?
Родной бы документ от него, или хотя бы рабочий проект, там бы возможно разобрался бы по командам
Документ, что прилагается не от него, от похожего
https://www.pololu.com/file/0J1212/A1-16_datasheet_20151229.pdf
// Attiny в ролі буфера з відкритим колектором - це сильно
Готового решения сразу не нашел )
Хотя ранее были https://arduino.ua/ru/prod3963-ttlusb-adapter-dlya-ypravleniya-servoprivodom-sovmestima-s-arduino
Ну и на соседних есть, как оказалось https://electroradiogroup.com.ua/ua/p2008450927-adapter-ttlusb-dlya.html
Якщо вірити даташиту зі сторінки цього серво, пакет має бути в форматі:
У вас після хідера 0xFFFF іде 0x01, що не схоже на коректне значення поля size. І двох байтів контрольної суми теж немає.
Не та версія протокола?
// Attiny в ролі буфера з відкритим колектором - це сильно
Покажіть cхему підключення
Прошивка переходника на Attiny13A
.DSEG ; Сегмент ОЗУ
.CSEG
.org 0 ;Задание нулевого адреса старта программы
rjmp reset ;Безусловный переход к метке reset
.org 1
reti ;Prer
.org 2
reti ;Pin Change Interrupt0
.org 3
reti ;timer0_ovf
.org 4
reti ;EEPROM write complete
.org 5
reti ;Analog Comparator Interrupt
.org 6
reti ;timerA;Timer_Counter0A; Compare Match A
.org 7
reti ;Timer_Counter0B; Compare Match B
.org 8
reti ;Watchdog Timeout
.org 9
reti ;conversion;ADC Conversion Complete Handle
reset:
wdr; Reset Watchdog Timer
;ldi r16,24
;out WDTCR, r16;
;ldi r16,12
;out WDTCR, r16;
LDI ZL,Low(SRAM_START) ; Адрес начала ОЗУ в индекс
LDI ZH,High(SRAM_START)
CLR R16 ; Очищаем R16
Flush: ST Z+,R16 ; Сохраняем 0 в ячейку памяти
CPI ZH,High(RAMEND+1) ; Достигли конца оперативки?
BRNE Flush ; Нет? Крутимся дальше!
CPI ZL,Low(RAMEND+1) ; А младший байт достиг конца?
BRNE Flush
CLR ZL ; Очищаем индекс
CLR ZH
LDI ZL, 30 ; Адрес самого старшего регистра
CLR ZH ; А тут у нас будет ноль
DEC ZL ; Уменьшая адрес
ST Z, ZH ; Записываем в регистр 0
BRNE PC-2 ; Пока не перебрали все не успокоились
ldi r16, RAMEND ;Загрузка в регистр r16 адреса верхней границы ОЗУ
out SPL, r16
cbi DDRB, 0
cbi PORTB, 0
cbi DDRB, 1
cbi PORTB, 1
cbi DDRB, 2
cbi PORTB, 2
cbi DDRB, 3
cbi PORTB, 3
cbi DDRB, 4
sbi PORTB, 4
ldi r16,0
main:
sbic PINB,1 ;пропустить если бит в регистре очищен
rjmp t_in_test
sbi DDRB, 0 ; установить
cbi DDRB, 2 ;out очистить
cbr r16, 1 ; очистить бит 0 в r16
rjmp main
t_in_test:
sbrc r16, 0 ; Пропустить если бит 0 в r16 очищен
rjmp rxrid
cbi DDRB, 0 ; очистить
sbr r16, 1 ; Установить бит 0 в r16
nop
nop
nop
nop
rjmp main
rxrid:
sbic PINB,0 ;пропустить если бит в регистре очищен
rjmp rx_test
sbi DDRB, 2 ; установить
cbr r16, 2 ; очистить бит 1 в r16
rjmp main
rx_test:
sbrc r16, 1 ; Пропустить если бит 1 в r16 очищен
rjmp main
cbi DDRB, 2 ; очистить
sbr r16, 2 ; Установить бит 1 в r16
nop
nop
nop
nop
rjmp main
Аналог схемы
https://arduino.ua/files/1_USB-TTL_sch.pdf
Режим сканера, на разных скоростях
Неделю не могу подружить сервопривод с компом.
Покажіть cхему підключення і код керування. Чи відповідає servo ID в коді дійсному ідентифікатору серво? Покажіть дамп трафіку пакетів. Чи видає серво підтвердження прийому пакетів? Чи пробували різні бодрейти UART: 9600, 19200, 57600, 115200?
https://www.youtube.com/watch?v=S0tb3jnfdw4&t=1s тут прекрасно все описано если непонятно и не заработает отпешитесь
На видео сервопривод управляется по ШИМ, а этот по TTL
https://www.youtube.com/watch?v=S0tb3jnfdw4&t=1s тут прекрасно все описано если непонятно и не заработает отпешитесь
Приветствую.
Неделю не могу подружить сервопривод с компом.
Уже и ардуино пробовал, ни как.
Хотя на видео красиво работает
https://youtu.be/_syxCwIINN8?si=Rms5gVFGZDeGqiBT
Есть у кого готовое решение, или хоть наработки ?