Добавлю результаты своих экспериментов:
1. По умолчанию, в качестве тестового сообщения отлично отправляются бродкасты, но не идут директ команды (ошибка W1). Если я прав, дело в этом (это тянется еще от поляков):
библтотека avclandrv.cpp
...// Slave address = head unit (HU).
send12BitWord(slaveAddress);
send1BitWord(_parityBit);
if (!handleAcknowledge()){
AVC_OUT_DIS;
SREG = oldSREG;
return 1;
}
чуть ниже
...
bool AVCLanDrv::handleAcknowledge (void){
if (broadcast == AVC_MSG_BROADCAST){
// Acknowledge broadcast
send1BitWord(0);
return true;
}
// Return acknowledge bit.
return readAcknowledge();
}
Видим, что true будет только для бродкаста, а так как директ не описан - то соответственно получаем ошибку.
Исправляем, добавив секцию (перед // Return acknowledge bit):
if (broadcast == AVC_MSG_DIRECT){
// Acknowledge.
send1BitWord(1);
return true;
}
Все, больше ошибки нет!
Если у Вас большое количество ошибок - уберите резистор "перемычку" с шины (120 Ом). Чтение резко улучшится! Проверял в адаптере с 2 микросхемами.
На Харриере к удивлению совсем отказался работать адаптер на 2 микросхемах (много ошибок по чтению), но отлично заработал на ST845 - обычно все наоборот. Возможно, у меня просто провода длинные...
Если виснет после подключения к машине или даже "на столе" (выводит часть надписи в монитор и все...) - вы запитали адаптер от ардуины или неверно сделали развязку по питанию.
Решение - добавить внешний преобразователь 7508, на него подать 12в, с выхода 8в подать на Vin , с +5 запитать адаптер. Так точно ничего не зависает.
По поводу библиотеки - я прав? А то я пока еще совсем начинающий...
Еще есть идея - использовать платку ардуино - идея хорошая, но вот ИДЕ - наверное плохая. Если переписать код на нормальный компилятор - ведь отличие на 90% только в синтаксисе - и итоговый код уменьшится и быстродействие возрастет - Ардуино ИДЕ генерит "мусорный" код там огромное количество защит от дурака).