В самый последний день ноября нас наконец-то посетил исторический релиз ArduinoIDE 1.0.
Конечно, я должен был опубликовать эту статью еще недели две назад. Но я постоянно откладывал этот пост - в основном из-за запаздывания материалов на официальном сайте arduino.cc, без которых оставалось некоторое количество вопросов.
Итак, в отличие от остальных версий ArduinoIDE выпуск 1.0 происходил не так, как обычно. Сначала было выпущено два релиз-кандидата, чтобы дать всем привыкнуть к нововведениям, которые были известны заранее: потребуется адаптация библиотек, появится новая плата Arduino Leonardo, изменится стандартная физическая раскладка пинов (должны добавиться четыре). После второго релиз-кандидата вдруг неожиданно вышла ArduinoIDE 0023, в которой главным событием стало использование optiboot 4.4 и переход с ATmega8u2 на ATmega16u2 в платах Uno, Mega2560 и ADK.
К счастью, на официальном веб-сайте все-таки появились актуальные фото последних ревизий плат и стало видно, что добавлено 3 дополнительных пина:
- на верхней колодке - SDA, SCL:
Четвертый пин (рядом с IOREF) оставили свободным - для будущих расширений.
Дублирование SCL и SDA выглядит логичным - стараясь сохранить универсальность раскладки, авторы с самого начала зафиксировали положение UART (пины 0 и 1 за RX и TX), затем обожглись на пинах SPI при создании Mega (с тех пор SPI надо брать исключительно с вилки ICSP). Видимо, есть желание или вынужденная необходимость стыковать шилды также и по I2C - а они-то как раз, увы, фиксированного положения пока не имели.
Появление IOREF - прямое наследие Arduino Due. Будущая ARM/Cortex плата была упомянута всего однажды, но похоже, что именно ей мы обязаны появлением Arduino pinout 1.0. Поскольку Due трехвольтовая, то предполагается, что будущие Shield-платы будут способны через этот пин адаптировать уровень логической единицы для обмена с основной платой. Соответственно, на IOREF должно подаваться VCC MCU (+5В, +3,3В или +1,8В).
В качестве варианта - на шилд-плате IOREF можно подключить к специальному чипу-согласователю уровней сигналов. Но тогда автоматически встает вопрос совместимости - что делать, если такой шилд подключен к "старой" плате, и IOREF попросту повис в воздухе? Городить на шилде специальную схему для такого случая? Оказывается, есть простой подход ;) Вот так, дешево и сердито, при помощи пары диодов Шоттки это реализовано в Arduino MotorShield R3:
Если брать в общем случае комбинацию новая плата+старый шилд, то вроде бы все нормально. В неиспользуемые старыми шилдами колодки ничего не втыкается. Но если старая плата принимает на себя новый шилд, то мне довольно ясно представляется, как эти дополнительные четыре ножки упрямо упираются в элементы, расположенные на месте несуществующих отверстий на старой плате (а они были, особенно в области IOREF!). Возможно, все пропало! придется их подрезать или отогнуть.
А вот c выходом релиза ArduinoIDE 1.0 по поводу Leonardo наступила некоторая неизвестность. Во-первых, определение Leonardo закомментировано в boards.txt, а во-вторых - ошибки в ядре и бутлоадере исправлены не до конца. А пофиксить их было бы довольно просто - достаточно посмотреть в исходники Teensy. Однако, положительный момент тоже присутствует - есть изменения в правильном направлении, а саму поддержку USB из ядра никуда не удалили. И если бы раньше я заключил, что выход Leonardo откладывается до следующего года, то с таким непредсказуемым развитием событий уже завтра может выйти ArduinoIDE 1.1, где оно будет. Собственно, такое бывало и раньше - выпускали новую IDE ради изменений в boards.txt.
Поэтому, для тех, кто хочет поэкспериментировать с Leonardo до его официального выхода - плата Freeduino 32u4 R2. Основное отличие от версии R1 - это шелкография, на которой теперь нанесены пины Arduino (сама раскладка осталась совместимой) :
Есть, правда, и один недочет - дополнительный аналоговый пин A11, он совмещен с цифровым D6. Напоминаю, что Freeduino 32u4 имеет на борту:
- микроконтроллер ATmega32u4 со встроенной поддержкой USB;
- 32K FLASH, 2.5K SRAM, 1K EEPROM;
- программирование через USB (ArduinoIDE), ISP и JTAG;
- 25 универсальных пинов, которые могут быть сконфигурированы в качестве входов или выходов, со встроенными подтягивающими резисторами;
- для 12 универсальных пинов (из 25) возможна работа в режиме 10-битного АЦП;
- для 7 пинов возможна работа в режиме аппаратного ШИМ;
- 1 х UART, 1 x I2C и 1 x SPI.
Владельцам Freeduino 32u4 R1, при переходе на ArduinoIDE 1.0 настоятельно рекомендую обновиться:
- freeduino32u4-variant-arduino1.0.tar.gz - только variant, без измененного ядра - гарантирует аутентичность окружения вашей ArduinoIDE 1.0rc2. Правда, не на всех пинах Freeduino32u4 будет ШИМ.
- freeduino32u4-core-arduino1.0.tar.gz - variant + core, чтобы всё работало корректно. Именно его я и рекомендую ставить, перетирая существующее core в дистрибутиве.
В обоих вариантах надо распаковать архивный файл в arduino-1.0/hardware/arduino и исправить boards.txt, добавив туда содержимое файла boards.txt.add:
leonardo1.name=Freeduino 32u4 leonardo1.upload.protocol=arduino leonardo1.upload.maximum_size=30720 leonardo1.upload.speed=1200 leonardo1.bootloader.low_fuses=0xde leonardo1.bootloader.high_fuses=0xda leonardo1.bootloader.extended_fuses=0xcb leonardo1.bootloader.path=diskloader leonardo1.bootloader.file=DiskLoader-Leonardo.hex leonardo1.bootloader.unlock_bits=0x3F leonardo1.bootloader.lock_bits=0x2F leonardo1.build.mcu=atmega32u4 leonardo1.build.f_cpu=16000000L leonardo1.build.core=arduino leonardo1.build.variant=freeduino32u4
На всякий случай, названия портов ATmega32u4 сохранены с противоположной стороны платы:
(хотя, кто будет туда заглядывать, если она уже вставлена в беспаечную макетку? ;)
Купить Freeduino32u4 можно здесь.
Так подскажите тем, кто не следит за темой в деталях: имеем ли мы ситуацию, что сейчас активны две ветки Arduino IDE - 0.x и 1.x? Тем, кто занимается более-менее плотно, стоит ли иметь одновременно установленные обе версии IDE? Какую версию стоит использовать новичкам? Спасибо.
ОтветитьУдалитьУ ArduinoIDE только одна ветка, и последняя стабильная версия все-таки 1.0
ОтветитьУдалитьНовичкам пока советую использовать 0023, поскольку только с ней будут работать все сторонние библиотеки. Но это продлится недолго - как только все разработчики библиотек сообразят, что к чему и выпустят новые версии.
Хреново что в 1.0 не работает пока ни один форк LiquidCristalRus :(
ОтветитьУдалить