Pull to refresh

Сравнение плат Arduino – Марсоход

Reading time5 min
Views6.7K
Странным образом развивается человечество. Технический прогресс настолько стремительно изменил жизнь человека, что мы с вами как-то не представляем себе другую жизнь, без сотовых телефонов, компьютеров, ноутбуков, цифровых фоторамок и фотоаппаратов. Кажется все это было всегда. И кто все это придумывает и делает? У этих инженеров наверное супер-мозг? А знаете что? Вы и сами можете попробовать сделать что-нибудь электронное и удивительное. Может быть созданное вами «изделие» и не будет продаваться миллионными тиражами, но вот удивить знакомых Вы на самом деле сможете. Если Вы хоть немного в душе радиолюбитель, и не боитесь слова паяльник, и у Вас есть немного упорства – у Вас все получится.

С чего начать? Пожалуй есть две интересные возможности – это плата Arduino или плата Марсоход. Попробую объяснить, что же это такое.



Прежде всего, обе платы изначально предназначены для электронного моделирования – создания всяческих электронных игрушек, роботов, машинок и других приколюшек. Это своего рода «электронные конструкторы». С их помощью можно изучать азы схемотехники и электроники и программирования, а можно и создавать реальные, полезные в быту простые устройства автоматики. Интересно, что схемы этих плат-конструкторов находятся в свободном доступе, опубликованы производителями в интернете. Примеров реализованных «устройств» для Arduino так же много в интернете.
Плата Марсоход еще не так хорошо известна, но его авторы сами делают машинки-роботы и всякие игрушки на ее основе. Все исходные тексты проектов так же находятся у них на сайте в свободном доступе.

Вот такая получается у нас сводная таблица:

image

Дальше, пожалуй, сравнивать в таблице не получится :-)
Давайте просто посмотрим на некоторые технические возможности этих плат.

Плата Arduino Duemilanove (ATmega168)

image

* Питание: +5V
* Число цифровых входов/выходов: 14
* Число аналоговых входов: 6
* Допустимый ток входа/выхода 40 mA
* Объем флеш памяти: 16 KB
* Объем SRAM: 1 KB
* Объем EEPROM: 512 bytes
* Частота генератора: 16 MHz

Плата Марсоход

image

* Напряжение питания: 2.5-4.6в (VCC)
* Всего пользовательских пинов: 22
* Из них повышенной мощности (для моторов): 6
* Максимальный ток одного пина — 25 ма
* Максимальный ток «моторого» пина — 250 ма
* Входное напряжение на пин от -0.7В до VCC+0.7В
* Внутренний генератор чипа ~ 5мГц
* Количество логических элементов/триггеров: 240
* Объем флеш памяти: 512х16 бит = 1024 байт.

При беглом просмотре этих характеристик параметры платы Марсоход несколько удивляют. В самом деле, объем флеш памяти гораздо меньше, чем у ATmega168, оперативной памяти SRAM – вообще нет. Да и что такое «количество логических элементов/триггеров»? И как-то их мало – всего 240…

Пожалуй сейчас мы добрались до самого главного и принципиального отличия этих плат. Для платы Arduino нужно писать программы на СИ-подобном языке. А вот для платы Марсоход нужно «рисовать схемы электрические-принципиальные». Конечно, можно вместо схем применять специальные языки описания аппаратуры типа Verilog или VHDL, но это сути не меняет. Проект сделаный для платы Марсоход это все таки схемотехнический проект.

Возможно тем, кто начинал с программирования микроконтроллеров покажется все это довольно трудным. Тут действительно есть над чем подумать. На самом деле типичное программирование на языке типа СИ – это описание последовательных действий процессора. В ПЛИС все не так. Здесь требуется описывать многие синхронные процессы, которые идут параллельно. Это описание передачи битов данных от регистра к регистру.

