Буратино 0 21 февраля, 2010 Опубликовано 21 февраля, 2010 (изменено) · Жалоба MC3PHAC PC Master Software Communication Protoсol Пробую связаться с MC3PHAC на скорости 9600 через UART микроконтроллера ATMega88. Отправляю и получаю пакеты с данными. Identification_MC3PHAC(), проходит в соответствии с информацией . Дальше все не так. На команду cmd_RESET, процессор MC3PHAC ничего не выдает. На последующие команды присылает "2B 00 00". Возможно это и правильно, но в ответ на команду запуска двигателя приходит "2B 85 7B" :( Что посоветуете? Спасибо! Вот код (IAR C/C++ Compiler for AVR 5.11B/W32 (5.11.2.5)): void Identification_MC3PHAC() { unsigned char i,j; unsigned char Test_Link1[] = {0x2B,0xC0, 0x40}; unsigned char Test_Link2[] = {0x2B,0xC8, 0x38}; for (j=0; j<3;j++) { for (i=0;i<countof(Test_Link1);i++) { Transmit_Byte(Test_Link1[i]); } } for (i=0;i<countof(Test_Link2);i++) { Transmit_Byte(Test_Link2[i]); } } void MC3PHAC_Message_Send(const unsigned char * msg, unsigned char len) { unsigned char CRC = 0; unsigned char START_SYMBOL = 0x2B; Transmit_Byte(START_SYMBOL); while(len) { Transmit_Byte(*msg); CRC += *msg++; len--; } Transmit_Byte((unsigned char)(256-CRC)); Delay_mSeconds(10); } unsigned char const cmd_RESET[5] = {0xE3, 0x10, 0x00, 0x30, 0x00}; unsigned char const cmd_PPWM[5] = {0xE3, 0x10, 0x00, 0x5C, 0x00}; unsigned char const cmd_DEADT[5] = {0xE3, 0x00, 0x36, 0x15, 0x00}; unsigned char const cmd_ACB[5] = {0xE3, 0x10, 0x00, 0x61, 0x00}; unsigned char const cmd_ACC[5] = {0xE4, 0x00, 0x60, 0x7F, 0xFF}; unsigned char const cmd_ACF[5] = {0xE4, 0x00, 0x62, 0x7F, 0xFF}; unsigned char const cmd_FPWM[5] = {0xE3, 0x10, 0x00, 0x44, 0x00}; unsigned char const cmd_VBOOST[5] = {0xE3, 0x00, 0x6C, 0x05, 0x00}; unsigned char const cmd_MODIN[5] = {0xE3, 0x00, 0x75, 0xFF, 0x00}; unsigned char const cmd_FTOUT[5] = {0xE4, 0x00, 0x6A, 0x00, 0x14}; unsigned char const cmd_VBDEC[5] = {0xE4, 0x00, 0xC9, 0x01, 0x70}; unsigned char const cmd_VBRAKE[5] = {0xE4, 0x00, 0x64, 0x01, 0xE0}; unsigned char const cmd_VBROWN[5] = {0xE4, 0x00, 0x66, 0x00, 0xA0}; unsigned char const cmd_VBOVR[5] = {0xE4, 0x00, 0x68, 0x01, 0xE0}; unsigned char const cmd_FORW[5] = {0xE3, 0x10, 0x00, 0x10, 0x00}; unsigned char const cmd_REW[5] = {0xE3, 0x10, 0x00, 0x11, 0x00}; unsigned char const cmd_STOP[5] = {0xE3, 0x10, 0x00, 0x20, 0x00}; void Init_MC3PHAC() { MC3PHAC_Message_Send(cmd_RESET, sizeof(cmd_RESET)); MC3PHAC_Message_Send(cmd_PPWM, sizeof(cmd_PPWM)); MC3PHAC_Message_Send(cmd_DEADT, sizeof(cmd_DEADT)); MC3PHAC_Message_Send(cmd_ACB, sizeof(cmd_ACB)); MC3PHAC_Message_Send(cmd_ACF, sizeof(cmd_ACF)); MC3PHAC_Message_Send(cmd_FPWM, sizeof(cmd_FPWM)); MC3PHAC_Message_Send(cmd_VBOOST, sizeof(cmd_FPWM)); MC3PHAC_Message_Send(cmd_MODIN, sizeof(cmd_MODIN)); MC3PHAC_Message_Send(cmd_FTOUT, sizeof(cmd_FTOUT)); MC3PHAC_Message_Send(cmd_VBDEC, sizeof(cmd_VBDEC)); MC3PHAC_Message_Send(cmd_VBRAKE, sizeof(cmd_VBRAKE)); MC3PHAC_Message_Send(cmd_VBROWN, sizeof(cmd_VBROWN)); MC3PHAC_Message_Send(cmd_VBOVR, sizeof(cmd_VBOVR)); } main(void) { ... Identification_MC3PHAC(); Delay_mSeconds(100); Init_MC3PHAC(); Delay_Seconds(1); MC3PHAC_Message_Send(cmd_FORW, sizeof(cmd_FORW)); //Старт двигателя ... } Изменено 21 февраля, 2010 пользователем Буратино Оформление кода Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 21 февраля, 2010 Опубликовано 21 февраля, 2010 · Жалоба На команду cmd_RESET, процессор MC3PHAC ничего не выдает. На сброс он и не должен откликаться. Все в порядке. На последующие команды присылает "2B 00 00". Дык Вы ж ничего не читаете оттуда. Прочитайте - увидите цирк, как при записи размер значения надо соблюдать, а при чтении - оне всегда 16 битные, что для readvar8, что для readvar16. И при 8-разрядных в старшем байте будет всякая чушь. Впрочем, это было давно, могу чего-то перепутать.. в ответ на команду запуска двигателя приходит "2B 85 7B" :( Дык ноль лишний вроде как в команде(unsigned char const cmd_FORW[5] = {0xE3, 0x10, 0x00, 0x10, 0x00}; ) :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Буратино 0 21 февраля, 2010 Опубликовано 21 февраля, 2010 · Жалоба Да, спасибо разобрался. Нужно читать байты статуса и сетапа. Там в битах вся инфа. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться