Сделал 2 прибора:
1. Переделанный PowerSwitch из ObDev-а (HID, одна нагрузка, вкл/выкл через указанное время и пр.). Сделан на Mega8@12MHz. Работает нормально.
2. Ваттметр для электросети - Mega16@16MHz. Измеряет напряжение, ток, мощности и всё такое. Полностью развязан от сети трансформаторами. Выводит добро на собственный LCD. Также способен выдавать все результаты измерений на UART по запросу из того же UARTа. Запрос - 1 байт, ответ (результаты) - 15 байт без каких-либо шифров, CRC, подтверждений и прочих заморочек. Параметры обмена по UART - 38400, 8N1. Проверял обмен через MAX232 и обычный COM-порт компа. Всё прекрасно.
Теперь надо связать эти 2 схемы в одну, чтобы данные измерений уходили в комп по USB. Добавил работу с UART - как у японца - http://www.recursion.jp/avrcdc/cdc-232.html
CDC не делал, обмен идёт по собственному протоколу (в рамках HID). Прерывание TXCIE (передача) убрал (оно мне не нужно, в ваттметр всегда отсылается только 1 байт запроса), увеличил буфер приёма до 16 байт (у японца - 8 байт).
Контроль целостности данных ваттметра только по длине - я должен получить 15 байт.
Проблема в том, что данные часто приходят "порченные":
1. Когда использовал прерывание UART по приходу байта (знаю, что в ObDev это нехорошо) - получал "пакеты" - 12, 2, 15 байт. Т.е. годной оказывалась одна посылка из 3-х.
2. Когда работаю с UART опросом (как японец) - ещё хуже - идут пакеты примерно 2, 5, 9, 12, 15 байт. Потерь уже пятая часть.
Скорость UARTа менять пока не пытался.
Можно ли как-то это дело поправить? Или только ставить "железный" USB контроллер?
ЗЫ
Есть USB контроллер PDIUSBD12D, и небольшой опыт работы с ним тоже есть
