Вчера из сообщения в блоге Hack-a-Day с интересом узнал о проекте Energia - ArduinoIDE для работы... с Launchpad!
Конечно, не все пока там гладко - на текущий момент насчитывается как минимум 18 проблем, в основном народ просит прикрутить библиотеки и починить Linux-дистро (его, кстати, можно временно скачать по ссылке в описании проблемы).
Тем не менее, с дистрибутивом под Windows все ОК, и его вполне можно опробовать в работе.
Технически, Energia - это форк на github-е от ArduinoIDE 1.0, поэтому выглядит всё более, чем привычно, разве что в красных тонах.
Как видите - в качестве типов плат сразу перечисляются совместимые с LaunchPad MSP, а в качестве программатора - единственный rf2500.
Все примеры на месте, но из библиотек адаптировано всего три:
- SPI;
- Wire;
- TimerSerial
Последняя, впрочем - это вариант HardwareSerial, которая и так уже входит в ядро Arduino для ATMEL.
Скетчи, разумеется, пишутся по-прежнему на Wiring. Синтаксис за пределами Wiring тоже остался вполне похож - используется msp430-gcc 4.6.3, с самыми последними патчами. Карту распределения пинов можно найти в единственном файле-варианте:
+-\/-+
VCC 1| |20 GND
(A0) P1.0 2| |19 XIN
(A1) P1.1 3| |18 XOUT
(A2) P1.2 4| |17 TEST
(A3) P1.3 5| |16 RST#
(A4) P1.4 6| |15 P1.7 (A7) (SCL) (MISO) depends on chip
(A5) P1.5 7| |14 P1.6 (A6) (SDA) (MOSI)
P2.0 8| |13 P2.5
P2.1 9| |12 P2.4
P2.2 10| |11 P2.3
+----+
Таким образом, чтобы, например, установить высокий уровень на пине P1.1, можно написать digitalWrite(P1_1, HIGH). Можно обращаться к пинам и по номерам, в следующем соответствии с символическими:
Символическое имя | Номер пина |
P1_0, RED_LED | 2 |
P1_1 | 3 |
P1_2 | 4 |
P1_3, PUSH2 | 5 |
P1_4 | 6 |
P1_5 | 7 |
P2_0 | 8 |
P2_1 | 9 |
P2_2, TEMPSENSOR | 10 |
P2_3 | 11 |
P2_4 | 12 |
P2_5 | 13 |
P1_6, GREEN_LED | 14 |
P1_5 | 15 |
Тут стоит сразу учесть, что P2_X доступны только для контроллеров в 20-контактном исполнении, и для 14-контактных они будут отсутствовать, создавая разрыв в нумерации. С другой стороны, позиционность будет сохранена - т.е. при замене 14-контактного на 20-контактный в скетче не понадобится менять ровным счетом ничего.
Для избранных пинов доступен аппаратный ШИМ. Пины 3, 4, 14 доступны всегда, для МК в 20-контактном корпусе добавляются все пины P2_X. Есть и аналоговые пины, так что если на кристалле есть АЦП, будет работать analogRead().
Интересно? ;) Если да, то изучите wiki, закажите себе LaunchPad и дерзайте!
Я практически сразу обратил внимание на то, что реальная задержка, создаваемая delay() оказывается в два раза короче, чем указано. Возможно, это как-то связано с тактовой частотой - судя по boards.txt скетчи компилируются в расчете на 16МГц.
Так или иначе, уверен - Роберт Весселс (автор проекта) будет признателен за любую помощь. Если вы находите LaunchPad более привлекательным - помогите ему с адаптацией ArduinoIDE: уверен, что тогда число вовлеченного народа должно значительно возрасти ;)