Предлагаю посмотреть конкретные примеры самых простых проектов. Будем делать одно и то же, но на разных платах: Arduino и Марсоход.
Например, возьмем простой пример «Button», опубликованный на сайте Arduino.
В этом примере микроконтроллер периодически опрашивает состояние одной входной линии, к которой подключена кнопочка. Если кнопка не нажата, то на входной линии будет значение «ноль» (линия немного притянута к земле резистором). Если кнопка нажата, то на линии будет напряжение питания, то есть «единица». Микроконтроллер записывает в порт это значение и подключенный светодиод загорается или гаснет. По моему – это отличный пример. Вот посмотрите его исходный текст:

// constants won't change. They're used here to
// set pin numbers:
const int buttonPin = 2; // the number of the pushbutton pin
const int ledPin = 13; // the number of the LED pin

// variables will change:
int buttonState = 0; // variable for reading the pushbutton status

void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}

void loop(){
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);

// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (buttonState == HIGH) {
// turn LED on:
digitalWrite(ledPin, HIGH);
}
else {
// turn LED off:
digitalWrite(ledPin, LOW);
}
}


Из программы видно, что микроконтроллер читает из порта значение входа куда подключена кнопка и затем записывает в другой порт один бит, чтобы зажечь светодиод.

Честно говоря не понимаю почему создатели этого примера не написали вот так:

void loop()
{
digitalWrite(ledPin, digitalRead(buttonPin) );
}


По моему так гораздо понятней :-)
Нужно обратить внимание, что поскольку это программа выполняется микроконтроллером, то конечно, между моментами опроса состояния кнопки проходит время пропорциональное количеству инструкций микропроцессора всего цикла loop(){...} и его тактовой частоты.

А теперь давайте посмотрим, как то же самое сделать на базе платы Марсоход. Нам нужно сделать схему проекта. Выглядеть она будет примерно вот так:

image

По сути дела в нашей схеме всего один провод от входа, куда подключена кнопка, к выходу куда подключен светодиод. Конечно есть еще между ними логический элемент – «НЕ». Он из сигнала «ноль» делает «единицу» и наоборот. Этот элемент инвертор нужен, так как схема платы Марсоход отличается от, той что предложена у Arduino. Там кнопка подключена к напражению питания, а второй контакт идет на вход ATmega168 и притянут к земле через резистор. На плате Марсоход все наоборот. Кнопка подключена к земле, а второй контакт идет на вход чипа и притянут к напряжению питания через слабый резистор (Weak pull-up resistor). Из-за этого логика получается обратной и нужен элемент «НЕ».

Обратите внимание, что такой проект будет «работать» гораздо быстрее, чем программа в Arduino. Здесь кнопка не опрашивается программно, а фактически присоединяется проводом через инвертор от входа к выходу. Задержка распространения сигнала будет буквально несколько наносекунд. Таким образом, потенциально CPLD сможет выполнять гораздо более быстродействующие функции, чем микроконтроллер.

И еще одно замечание.
Конечно большие проекты не рисуются схемами. Вот так могла бы выглядеть та же схема, но написанная на языке программирования аппаратуры Verilog:

module test( input wire key, output wire led );
assign led = !key;
endmodule


Возможно этот пример с кнопкой Вам покажется каким-то тупым. Действительно смысла в нем не очень много. Однако он проясняет самое главное. Делая проект для платы Марсоход Вы устанавливаете в проект нужные логические элементы типа «И», «ИЛИ», «НЕ», а так же триггера и соединяете их проводами. Среда разработки Altera QuartusII автоматически разместит всю логику вашего проекта внутри чипа и соединит нужные элементы проводами.

В целом можно заметить так. Несомненно обе платы заслуживают внимания. Что-то проще сделать на платформе Arduino, что-то на платформе Марсоход. Некоторые идеи я думаю можно реализовать на одной плате и нельзя на другой.

Мне больше нравится Марсоход. Он заставляет больше думать и делать удивительные вещи с помощью казалось бы совершенно маленьких ресурсов. Обязательно посетите этот сайт marsohod.org и хотя бы посмотрите примеры уже реализованных проектов. Там есть описания, можно выкачать сами проекты и есть видеоролики. Видеоролики показывают, как работают машинки роботы, как управляются они с помощью пультов дистанционного управления, машинки реагируют на свет и выезжают из лабиринтов. И многое другое!
Tags:
Hubs:
Total votes 15: ↑13 and ↓2+11
Comments12

Articles