usb+ p3
usb- p4
Следующие конфигурации имеют рабочие значения по умолчанию в usbdrv.h. Вам
- обычно не нужно задавать их явно. Только если вы хотите запустить
- драйвер на устройстве, которое еще не поддерживается или с компилятором
- который не поддерживается полностью (например, IAR C) или если вы используете другое
- прерывание, чем INT0, вам может потребоваться определить некоторые из них.
/
/ #define USB_INTR_CFG MCUCR /
/ #define USB_INTR_CFG_SET ((1 << ISC00) | (1 << ISC01)) /
/ #define USB_INTR_CFG_CLR 0 /
/ #define USB_INTR_ENABLE GIMSK /
/ #define USB_INTR_ENABLE_BIT INT0 /
/ #define USB_INTR_PENDING GIFR /
/ #define USB_INTR_PENDING_BIT INTF0 /
/ #define USB_INTR_VECTOR INT0_vect */
Насколько я смог разобраться , по умолчанию на D+ P2 требуется.
Посмотрите файл usbconfig-prototype.h, там описано, как настроить и затем скопировать файл в папку проекта, и переименовать его.
Да, поосторожней с пинами, они здесь без буфера, прям в комп. D+ и D- перепутал, конфликт лог уровней, и , белый дым)))
(Это не 100%, но, возможно)
И чем вам DigiUSB не подходит?
Раз оно работает - так и пользуйтесь
Так она же USB, COM порт не поддерживает
А я программатором (в Windows) могу прошивать только после экспорта бинарного файла из Arduino-IDE.
Ага. Мне эти пляски надоели.
Прошил сабж для интереса на новую дигиспарк, монитор порта не открывается- нет устройства USB. Сколько в описании написано, мне не прочитать. Прошил блинк обратно.
мне нужно, чтобы именно DigiCDC заработала, это промежуточный этап, после станет ясно, куда дальше двигаться
мне кажется не верный путь
такие есть рекомендации по поводу пинов, написано не трогать р3 и р4, а то usb работать не будет
Нумерация пинов:
Цифровые пины - по подписям на плате (без буквы): подадим HIGH на P0: digitalWrite(0, HIGH)
К аналоговым пинам - по номеру вывода АЦП (как на распиновке). Читаем с пина P2: analogRead(1)
Пройдёмся по особенностям пинов:
P0: ничего особенного
P1: подключен светодиод. Пин не может работать в режиме INPUT_PULLUP
P2: ничего особенного
P3: USB пин. Подтянут к VCC резистором на 1.5 кОм
Не трогать этот пин, если нужна работа USB, также на момент загрузки прошивки!
Нет смысла в режиме INPUT_PULLUP
P4: USB пин
Не трогать этот пин, если нужна работа USB, также на момент загрузки прошивки!
P5: на оригинальных платах "отключен" от RST при помощи программатора. На китайских платах - нет. Поэтому:
Не использовать как выход
Не подавать низкий сигнал (МК перезагрузится)
Можно измерять аналоговый сигнал до VCC/2 (до 2.5V при питании от 5V)
Так я ж не говорю, чтоб трогать. Я о том, что по умолчанию в библе PB2 стоит. А надо на PB3 настроить.
Я так понял.
а винда каким драйвером поднимает, стандартно? если да, то у них в драйвере ошибка
Может и ошибка, но по умолчанию эта библа работает от int0.
А это PB2. А PB3 это только PCINT . Т.е надо или пин поменять, или лезть в библиотеку.
Оно конечно интересно, но со временем туго, и нет платы, чтобы проверить.
буду смотреть usbconfig-prototype.h
Есть еще одна мысль: библиотека DigiUSB - рабочая и там тоже есть usbconfig.h.
Идея в том, чтобы сравнить usbconfig.h в DigiUSB и usbconfig.h в DigiCDC.
Думается, что настройки должны быть одинаковыми
Там ещё есть usbboardconfig.h. А лучше бы найти примеры, как люди делают
Сейчас глянул в ядро ATtinyCore /tools/
micronucleus/2.5-az1b/README
Спойлер
"Перепаковано для ATTinyCore 1.5.0 и более поздних версий Спенсом Конде / Аздуино с использованием
бинарных файлов, предоставленных @ArminJo по адресу
https://github.com/ArminJo/DigistumpArduino/archive/1.7.2.tar.gz
Изменения:
- Заменены драйверы DigiUSB и DigiX из пакета 2.0a4, основанные на заявлениях,
что CDC мертв как гвоздь и вряд ли снова будет жить, в то время как DigiUSB
все еще работает. ArminJo удалил их из своего релиза, полагая, что они
не будут использоваться (справедливости ради, документация по библиотекам CDC не
двусмысленна по этому поводу, она везде говорит, что не следует использовать DigiUSB. Но это
было написано в короткий промежуток времени, когда DigiCDC работал, и они просто
не обновлялись с тех пор."
Настораживает
“Но это
было написано в короткий промежуток времени, когда DigiCDC работал,” и отсутствие в сети внятных примеров
Avrdude эту библиотеку использует? У него это слово встречается, может там настроено уже. Мне с телефона не проверить.
кстати, выше было проверить под Linux, видимо есть такая проблема:
RE
Ошибка Windows Usbser.sys RTS
Во всех версиях Windows имеется ошибка в системном драйвере USB CDC ( usbser.sys ), которая влияет на обработку сигнала RTS.
Драйвер не отправляет сообщения USB SET_CONTROL_LINE_STATE при изменении состояния RTS . Однако при изменении состояния DTR драйвер отправляет сообщение SET_CONTROL_LINE_STATE , содержащее обновленные состояния для сигналов RTS и DTR .
Неизвестно, почему usbser.sys это делает, но дизассемблированный код драйвера предполагает, что отправка SET_CONTROL_LINE_STATE при изменении RTS просто пропущена по ошибке. Похоже, Microsoft не собирается исправлять эту ошибку. Однако ее можно легко обойти.
Обходным путем для этой ошибки является обновление DTR (даже до того же состояния) каждый раз, когда необходимо обновить RTS, как показано в примере ниже:
#include <windows.h>
#include <stdio.h>
int main() {
HANDLE hComm = CreateFileA(“\\.\COM5”, GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, 0, NULL);
if (hComm == INVALID_HANDLE_VALUE) {
printf(“Error opening serial port\n”);
} else {
printf(“Serial port opened\n”);
}
while (1) {
// I don’t know any easy (and reliable) way to get current DTR state in WinAPI unfortunately.
// Probably the simplest solution is to keep current DTR value in a variable.
EscapeCommFunction(hComm, SETRTS);
EscapeCommFunction(hComm, CLRDTR); // or SETDTR, does not matter
(void)getc(stdin);
EscapeCommFunction(hComm, CLRRTS);
EscapeCommFunction(hComm, CLRDTR); // or SETDTR, does not matter
(void)getc(stdin);
}
CloseHandle(hComm);
return 0;
}
Некоторые существующие программы уже делают это. CwType , Win-Test , CoolTerm являются примерами таких программ. Другие, такие как N1MM Logger Plus или Termite, не реализуют обходной путь.
Проблема RTS не затрагивает Linux или macOS .
Не пойдёт так. Правильно код вставьте и схему приложите ))))