Нашел интересный клон ардуино уно, на которой дополнительно разведен десяти контактный разъем для usbasp или аналогичных программаторов (не придется думать о переходниках на 6pin). Так же на плате есть две кнопки, которые можно подключить к любому выводу, причем одна подтянута к 5В, вторая притянута к земле. Кому интересно, читаем дальше.
Для начала внешний вид платы, чтобы было более наглядно о чем речь
Микросхема для usb переходника
На плате есть два дополнительных вывода, каждый из которых соответствует своей кнопке. соединив KEY_H с любым выводом ардуино, мы получим аналог, например, вот такой схемы:
Т.е. одна перемычка здорово экономит место на макетной плате и упрощает схему. К тому же в целях эксперимента или обучения, мы можем пользоваться как подтянутой к 5В кнопкой, так и стянутой к GND. Пожалуй это лучшее, что есть в данной модели, но, чтобы можно было более наглядно увидеть разницу я собрал для сравнения две одинаковые схемы на макетной плате с двумя ардуинами:
две одинаковые схемы
вот вариант, когда обе кнопки находятся на макетной плате, смотрится вполне нормально, все работает.
вот схема с кнопками, разведенными на самой плате ардуино, проводов на порядок меньше, а еще не тратится место на кнопки и резисторы, а главное, работает точно так же. Разница на лицо.
код, ардуино IDE его переваривает
При нажатии на кнопку, загорается диод. Если писать аналогичный код на языке ардуино, то объем занятой памяти получается раза в 2-3 больше, если кто не верит — можете проверить потратив немного времени. Для себя убедился, что для простейших задач лучше писать на С, но для работы с датчиками и шилдами — библиотеки слишком сильное искушение, возможно когда-то попробую их распотрошить для более грамотной оптимизации кода.
Цель приведенного ниже обратить внимание фанатов, что существует альтернатива.
void preset(void)
{
//назначение портов ардуино: 8 и 9 кнопки.
//8 - стягивыющий к земле, ставим на выход
//9 - подтягивающий к 5V, ставим на вход
//10, 11 светодиоды, на выход
DDRB=0b00001101;//
//на 8 выводе ставим высокий уровень
PORTB=0b00000001;
}
int main(void)
{
preset();
while(1)
{
//если на 9 выводе высокий уровень - кнопка нажата
//на 9 вывод пришли 5V
//включаем диод на 10 выводе ардуино
if ( (PINB&0b00000010)==0b00000010)
{
PORTB|= (1<<2);
}
//иначе на 10 выводе низкий уровень
else
{
PORTB&= ~(1<<2);
}
//если на 8 выводе низкий уровень - кнопка нажата
//8 вывод подключен к земле
if ((PINB&0b00000001)==0)
{
//включаем диод на 11 выводе
PORTB|= (1<<3);
}
//иначе на 11 выводе низкий уровень
else
{
PORTB&= ~(1<<3);
}
}
}
вот ссылка на статью, которая мне очень помогла в начале пути
chipenable.ru/index.php/programming-avr/item/4-uchebnyy-kurs-kak-rabotat-s-bitami-makroopredeleniya.html#comment-437
Возможно кому-то все же будет интересен переход с ардуино IDE на С, поэтому приведу описание выводов ардуинки и соответствующие им выводы микросхемы
В итоге добавлю, что как только вы накроете описанную плату шилдом, все преимущества испаряются и остается функционал старой доброй arduino uno. В общем я испытал от покупки эстетическое удовольствие + еще любопытный клон в коллекцию.
И да, при покупке без приключений не обошлось, плата пришла с небольшим дефектом, который мне устранили варварским способом.
загнутую ножку поддели пинцетом, вырвали из панели пассатижами, подогнули чутка, воткнули обратно и припаяли. На удивление все заработало. Так что на эту плату я получил солидную скидку.
За плату зачет, за косяк при сборке огромный минус, но в целом к покупке рекомендовать можно.
А ATMEGA16U2 лучше тем, что ее тоже можно прошить, например в USB-HID устройство.
Куда подключать если устройство собрано на arduino nano и требует подклбчения к usb во время работы?
я отчетливо вижу rx/tx/gnd/5v/rst
вы жаловались, что кекст под маком — глючный, я предложил вам не использовать штатный коннектор miniusb(или микро, не суть), а использовать наружные пины и отдельный usb2ttl.
Никто не мешает использовать отдельный преобразователь, если встроенный глючит.
Глючит НЕ ИНТЕРФЕЙС, глючат драйвера CH340/341 на MAC OS X.
Я не жаловался когда об СН340 написал ;) а просто поделился опытом. Возможно кто то не знает этого. Что бы не купил пачку как я…
А в общем проблема с дровами известная но китайцы пока не чешутся.
Что поделать, есть у меня определенный интерес подержать в руках новый вариант сборки, благо понадобилась плата, а разница не так, чтобы очень большая, еще я заказал зиф палельки и планировал прошивать на ней атмеги. Вот я и подумал, а почему бы и нет? Заодно сделаю обзор, может кому-то и понравится ардуино именно в таком варианте? В худшем случае получу еще одну ардуину. Получилось все благополучно.
Ну и C — не альтернатива. Используя «привычные» для Arduino методы инициализации пинов и прочего (присущее для ардуинки) мы все так же используем C. Просто вместо не очень удобоваримого PORTB=0b00000001; вызывается функция digitalWrite которая внутри себя делает все тот же PORTB=0b00000001, да это лишний код местами, лишние тики, но как бы в этом и суть Arduino. Вы видимо забыли — ардуинка разрабатывалась как стартовая ступенька в изучении МК.
И коли Вы так уже решили показать альтернативы (хотят тут не альтернатива вовсе), то почему Вы тогда не показали ASM? Там компилированный проект еще меньше весил и еще шустрее работал.