Нашел кварц на 12МГц, взял твою прошивку, всё равно глушняк. Явно проблема подключения (провода), потому что ответа от платы нет. USBView показывает, что в ответ получен дескриптор 0 длины, т.е. не получен, хорошо хоть определяет, что это устройство Low speed. USB3.0, USB2.0 разъемы - пофигу. Провод менял, тоже пофигу. Блиин, забыл баллоны попинать и стекло протереть, щас! :)
Нашел кварц на 12МГц, взял твою прошивку, всё равно глушняк. Явно проблема подключения (провода), потому что ответа от платы нет. USBView показывает, что в ответ получен дескриптор 0 длины, т.е. не получен, хорошо хоть определяет, что это устройство Low speed. USB3.0, USB2.0 разъемы - пофигу. Провод менял, тоже пофигу. Блиин, забыл баллоны попинать и стекло протереть, щас! :)
брось мне USBView - я свои поудалял, никогда ими не пользовался
хорошо, а почему у меня работает на двух нетбуках ASUS и одном древнем шаинтехе с PIII-500(храню ради LPT-порта)?
Мамка у меня не старая, скорее более или менее новая ASRock Extreme4. Про 1.1 USB там нет ни слова (только 2.0 и 3.0), но такие устройства (1.1), судя по всему есть и работают, так что дело не в этом. Других компов под рукой нет, потому проверить на другой мамке не могу. Провод - я про USB кабель.
Стабилитронов у меня нет, потому поставить нечего, вполне возможно проблема в этом.
Видимо придется ЛА подключить, хотя что я там увижу, пока что понятия не имею.
Сейчас подключено так:
PD2 (16) - D+, там же подтяжка на +5В
PD3 (17) - GND (чтобы не маяться, пусть всегда в загрузчик выходит
PD6 (20) - D-
В исходниках написано про подтяжку к +3.5В. Потому есть подозрение, что в этом и проблема.
Подключаю кабель в USB2.0 разъемы, хотя и в 3.0 тоже самое.
Убрал BYPASS на пинборде, стало лучше, 4.00В питание и всё завелось в полпинка. Поставил драйвер LIBUSB, теперь без ошибок.
Вот она какая, лажа, буду знать. Лично мне непонятно, почему выдавая в разъем +5В, имея дифференциальную передачу на D+, D-, нужно ограничиваться эти сигналы на уровне 3.5В. Самое главное, нигде про 3.5В не наталкивался, хотя перерыл гору информации.
ПС У меня нет магаза под рукой, чтобы что то купить нужно ехать в Москву, а это часов пять времени туда-сюда.
Что ты там хотел посмотреть в примерах, конкретно?
UPD: про кнопку. Я это высмотрел в исходниках. Потому просто сейчас висит на земле, потому и сразу заходит в загрузчик, нафиг мне нужен софт в ATmega16, кроме как программатор.
сигналка USB фурычит на логике 3,3 вольта, а мы ей логические сигналы 5 вольт шлём, поэтому костыль со стабилитронами - старые USB это проглатывали, а новые тестируют устройство и отрубают.
если стабилитроны трудно достать, то нарой у себя или знакомых старый медленный USB-хаб(в смысле "тройник") - он примет без стабилитронов.
я пороюсь заново в исходниках и скажу по ходу дела потом.
а, у меня не желает при включеной кнопке определяться юсбаспом - фиг с ним.
Ок, лучше найти стабилитроны, попробую порыться в ненужных железках. Мышка валяется, там какие то есть.
Хочу попробовать скомпилировать сам, думаю всё будет пахать как надо, плюс на 16МГц кварца попробую.
Уфф, надо полученные знания в голове уложить ;)
Ок, лучше найти стабилитроны, попробую порыться в ненужных железках. Мышка валяется, там какие то есть. Хочу попробовать скомпилировать сам, думаю всё будет пахать как надо, плюс на 16МГц кварца попробую. Уфф, надо полученные знания в голове уложить ;)
Ну, я выше давал список изменений - проверь: make - должен побайтно файлег совпасть, затем делай, что хочешь - там можно светодиоды подрубить или подтяжку программную... хотя - зачем?
я сам сидел, думал, что можно - оставил минималистично.
Изменения в софте - это не важно, я в нем порылся и теперь почти по косточкам могу его разобрать. Там есть фишка - вызов из основной flash программы кусков из загрузчика, чтобы, например, перешивать flash не в загрузчике, а в основной программе.
С этим я разберусь, мне стабилитроны надо добыть из хлама ))) По 6 диодов, многовато, хотя, может и найду столько. Светики, опять же есть, думаю здесь их вполне хватит, токи небольшие
С этим я разберусь, мне стабилитроны надо добыть из хлама ))) По 6 диодов, многовато, хотя, может и найду столько. Светики, опять же есть, думаю здесь их вполне хватит, токи небольшие
Не хочу недопитание использовать, лучше ограничить D-, D+.
Смысл в том, что мне не нужен такой программатор, у меня с этим и пинбоард справится.
Меня больше интересует программаторы, которые можно сделать, прошив Загрузчик в стандартную плату.
Да и в любом случае, использование USB на пинбоарде это может пригодиться, независимо от питания
Не хочу недопитание использовать, лучше ограничить D-, D+.
Тогда по три - 1,2*3=3,6
kisoft пишет:
Смысл в том, что мне не нужен такой программатор, у меня с этим и пинбоард справится. Меня больше интересует программаторы, которые можно сделать, прошив Загрузчик в стандартную плату. Да и в любом случае, использование USB на пинбоарде это может пригодиться, независимо от питания
Так это ж и есть загрузчик - он просто эмулирует программатор оставшегося от загрузочной области куска флеша контроллера.
Единственно, что не может - фьюзы МК перешить, т.к. сам на борту обитает.
Это я уже понял, сам себе программатор. Особого интереса у меня к нему нет. Но поиграться было полезно. К тому же теперь я знаю как доработать ПБ, чтобы использовать лишний USB разъем для атмеги16 (стм32 и так будет нормально), такая информация очень полезна. Так что спасибо!
А мне наоборот железный USB больше нравится. Да и стандартного загрузчика хватало до сих пор. Так что, от необходимости всё, кому то нужно одно, кому то - другое. К тому же производитель заинтересован продавать программаторы, наверняка, потому и нет универсального решения.
USBaspLoader. Загрузчик для AVR МК. Адаптируем под АТмегу16А.
16 МГц - завелось нормально, что и требовалось доказать. Кстати, для 16МГц код намного меньше, чем для 12 МГц.
Версия исходников - крайняя, скачивал с репозитория github.
Компилятор WinAVR-20100110 или toolchain от ArduinoIDE 1.0.5, разницы никакой, работают оба варианта.
До кучи, залил Blink, работает нормально.
Поигрался с BUTTON. Если на земле, то заходит в загрузчик, если нет, то сразу в приложение. Но, у меня добавлены следующие defines: -DCONFIG_NO__BOOTLOADER_CAN_EXIT -DCONFIG_NO__HAVE_SPMINTEREFACE,
CONFIG_NO__BOOTLOADER_CAN_EXIT - это как раз невозможность выхода из загрузчика (нужно отжать кнопку и ребутнуть, тогда и только тогда выходит)
В общем кому нужна быстрая загрузка на выносных камнях (на стандартных платах могут быть проблемы с уровнем), можно рекомендовать этот загрузчик, хотя некий гемор может присутствовать в виде ограничения D+ и D- стабилитронами при питании +5В, на 3.3В всё должно пахать как надо.
На всякий случай, моё железо:
Pinboard2 rev.2 (PB2),
ATmega16A (из набора PB2),
6 проводов, мама-мама (4 на прошивку загрузчика, 2 на соединение D+, D- с ATmega16A)
USB кабель
ОС: Windows7 x64
На PB2 был выключен BYPASS (питание от USB), в этом случае питание на ATmega16A идет около 4В, либо нужно ограничить сигнал на входах D+ и D- до 3.6В установив стабилитроны (тогда, возможно и на +5В будет работать нормально. У меня нет стабилитронов, потому проверить пока не могу).
Всем доброй охоты!
PS Наверное надо бы было это всё в другую тему вылить, а то в куче всё.
Ну вот, благодаря раскопкам, теперь на ATmega16 завелся еще и AVRDoper в виде STK500 (у них с USBaspLoader одинаковая часть на USB, только режимы разные), который видит ATmel Studio 6.1 на Windows7 x64. Правда пока только входная часть, осталось попробовать реальный камень на выход подключить и проверить, как оно работает. ISP & HVSP.
А если поставить драйвер от AVRDoper, то будет собственно AVRDoper работать (но уже через USB, а STK500 через Virtual COM port работает).
А если поставить драйвер от AVRDoper, то будет собственно AVRDoper работать (но уже через USB, а STK500 через Virtual COM port работает).
При установке драйверов AVRDoper прикидывается COM-портом, висящим на USB, но... на W7x32 не желает работать - драйвера нужно искать. на XP - работает.
Странно, на 7 x64 работает. На 32 не смогу проверить, это виртуалку надо ставить. Впрочем, у меня должна быть ссылка с инструкцией по установке драйверов. Выложу чуть позже.
UPD:
Ну вот, всё получилось замечательно, правда пришлось инвертировать пару сигналов. Зато AVRDoper завелся в виде STK500, прочитал в Atmel Stduio прошивку и фьюзы Arduino ProMini (5V, 328P). Теперь осталось всё это сделать нормальным программатором, а также проверить режим HVSP.
А здесь я брал инструкцию по установке драйверов на семерку 64, там есть и 32, может поможет:
очень позновательно! у меня вопрос, либы Ethernet и LiquidCrystal будут работать? может кто пробовал? собственно, хочу сделать лан тестер http://habrahabr.ru/post/190632/ но более продвинутый, ethernet shield на w5100 + пинг и DHCP клиентом, 16 atmega как раз подходит по дип корпусу и количеству пинов, что посоветуете?
LiquidCrystal работает нормально, проверено на LCD из комплекта PinBoardII rev.2.
Есть фикс на нестандартную для Arduino частоту 12МГц, если вдруг Вы будете использовать другой нестандартный кварц, можно будет пофиксить и это.
По поводу Ethernet, к сожалению, ничего подсказать не могу, поскольку шилдов у меня таких нет. Я мельком исходники Ethernet библиотеки посмотрел, вроде бы проблем быть не должно, но гарантировать не могу.
Сегодня дошли руки проверить другие частоты PWM для начала на таймере 1. Мы знаем, что частота PWM равна примерно 490 Гц.
Внимание! При использовании функции tone на таймере 1, частота PWM изменится, поскольку он перепрограммируется. Поэтому при использовании такого метода нельзя использовать функцию tone.
Собственно код, который нужно вставить в функцию setup() и использовать PWM на пинах 4 и 5 с другой частотой PWM.
Метод состоит в том, чтобы изменить частоту предделителя таймера, потому получить любую частоту таким способом не получится.
И совсем не 1.22В, а от 1.15 до 1.4 (среднее 1.23). Подставив число 1258290L вместо 1248060L я получил более точное значение (3907мВ при питании 3970мВ, но тестер у меня китайский, может врать, я не проверял). При 1248060L показывает 3875мВ.
Думаю, что данное число нужно скорректировать для конкретного камня и, возможно, используемого питания.
чтобы было наглядно видно. И потом проверить на разных напряжениях питания.
PS: Щас попробовал, при питании 4,85-4,86 выдает4766мВ.
Вот для умозаключений табличка для числа 1258290L:
Vcc
readVCC
3,97
3907
4,85
4766
UPD: Кстати, подумалось, а почему бы не измерять внешнее смещение от точного стабилитрона, типа TL431, об этом же и в комментариях к статье пишут. Этот же прием используется в измерителе полупроводниковых приборов. Я себе для подобных целей взял LM4040AIM3-2.5/NOPB TI (2.5В, точность +-0.1%), но пока не пробовал. Хотя я этот вопрос не вентилировал, возможно и этот вариант со своими тараканами.
На счет delay не скажу в wiring установка и запуск в разных местах, надо ДШ смотреть, но ты это и сам знаешь. Имхо вопрос философский, неужели так критично по времени замер vcc?
Имхо вопрос философский, неужели так критично по времени замер vcc?
я проверил без - разницы не заметил, но - вывожу инфу на LCD, а в библиотеке LiquidCrystal тоже задержки присутсвуют, может они как-то компенсируют... иначе - обложимся этими задержками, не будем знать, откуда ноги тупняков ростут.
// without a delay, we seem to read from the wrong channel
06
//delay(1);
07
08
#if defined(ADCSRA) && defined(ADCL)
09
// start the conversion
10
sbi(ADCSRA, ADSC);
11
12
// ADSC is cleared when the conversion finishes
13
while(bit_is_set(ADCSRA, ADSC));
Задержка закомментарена.
В ДШ ничего на эту тему нет, есть только для других режимов АЦП.
Не думаю, что у тебя между установкой ADMUX & ADCSRA вставлен вывод на LCD. В общем на твой страх и риск, я думаю. Если не так важно и прога не использует аналоговые пины (не использует analogRead совсем!), то это не важно, потому что переключений мультиплексора входов АЦП не будет. Но если добавить постоянное чтение разных входов через analogRead, может и оглоблей накатить по затылку в ненужный момент.
Просьба не забивать тему. Пожалуйста. Про endif правильно ответили. Hugo, вырос, так держать!
;) Без подколок, честно.
Я и так уже здесь почти не появляюсь, читать срач нет времени, ушёл в stm32, да cubietruck мучаю. Если интересно, лучше в отдельной теме.
Однако, свой Леонардо время от времени юзаю, что бы побырому что нибудь проверить.
openhab мучаю или он меня. Пока свободно, можно посмотреть здесь http://kisoft.ru:8081/openhab.app?sitemap=home данные реальные. Пока что открыто, потому что это только монитор, без управления. Другой вариант http://kisoft.ru:8081/greent
Если интересно, расскажу в другой теме.
Надеюсь на понимание. Спасибо
Это в КубическихТракторах такая встроенная вебхрень? или в arduino leonardo веб влезла?
мне актуальенько вайфайные esp8266 приползут надо будет затылок чесать :)
все стало кажется понятно
разработано на java
странички вроде живенько шлет
На КубическомТракторе что-то еще можно делать с ОткрытымКоммутатором?
боюсь если яву в дуе не засунуть ардуинами тут пахнуть не будет
ну вот и пофлудили
по теме совестимости ОперационныхСистем
4 дня долбался
думал всякие дребезги повторы пролезают на веселеньком питании от USB-OTG Android Nexus 7
осцилоскоп показывает напруги чуток ниже 5в но импулсы от енкодера четкие однозначнопонимаемые
ардуинологически тоже четко одна команда декодирована и послана
На Windows7 крутит медиагромкость по чуть чуть на Android KitKat 4.4.4 енкодер делает один импульс а громкость без остановки ползет или в максимум или в минимум
прикольненько так
отпускание кнопки оказалось андроиды сами не делают
им об этом надо сказать конкретно
стоять сволоч я кнопку видишь уууужеееее выыытяяяягииивааааююююю
//Encoder- только громкость------------------------------------------------------------------------------------------------------------------------------------------
02
voidEncoderDecoder(){
03
// currentTime = millis();//запомнили время
04
// if(currentTime>=(loopTime+0.5)){//если прошло 5мс=200Гц на Windows7 нет повторов на Android KitKat4.4.4 боремся с повторами ОС попытка притормозить
05
varEncoderA=digitalRead(PINENCODERA);
06
varEncoderB=digitalRead(PINENCODERB);
07
if((!varEncoderA)&&(varEncoderA_prev)){// ловим ассинхронность изменения
Сервер сейчас на Synology DS414 (это NAS такой). В дальнейшем, скорей всего перелезет на cubietruck, там видно будет. Так что ардуино тут и не пахнет ;) Датчики на 1-wire, метеостанция готовая - netatmo.
тогда получается, что файлеги *16mhz.hex готовых прошивок, которые выложили разработчики нерабочие.
Не всё софт, железо разное может быть
Нашел кварц на 12МГц, взял твою прошивку, всё равно глушняк. Явно проблема подключения (провода), потому что ответа от платы нет. USBView показывает, что в ответ получен дескриптор 0 длины, т.е. не получен, хорошо хоть определяет, что это устройство Low speed. USB3.0, USB2.0 разъемы - пофигу. Провод менял, тоже пофигу. Блиин, забыл баллоны попинать и стекло протереть, щас! :)
Нашел кварц на 12МГц, взял твою прошивку, всё равно глушняк. Явно проблема подключения (провода), потому что ответа от платы нет. USBView показывает, что в ответ получен дескриптор 0 длины, т.е. не получен, хорошо хоть определяет, что это устройство Low speed. USB3.0, USB2.0 разъемы - пофигу. Провод менял, тоже пофигу. Блиин, забыл баллоны попинать и стекло протереть, щас! :)
брось мне USBView - я свои поудалял, никогда ими не пользовался
хорошо, а почему у меня работает на двух нетбуках ASUS и одном древнем шаинтехе с PIII-500(храню ради LPT-порта)?
воткни в USB-хаб простой с поддержкой USB1.1 - что будет?
стабилитроны у тебя правильно запаяны? питание 5 вольт... не знаю - начиная с IgorPlugUSB подобное юзаю и никаких нареканий.
нашёл USBView
Device Descriptor:
bcdUSB: 0x0110
bDeviceClass: 0xFF
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x08 (8)
idVendor: 0x16C0
idProduct: 0x05DC
bcdDevice: 0x0102
iManufacturer: 0x01
0x0409:
"www.fischl.de"
iProduct: 0x02
0x0409:
"USBasp"
iSerialNumber: 0x00
bNumConfigurations: 0x01
ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed: Low
Device Address: 0x01
Open Pipes: 0
Configuration Descriptor:
wTotalLength: 0x0012
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0x80 (Bus Powered )
MaxPower: 0x32 (100 Ma)
Interface Descriptor:
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x00
bInterfaceClass: 0x00
bInterfaceSubClass: 0x00
bInterfaceProtocol: 0x00
iInterface: 0x00
при чём тут провод? замени, если тебе не нравится... на что?, если
#define USB_CFG_DPLUS_BIT 2
в оригинальном паке с http://www.obdev.at/products/vusb/usbasploader.html указан и я его не менял.
Мамка у меня не старая, скорее более или менее новая ASRock Extreme4. Про 1.1 USB там нет ни слова (только 2.0 и 3.0), но такие устройства (1.1), судя по всему есть и работают, так что дело не в этом. Других компов под рукой нет, потому проверить на другой мамке не могу.
Провод - я про USB кабель.
Стабилитронов у меня нет, потому поставить нечего, вполне возможно проблема в этом.
Видимо придется ЛА подключить, хотя что я там увижу, пока что понятия не имею.
Сейчас подключено так:
PD2 (16) - D+, там же подтяжка на +5В
PD3 (17) - GND (чтобы не маяться, пусть всегда в загрузчик выходит
PD6 (20) - D-
В исходниках написано про подтяжку к +3.5В. Потому есть подозрение, что в этом и проблема.
Подключаю кабель в USB2.0 разъемы, хотя и в 3.0 тоже самое.
Стабилитронов у меня нет, потому поставить нечего, вполне возможно проблема в этом.
ясно - подключи к USB-хабу версии 1.1 или запитай халабуду от 3.3 вольт.
вот схема с чего начиналось - не уверен, что будет писать, но хоть запустится. два диода снизят напряжение питания до 3.3
http://www.obdev.at/products/vusb/index.html
ещё
>PD3 (17) - GND (чтобы не маяться, пусть всегда в загрузчик выходит
не "всегда", а после ручного ресета кнопкой - перепроверил, чего-то мне не приходило так запускать загрузчик.
Убрал BYPASS на пинборде, стало лучше, 4.00В питание и всё завелось в полпинка. Поставил драйвер LIBUSB, теперь без ошибок.
Вот она какая, лажа, буду знать. Лично мне непонятно, почему выдавая в разъем +5В, имея дифференциальную передачу на D+, D-, нужно ограничиваться эти сигналы на уровне 3.5В. Самое главное, нигде про 3.5В не наталкивался, хотя перерыл гору информации.
ПС У меня нет магаза под рукой, чтобы что то купить нужно ехать в Москву, а это часов пять времени туда-сюда.
Что ты там хотел посмотреть в примерах, конкретно?
UPD: про кнопку. Я это высмотрел в исходниках. Потому просто сейчас висит на земле, потому и сразу заходит в загрузчик, нафиг мне нужен софт в ATmega16, кроме как программатор.
сигналка USB фурычит на логике 3,3 вольта, а мы ей логические сигналы 5 вольт шлём, поэтому костыль со стабилитронами - старые USB это проглатывали, а новые тестируют устройство и отрубают.
если стабилитроны трудно достать, то нарой у себя или знакомых старый медленный USB-хаб(в смысле "тройник") - он примет без стабилитронов.
я пороюсь заново в исходниках и скажу по ходу дела потом.
а, у меня не желает при включеной кнопке определяться юсбаспом - фиг с ним.
Ок, лучше найти стабилитроны, попробую порыться в ненужных железках. Мышка валяется, там какие то есть.
Хочу попробовать скомпилировать сам, думаю всё будет пахать как надо, плюс на 16МГц кварца попробую.
Уфф, надо полученные знания в голове уложить ;)
Ну, я выше давал список изменений - проверь: make - должен побайтно файлег совпасть, затем делай, что хочешь - там можно светодиоды подрубить или подтяжку программную... хотя - зачем?
я сам сидел, думал, что можно - оставил минималистично.
Изменения в софте - это не важно, я в нем порылся и теперь почти по косточкам могу его разобрать. Там есть фишка - вызов из основной flash программы кусков из загрузчика, чтобы, например, перешивать flash не в загрузчике, а в основной программе.
С этим я разберусь, мне стабилитроны надо добыть из хлама ))) По 6 диодов, многовато, хотя, может и найду столько. Светики, опять же есть, думаю здесь их вполне хватит, токи небольшие
С этим я разберусь, мне стабилитроны надо добыть из хлама ))) По 6 диодов, многовато, хотя, может и найду столько. Светики, опять же есть, думаю здесь их вполне хватит, токи небольшие
подожди - почему по шесть диодов?
два - последовательно в линию питания +5V USB
стабилитроны не найдёшь - проще найти USB-хаб.
Не хочу недопитание использовать, лучше ограничить D-, D+.
Смысл в том, что мне не нужен такой программатор, у меня с этим и пинбоард справится.
Меня больше интересует программаторы, которые можно сделать, прошив Загрузчик в стандартную плату.
Да и в любом случае, использование USB на пинбоарде это может пригодиться, независимо от питания
Тогда по три - 1,2*3=3,6
Так это ж и есть загрузчик - он просто эмулирует программатор оставшегося от загрузочной области куска флеша контроллера.
Единственно, что не может - фьюзы МК перешить, т.к. сам на борту обитает.
Это я уже понял, сам себе программатор. Особого интереса у меня к нему нет. Но поиграться было полезно. К тому же теперь я знаю как доработать ПБ, чтобы использовать лишний USB разъем для атмеги16 (стм32 и так будет нормально), такая информация очень полезна. Так что спасибо!
мне нравится - не понимаю нахрена все производители дуино железные usb->сом-порты в свои платы пихают?
А мне наоборот железный USB больше нравится. Да и стандартного загрузчика хватало до сих пор. Так что, от необходимости всё, кому то нужно одно, кому то - другое. К тому же производитель заинтересован продавать программаторы, наверняка, потому и нет универсального решения.
Чтобы поставить некую точку, резюмирую:
Кагбы резюме-резюме...
USBaspLoader успешно портируется на ATmega16
подробная инструкция тут #40 и тут #49 , всё что после и между читать в контексте "что произойдёт, если я неправильно подключу устройство?"
*проблемы с питанием отсутствуют.
Ну вот, благодаря раскопкам, теперь на ATmega16 завелся еще и AVRDoper в виде STK500 (у них с USBaspLoader одинаковая часть на USB, только режимы разные), который видит ATmel Studio 6.1 на Windows7 x64. Правда пока только входная часть, осталось попробовать реальный камень на выход подключить и проверить, как оно работает. ISP & HVSP.
А если поставить драйвер от AVRDoper, то будет собственно AVRDoper работать (но уже через USB, а STK500 через Virtual COM port работает).
А если поставить драйвер от AVRDoper, то будет собственно AVRDoper работать (но уже через USB, а STK500 через Virtual COM port работает).
При установке драйверов AVRDoper прикидывается COM-портом, висящим на USB, но... на W7x32 не желает работать - драйвера нужно искать. на XP - работает.
Странно, на 7 x64 работает. На 32 не смогу проверить, это виртуалку надо ставить. Впрочем, у меня должна быть ссылка с инструкцией по установке драйверов. Выложу чуть позже.
UPD:
Ну вот, всё получилось замечательно, правда пришлось инвертировать пару сигналов. Зато AVRDoper завелся в виде STK500, прочитал в Atmel Stduio прошивку и фьюзы Arduino ProMini (5V, 328P). Теперь осталось всё это сделать нормальным программатором, а также проверить режим HVSP.
А здесь я брал инструкцию по установке драйверов на семерку 64, там есть и 32, может поможет:
http://yourdevice.net/forum/viewtopic.php?p=6&sid=dcac0300f549ab01d9d3ab02dadeac72#p6
очень позновательно! у меня вопрос, либы Ethernet и LiquidCrystal будут работать? может кто пробовал? собственно, хочу сделать лан тестер http://habrahabr.ru/post/190632/ но более продвинутый, ethernet shield на w5100 + пинг и DHCP клиентом, 16 atmega как раз подходит по дип корпусу и количеству пинов, что посоветуете?
Спасибо!
LiquidCrystal работает нормально, проверено на LCD из комплекта PinBoardII rev.2.
Есть фикс на нестандартную для Arduino частоту 12МГц, если вдруг Вы будете использовать другой нестандартный кварц, можно будет пофиксить и это.
По поводу Ethernet, к сожалению, ничего подсказать не могу, поскольку шилдов у меня таких нет. Я мельком исходники Ethernet библиотеки посмотрел, вроде бы проблем быть не должно, но гарантировать не могу.
там ещё есть либа ICMP, надо пробовать! спасибо)
Сегодня дошли руки проверить другие частоты PWM для начала на таймере 1. Мы знаем, что частота PWM равна примерно 490 Гц.
Внимание! При использовании функции tone на таймере 1, частота PWM изменится, поскольку он перепрограммируется. Поэтому при использовании такого метода нельзя использовать функцию tone.
Собственно код, который нужно вставить в функцию setup() и использовать PWM на пинах 4 и 5 с другой частотой PWM.
Метод состоит в том, чтобы изменить частоту предделителя таймера, потому получить любую частоту таким способом не получится.
01
#define PWM_2 1
02
03
// PWM_0 - 1
04
#if defined(PWM_0)
05
// 31,373 KHz
06
TCCR1B = _BV(CS10);
07
08
// PWM_1 - 8
09
#elif defined(PWM_1)
10
// 3,922 KHz
11
TCCR1B = _BV(CS11);
12
13
// PWM_2 - 64
14
#elif defined(PWM_2)
15
// 490,238 Hz
16
TCCR1B = _BV(CS11) | _BV(CS10);
17
18
// PWM_3 - 256
19
#elif defined(PWM_3)
20
// 122,560 Hz
21
TCCR1B = _BV(CS12);
22
23
// PWM_4 - 1024
24
#elif defined(PWM_4)
25
// 30,640 Hz
26
TCCR1B = _BV(CS12) | _BV(CS10);
27
#endif
Здесь строка:
1
#define PWM_2 1
определяет какой делитель будет использоваться. Соответственно:
#define PWM_0 1 - будет включать предделитель = 1 (~31,3 KHz)
#define PWM_1 1 - будет включать предделитель = 8 (~3,9 KHz)
#define PWM_2 1 - будет включать предделитель = 64 (это штатный вариант, ~490 Hz)
#define PWM_3 1 - будет включать предделитель = 256 (~122,5 Hz)
#define PWM_4 1 - будет включать предделитель = 1024 (~30,6 Hz)
kisoft, большое спасибо.
kisoft, посмотри на досуге, что нужно для М16 прописать для реализации замера питающего напряжения.
http://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/
Я уже где то использовал ADMUX и т.п. поскребу по сумеркам :)
UPD: по сусекам :) t9 блин
Теоретически оказалось всё просто, но я еще не проверил, код такой, изменения выделил.
Смысл в том, что в 16-ой опорное 1.22В, а у других 1.1В. Но предупреждаю сразу - я не проверял, чуть позже проверю.
01
long
readVcc()
02
{
03
// Read 1.1V reference against AVcc (1.22 for ATmega16)
04
// set the reference to Vcc and the measurement to the internal 1.1V reference
05
#if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined (__AVR_ATmega16__)
06
ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
07
#elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
08
ADMUX = _BV(MUX5) | _BV(MUX0);
09
#elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
10
ADMUX = _BV(MUX3) | _BV(MUX2);
11
#else
12
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
13
#endif
14
15
delay(2);
// Wait for Vref to settle
16
ADCSRA |= _BV(ADSC);
// Start conversion
17
while
(bit_is_set(ADCSRA,ADSC));
// measuring
18
19
uint8_t low = ADCL;
// must read ADCL first - it then locks ADCH
20
uint8_t high = ADCH;
// unlocks both
21
22
long
result = (high<<8) | low;
23
24
#if !defined(__AVR_ATmega16__)
25
result = 1125300L / result;
// Calculate Vcc (in mV); 1125300 = 1.1*1023*1000
26
#else
27
result = 1248060L / result;
// Calculate Vcc (in mV); 1248060 = 1.22 *1023*1000
28
#endif
29
return
result;
// Vcc in millivolts
30
}
спасибо - проверю сегодня.
Я проверил, расследование показало:
И совсем не 1.22В, а от 1.15 до 1.4 (среднее 1.23). Подставив число 1258290L вместо 1248060L я получил более точное значение (3907мВ при питании 3970мВ, но тестер у меня китайский, может врать, я не проверял). При 1248060L показывает 3875мВ.
Думаю, что данное число нужно скорректировать для конкретного камня и, возможно, используемого питания.
Удачной проверки :)
А лучше всего сделать типа
1
#define VAL (1.23*1023*1000)
чтобы было наглядно видно. И потом проверить на разных напряжениях питания.
PS: Щас попробовал, при питании 4,85-4,86 выдает4766мВ.
Вот для умозаключений табличка для числа 1258290L:
UPD: Кстати, подумалось, а почему бы не измерять внешнее смещение от точного стабилитрона, типа TL431, об этом же и в комментариях к статье пишут. Этот же прием используется в измерителе полупроводниковых приборов. Я себе для подобных целей взял LM4040AIM3-2.5/NOPB TI (2.5В, точность +-0.1%), но пока не пробовал. Хотя я этот вопрос не вентилировал, возможно и этот вариант со своими тараканами.
опередил меня
в общем, аналогично - номинальное 1.23 по документации, поставил 1.24.
и, вот это delay(2); // Wait for Vref to settle кажется лишним.
На счет delay не скажу в wiring установка и запуск в разных местах, надо ДШ смотреть, но ты это и сам знаешь. Имхо вопрос философский, неужели так критично по времени замер vcc?
я проверил без - разницы не заметил, но - вывожу инфу на LCD, а в библиотеке LiquidCrystal тоже задержки присутсвуют, может они как-то компенсируют... иначе - обложимся этими задержками, не будем знать, откуда ноги тупняков ростут.
Я посмотрел в ядре (wiring_analog.c, analogRead):
01
#if defined(ADMUX)
02
ADMUX = (analog_reference << 6) | (pin & 0x07);
03
#endif
04
05
// without a delay, we seem to read from the wrong channel
06
//delay(1);
07
08
#if defined(ADCSRA) && defined(ADCL)
09
// start the conversion
10
sbi(ADCSRA, ADSC);
11
12
// ADSC is cleared when the conversion finishes
13
while
(bit_is_set(ADCSRA, ADSC));
Задержка закомментарена.
В ДШ ничего на эту тему нет, есть только для других режимов АЦП.
Не думаю, что у тебя между установкой ADMUX & ADCSRA вставлен вывод на LCD. В общем на твой страх и риск, я думаю. Если не так важно и прога не использует аналоговые пины (не использует analogRead совсем!), то это не важно, потому что переключений мультиплексора входов АЦП не будет. Но если добавить постоянное чтение разных входов через analogRead, может и оглоблей накатить по затылку в ненужный момент.
Не думаю, что у тебя между установкой ADMUX & ADCSRA вставлен вывод на LCD.
точно - это я странное придумал
Но если добавить постоянное чтение разных входов через analogRead, может и оглоблей накатить по затылку в ненужный момент.
тогда оставлю delay(1); вместо 2-х
Жадный ты :)
Зато я вчера увидел, что в атмеге16 термометра нет, а в 32u4 есть
а, я не увидел - пытался запустить, а оно мне 39 градусов показывает.
а, где смотрел, что видно тебе было?
Так на мониторе видел!
Вроде нормально 39 градусов, во всяком случае для камня - вполне. Это ж не на улице
народ, гляньте на строки 136, 137 - так правильно?.. а, то мне как-то не по феншую кажется
136
#endif
137
#endif
001
wiring_analog.c - analog input and output
002
Part of Arduino - <a href=
"http://www.arduino.cc/"
title=
"http://www.arduino.cc/"
rel=
"nofollow"
>http://www.arduino.cc/</a>
003
004
Copyright (c) 2005-2006 David A. Mellis
005
006
This library
is
free software; you can redistribute it and/or
007
modify it under the terms of the GNU Lesser General Public
008
License
as
published by the Free Software Foundation; either
009
version 2.1 of the License, or (at your option) any later version.
010
011
This library
is
distributed
in
the hope that it will be useful,
012
but WITHOUT ANY WARRANTY; without even the implied warranty of
013
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014
Lesser General Public License
for
more details.
015
016
You should have received a copy of the GNU Lesser General
017
Public License along with
this
library;
if
not, write to the
018
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
019
Boston, MA 02111-1307 USA
020
021
Modified 28 September 2010 by Mark Sproul
022
023
$Id: wiring.c 248 2007-02-03 15:36:30Z mellis $
024
*/
025
026
#include "wiring_private.h"
027
#include "pins_arduino.h"
028
029
uint8_t analog_reference = DEFAULT;
030
031
void
analogReference(uint8_t mode)
032
{
033
// can't actually set the register here because the default setting
034
// will connect AVCC and the AREF pin, which would cause a short if
035
// there's something connected to AREF.
036
analog_reference = mode;
037
}
038
039
int
analogRead(uint8_t pin)
040
{
041
uint8_t low, high;
042
043
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
044
if
(pin >= 54) pin -= 54;
// allow for channel or pin numbers
045
#elif defined(__AVR_ATmega32U4__)
046
if
(pin >= 18) pin -= 18;
// allow for channel or pin numbers
047
#elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega644__) || defined(__AVR_ATmega644A__) || defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644PA__) || defined(__AVR_ATmega16__)
048
if
(pin >= 24) pin -= 24;
// allow for channel or pin numbers
049
#elif defined(analogPinToChannel) && (defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__))
050
pin = analogPinToChannel(pin);
051
#else
052
if
(pin >= 14) pin -= 14;
// allow for channel or pin numbers
053
#endif
054
055
#if defined(__AVR_ATmega32U4__)
056
pin = analogPinToChannel(pin);
057
ADCSRB = (ADCSRB & ~(1 << MUX5)) | (((pin >> 3) & 0x01) << MUX5);
058
#elif defined(ADCSRB) && defined(MUX5)
059
// the MUX5 bit of ADCSRB selects whether we're reading from channels
060
// 0 to 7 (MUX5 low) or 8 to 15 (MUX5 high).
061
ADCSRB = (ADCSRB & ~(1 << MUX5)) | (((pin >> 3) & 0x01) << MUX5);
062
#endif
063
064
// set the analog reference (high two bits of ADMUX) and select the
065
// channel (low 4 bits). this also sets ADLAR (left-adjust result)
066
// to 0 (the default).
067
#if defined(ADMUX)
068
ADMUX = (analog_reference << 6) | (pin & 0x07);
069
#endif
070
071
// without a delay, we seem to read from the wrong channel
072
//delay(1);
073
074
#if defined(ADCSRA) && defined(ADCL)
075
// start the conversion
076
sbi(ADCSRA, ADSC);
077
078
// ADSC is cleared when the conversion finishes
079
while
(bit_is_set(ADCSRA, ADSC));
080
081
// we have to read ADCL first; doing so locks both ADCL
082
// and ADCH until ADCH is read. reading ADCL second would
083
// cause the results of each conversion to be discarded,
084
// as ADCL and ADCH would be locked when it completed.
085
low = ADCL;
086
high = ADCH;
087
#else
088
// we dont have an ADC, return 0
089
low = 0;
090
high = 0;
091
#endif
092
093
// combine the two bytes
094
return
(high << 8) | low;
095
}
096
097
// Right now, PWM output only works on the pins with
098
// hardware support. These are defined in the appropriate
099
// pins_*.c file. For the rest of the pins, we default
100
// to digital output.
101
void
analogWrite(uint8_t pin,
int
val)
102
{
103
// We need to make sure the PWM output is enabled for those pins
104
// that support it, as we turn it off when digitally reading or
105
// writing with them. Also, make sure the pin is in output mode
106
// for consistenty with Wiring, which doesn't require a pinMode
107
// call for the analog output pins.
108
pinMode(pin, OUTPUT);
109
if
(val == 0)
110
{
111
digitalWrite(pin, LOW);
112
}
113
else
if
(val == 255)
114
{
115
digitalWrite(pin, HIGH);
116
}
117
else
118
{
119
switch
(digitalPinToTimer(pin))
120
{
121
#if defined(__AVR_ATmega16__)
122
case
TIMER0A:
123
// connect pwm to pin on timer 0
124
sbi(TCCR0, COM01);
125
OCR0 = val;
// set pwm duty
126
break
;
127
#else
128
// XXX fix needed for atmega8
129
#if defined(TCCR0) && defined(COM00) && !defined(__AVR_ATmega8__)
130
case
TIMER0A:
131
// connect pwm to pin on timer 0
132
sbi(TCCR0, COM00);
133
OCR0 = val;
// set pwm duty
134
break
;
135
#endif
136
#endif
137
138
#if defined(TCCR0A) && defined(COM0A1)
139
case
TIMER0A:
140
// connect pwm to pin on timer 0, channel A
141
sbi(TCCR0A, COM0A1);
142
OCR0A = val;
// set pwm duty
143
break
;
144
#endif
145
146
#if defined(TCCR0A) && defined(COM0B1)
147
case
TIMER0B:
148
// connect pwm to pin on timer 0, channel B
149
sbi(TCCR0A, COM0B1);
150
OCR0B = val;
// set pwm duty
151
break
;
152
#endif
153
154
#if defined(TCCR1A) && defined(COM1A1)
155
case
TIMER1A:
156
// connect pwm to pin on timer 1, channel A
157
sbi(TCCR1A, COM1A1);
158
OCR1A = val;
// set pwm duty
159
break
;
160
#endif
161
162
#if defined(TCCR1A) && defined(COM1B1)
163
case
TIMER1B:
164
// connect pwm to pin on timer 1, channel B
165
sbi(TCCR1A, COM1B1);
166
OCR1B = val;
// set pwm duty
167
break
;
168
#endif
169
170
#if defined(TCCR2) && defined(COM21)
171
case
TIMER2:
172
// connect pwm to pin on timer 2
173
sbi(TCCR2, COM21);
174
OCR2 = val;
// set pwm duty
175
break
;
176
#endif
177
178
#if defined(TCCR2A) && defined(COM2A1)
179
case
TIMER2A:
180
// connect pwm to pin on timer 2, channel A
181
sbi(TCCR2A, COM2A1);
182
OCR2A = val;
// set pwm duty
183
break
;
184
#endif
185
186
#if defined(TCCR2A) && defined(COM2B1)
187
case
TIMER2B:
188
// connect pwm to pin on timer 2, channel B
189
sbi(TCCR2A, COM2B1);
190
OCR2B = val;
// set pwm duty
191
break
;
192
#endif
193
194
#if defined(TCCR3A) && defined(COM3A1)
195
case
TIMER3A:
196
// connect pwm to pin on timer 3, channel A
197
sbi(TCCR3A, COM3A1);
198
OCR3A = val;
// set pwm duty
199
break
;
200
#endif
201
202
#if defined(TCCR3A) && defined(COM3B1)
203
case
TIMER3B:
204
// connect pwm to pin on timer 3, channel B
205
sbi(TCCR3A, COM3B1);
206
OCR3B = val;
// set pwm duty
207
break
;
208
#endif
209
210
#if defined(TCCR3A) && defined(COM3C1)
211
case
TIMER3C:
212
// connect pwm to pin on timer 3, channel C
213
sbi(TCCR3A, COM3C1);
214
OCR3C = val;
// set pwm duty
215
break
;
216
#endif
217
218
#if defined(TCCR4A)
219
case
TIMER4A:
220
//connect pwm to pin on timer 4, channel A
221
sbi(TCCR4A, COM4A1);
222
#if defined(COM4A0) // only used on 32U4
223
cbi(TCCR4A, COM4A0);
224
#endif
225
OCR4A = val;
// set pwm duty
226
break
;
227
#endif
228
229
#if defined(TCCR4A) && defined(COM4B1)
230
case
TIMER4B:
231
// connect pwm to pin on timer 4, channel B
232
sbi(TCCR4A, COM4B1);
233
OCR4B = val;
// set pwm duty
234
break
;
235
#endif
236
237
#if defined(TCCR4A) && defined(COM4C1)
238
case
TIMER4C:
239
// connect pwm to pin on timer 4, channel C
240
sbi(TCCR4A, COM4C1);
241
OCR4C = val;
// set pwm duty
242
break
;
243
#endif
244
245
#if defined(TCCR4C) && defined(COM4D1)
246
case
TIMER4D:
247
// connect pwm to pin on timer 4, channel D
248
sbi(TCCR4C, COM4D1);
249
#if defined(COM4D0) // only used on 32U4
250
cbi(TCCR4C, COM4D0);
251
#endif
252
OCR4D = val;
// set pwm duty
253
break
;
254
#endif
255
256
257
#if defined(TCCR5A) && defined(COM5A1)
258
case
TIMER5A:
259
// connect pwm to pin on timer 5, channel A
260
sbi(TCCR5A, COM5A1);
261
OCR5A = val;
// set pwm duty
262
break
;
263
#endif
264
265
#if defined(TCCR5A) && defined(COM5B1)
266
case
TIMER5B:
267
// connect pwm to pin on timer 5, channel B
268
sbi(TCCR5A, COM5B1);
269
OCR5B = val;
// set pwm duty
270
break
;
271
#endif
272
273
#if defined(TCCR5A) && defined(COM5C1)
274
case
TIMER5C:
275
// connect pwm to pin on timer 5, channel C
276
sbi(TCCR5A, COM5C1);
277
OCR5C = val;
// set pwm duty
278
break
;
279
#endif
280
281
case
NOT_ON_TIMER:
282
default
:
283
if
(val < 128) {
284
digitalWrite(pin, LOW);
285
}
else
{
286
digitalWrite(pin, HIGH);
287
}
288
}
289
}
290
}
Да вроде как верно:
135 это к 129 - й
136 к 121 - й
Да вроде как верно:
135 это к 129 - й
136 к 121 - й
ага, спасибо.
*привет, hugoboss317, как там арабы поживают?
Просьба не забивать тему. Пожалуйста. Про endif правильно ответили. Hugo, вырос, так держать!
;) Без подколок, честно.
Я и так уже здесь почти не появляюсь, читать срач нет времени, ушёл в stm32, да cubietruck мучаю. Если интересно, лучше в отдельной теме.
Однако, свой Леонардо время от времени юзаю, что бы побырому что нибудь проверить.
openhab мучаю или он меня. Пока свободно, можно посмотреть здесь http://kisoft.ru:8081/openhab.app?sitemap=home данные реальные. Пока что открыто, потому что это только монитор, без управления. Другой вариант http://kisoft.ru:8081/greent
Если интересно, расскажу в другой теме.
Надеюсь на понимание. Спасибо
Это в КубическихТракторах такая встроенная вебхрень? или в arduino leonardo веб влезла?
мне актуальенько вайфайные esp8266 приползут надо будет затылок чесать :)
все стало кажется понятно
разработано на java
странички вроде живенько шлет
На КубическомТракторе что-то еще можно делать с ОткрытымКоммутатором?
боюсь если яву в дуе не засунуть ардуинами тут пахнуть не будет
ну вот и пофлудили
по теме совестимости ОперационныхСистем
4 дня долбался
думал всякие дребезги повторы пролезают на веселеньком питании от USB-OTG Android Nexus 7
осцилоскоп показывает напруги чуток ниже 5в но импулсы от енкодера четкие однозначнопонимаемые
ардуинологически тоже четко одна команда декодирована и послана
На Windows7 крутит медиагромкость по чуть чуть на Android KitKat 4.4.4 енкодер делает один импульс а громкость без остановки ползет или в максимум или в минимум
прикольненько так
отпускание кнопки оказалось андроиды сами не делают
им об этом надо сказать конкретно
стоять сволоч я кнопку видишь уууужеееее выыытяяяягииивааааююююю
вот прикол
короче дарю код Win/Lin только что отладил
01
//Encoder- только громкость------------------------------------------------------------------------------------------------------------------------------------------
02
void
EncoderDecoder(){
03
// currentTime = millis();//запомнили время
04
// if(currentTime>=(loopTime+0.5)){//если прошло 5мс=200Гц на Windows7 нет повторов на Android KitKat4.4.4 боремся с повторами ОС попытка притормозить
05
varEncoderA=digitalRead(PINENCODERA);
06
varEncoderB=digitalRead(PINENCODERB);
07
if
((!varEncoderA)&&(varEncoderA_prev)){
// ловим ассинхронность изменения
08
if
(!varEncoderB){
09
r2.code=HID_VOLUP; HID_SendReport(3,&r2,
sizeof
(
struct
cr));
//press
10
r2.code= 0x0000; HID_SendReport(3,&r2,
sizeof
(
struct
cr));
//release for android kitkat4.4.4 Serial.println(r2.code,HEX);//Serial.println("HID_VOLUP");//test
11
}
12
else
{
13
r2.code=HID_VOLDOWN; HID_SendReport(3,&r2,
sizeof
(
struct
cr));
//press
14
r2.code= 0x0000; HID_SendReport(3,&r2,
sizeof
(
struct
cr));
//release for android kitkat4.4.4 Serial.println(r2.code,HEX);//Serial.println("HID_VOLDOWN");//test
15
}
16
}
17
varEncoderA_prev = varEncoderA;
// сохраняем значение А для следующего цикла
18
// loopTime = currentTime;//запомнили время
19
// }
20
}
21
//Encoder----------------------------------------------------------------------------------------------------------------------------------------------------------------
эх боюсь атмегой8...168 тут обделаться или не отделатся :)
думаю ветка ATmega16 без перспективы
актуальный код засунуть становится труднее и труднее без трудозатраных ухищрений
Верной дорогой идем к Синклеру 64килобайта + магнитофон + мамин телевизор по новой цене.
Сервер сейчас на Synology DS414 (это NAS такой). В дальнейшем, скорей всего перелезет на cubietruck, там видно будет.
Так что ардуино тут и не пахнет ;)
Датчики на 1-wire, метеостанция готовая - netatmo.