Страница 2 из 2

Re: Arduino - общие вопросы

Добавлено: 01 янв 2016, 09:10
Maxekb77
Locko6, да никаой чип тот же 328p.

AVK74, ну по сорости написания г-кода она рекордсмен, что в общем то удобно

Re: Arduino - общие вопросы

Добавлено: 01 янв 2016, 11:32
grakun
AVK74 писал(а):Не используйте ардуину как программную платформу
А что она чего то не умеет?

Re: Arduino - общие вопросы

Добавлено: 01 янв 2016, 22:53
Locko6
AVK74 писал(а):Просто совет. Не используйте ардуину как программную платформу (как аппаратная - это отличный выбор) Это же игрушка для подростков по сути.
Проясните пожалуйста для новичка, что такое программная платформа и что такое аппаратная? Пытался прояснить в яндексе, гугле, википедии этот вопрос но так и не понял точно в чём разница.

Подскажите, через Arduino Mega каким количеством ШД можно управлять? Пока я точно выяснил, что минимум три, больше пока не встречал.

Re: Arduino - общие вопросы

Добавлено: 01 янв 2016, 23:31
Morroc
Это ведь не контроллер ШД, штука универсальная, что за прошивку или скетч вы в него собрались заливать ? Вот там и смотрите сколько ШД.

Re: Arduino - общие вопросы

Добавлено: 02 янв 2016, 06:13
AVK74
Locko6 писал(а):Проясните пожалуйста для новичка, что такое программная платформа и что такое аппаратная? Пытался прояснить в яндексе, гугле, википедии этот вопрос но так и не понял точно в чём разница.

Подскажите, через Arduino Mega каким количеством ШД можно управлять? Пока я точно выяснил, что минимум три, больше пока не встречал.
Аппаратная, это контроллер на плате - atmega в данном случае.
Программная, это Arduino IDE.
Вопрос о количестве двигателей некорректен, можно управлять таким количеством двигателей на сколько хватит портов контроллера. Другое дело с какой скоростью и отзывчивостью.

Re: Arduino - общие вопросы

Добавлено: 02 янв 2016, 12:55
grakun
Maxekb77 писал(а):ну по сорости написания г-кода она рекордсмен
Если команды типа pinMode(ledPin, OUTPUT); digitalWrite(ledPin, ledState); заменить на DDRB = B00000111; PORTB=B00000011 то очень хороший результат и по скорости работы. В Arduino IDE это можно.

Re: Arduino - общие вопросы

Добавлено: 02 янв 2016, 13:48
Maxekb77
grakun, г-код имелось в виду написание кода людьми которые далеки от программирования

Re: Arduino - общие вопросы

Добавлено: 02 янв 2016, 14:31
grakun
Maxekb77 писал(а):имелось в виду написание кода людьми которые далеки от программирования
Понятно.

Re: Arduino - общие вопросы

Добавлено: 02 янв 2016, 15:35
Morroc
grakun писал(а): Если команды типа pinMode(ledPin, OUTPUT); digitalWrite(ledPin, ledState); заменить на DDRB = B00000111; PORTB=B00000011 то очень хороший результат и по скорости работы. В Arduino IDE это можно.
Можно библиотеку еще взять, где это в более удобочитаемом виде. Типа такой http://istarik.ru/blog/arduino/1.html. Штатные digitalWrite действительно тормозные, но это конечно смотря чем управлять. Еще с прерываниями мудрить надо, в остальном можно накодить много много г-кода и даже более менее работать будет :D Есть определенный плюс в этом ардуинстве - евойный "wiring" с IDE используется и для плат с stm32 и для esp8266 со встроенным wifi, с некоторыми переделками можно портировать код туда для увеличения скорости или сетевых возможностей (ну или просто г-код настолько г, что в atmega уже не влазит).

Re: Arduino - общие вопросы

Добавлено: 02 янв 2016, 16:22
grakun
Morroc писал(а):Можно библиотеку еще взять
«CyberLib», работает быстро, пробовал в ней работать. Но все же медленней чем прямая команда.
С прерываниями работал мало, но проблем не было, даже Attiny13 все заработало. Код тоже можно сделать небольшого объема. Пример кода на Attiny13 (готовый инфракрасный пульт). Сравните с кодом на pic12 (прикреплен внизу.
ikpult_pic12_prg_rc5.7z
(2.68 КБ) 293 скачивания
)

#include <avr/io.h>
#include <avr/sleep.h>
#include <avr/power.h>
#include <avr/interrupt.h>
#include <avr/wdt.h> // здесь организована работа с ватчдогом



ISR (WDT_vect) // что выполнить после прерывания
{
WDTCR =0b01000000;// разрешаем прерывания по ватчдогу. Иначе будет резет.
}
//____________________________________
void p()// подпрограмма разрешение прерывания сторожевым таймером WDTCR
{
wdt_reset();
wdt_enable(WDTO_1S);
WDTCR =0b01000000;
sei();
}
void slip()// подпрограмма сон
{
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
sleep_cpu();
//sleep_disable()
}

//_____________________________________

int main( )
{
DDRB=0B010000;

while(1)
{
if (PINB==0B0001111){p(); }// будет прерывание сна
//после прерывания выполнится проверка клавиш, если клавиша нажата выполнится подпрограмма в это время
// прерывания отключены

if (PINB==0B001110){k1();}
if (PINB==0B001101){k2();}
if (PINB==0B001011){k3();}
if (PINB==0B000111){k4();}
if (PINB==0B001100){k5();}
if (PINB==0B001010){k6();}
if (PINB==0B000110){k7();}
if (PINB==0B001001){k8();}
if (PINB==0B000101){k9();}
slip();// подпрограмма сон
}
return 0;

}
//____________________________________________
void bt1()// генерация 1
{
delayMicroseconds(1000);
for(int n=0; n<=31;n++){gen();}
}
void bt0()// генерация 0
{
for(int n=0; n<=31;n++){gen();}
delayMicroseconds(1000);
}
void gen()//генерация импульсов, время подбирается повторением
{
PORTB=0B010000; PORTB=0B010000; PORTB=0B010000; PORTB=0B010000;
PORTB=0B010000; PORTB=0B010000; PORTB=0B010000; PORTB=0B010000;
PORTB=0B010000;PORTB=0B010000;

PORTB=0B000000;PORTB=0B000000; PORTB=0B000000;PORTB=0B000000;
PORTB=0B000000;PORTB=0B000000; PORTB=0B000000;PORTB=0B000000;
PORTB=0B000000;PORTB=0B000000;
}
void k1(){ bt1();bt1();bt0();bt0();bt0();bt0();bt0();bt1();
bt0();bt0();bt0();bt0();bt0();bt1(); delay(500);}
void k2(){ bt1();bt1();bt0();bt0();bt0();bt0();bt0();bt1();
bt0();bt0();bt0();bt0();bt1();bt0(); delay(500);}
void k3(){ bt1();bt1();bt0();bt0();bt0();bt0();bt0();bt1();
bt0();bt0();bt0();bt1();bt0();bt0(); delay(500);}
void k4(){ bt1();bt1();bt0();bt0();bt0();bt0();bt0();bt1();
bt0();bt0();bt1();bt0();bt0();bt0(); delay(500);}
void k5(){ bt1();bt1();bt0();bt0();bt0();bt0();bt0();bt1();
bt0();bt1();bt0();bt0();bt0();bt0(); delay(500);}
void k6(){ bt1();bt1();bt0();bt0();bt0();bt0();bt0();bt1();
bt1();bt0();bt0();bt0();bt0();bt0(); delay(500);}
void k7(){ bt1();bt1();bt0();bt0();bt0();bt0();bt0();bt1();
bt1();bt0();bt0();bt0();bt0();bt1(); delay(500);}
void k8(){ bt1();bt1();bt0();bt0();bt0();bt0();bt0();bt1();
bt1();bt0();bt0();bt0();bt1();bt0(); delay(500);}
void k9(){ bt1();bt1();bt0();bt0();bt0();bt0();bt0();bt1();
bt1();bt0();bt0();bt1();bt0();bt0(); delay(500);}

Re: Arduino - общие вопросы

Добавлено: 02 янв 2016, 19:04
AVK74
Вот в этом вся суть ардуинщиков.
Давайте найдем библиотеку для этого и для этого и для этого тоже.
Чо там внутре этих библиотек смотреть страшно, ибо писано такими же далекими от электроники и программирования людьми.
И потом на форумах начинаются безумные темы с холиварами.
AVR сам по себе контроллер несложный и очень удобный.
Берем Евстифеева "Микроконтроллеры AVR семейства classic и mega" для вникания в аппаратную часть.
И чонить по Си типа "CodeVision пособие для начинающих" для программной.
И погнали. Без базовых знаний не обойтись. Вернее обойтись можно (ардуинщики доказали) но будет грустно и постоянные непонятки при малейших проблемах.
То есть, надо совершенно четко представлять как работает контроллер, таймера, прерывания, регистры, АЦП, ШИМ и т.д.
Это на самом деле совсем не сложно.

Re: Arduino - общие вопросы

Добавлено: 02 янв 2016, 19:41
Morroc
Да, но ардуинить еще проще, когда нужен конкретно АЦП (допустим нас не устраивает чем то analogRead, хотя в большинстве случаев то он устраивает) - смотрим даташит. С библиотеками похожая ситуация, не работает одна - берем другую, третью - обычно этого достаточно, а уж если хочется странного - лезем внутрь. Как лего в общем - кубики стандартные, но их немало, соединяются легко, доработке напильником поддаются :) Ну и конечно нужно иметь представление о программировании вообще и отладке в частности, вот как начинающие ардуинщики с этим справляются я не представляю - то ли методом тыка то ли просто не пишут ничего сложного.

Re: Arduino - общие вопросы

Добавлено: 02 янв 2016, 20:23
Maxekb77
на мой взгляд, 80% потребностей, спроси датчик - мигни диодом - вкл\выкл двигателем. большинству наверно достаточно.

Re: Arduino - общие вопросы

Добавлено: 02 янв 2016, 20:34
grakun
AVK74 писал(а):безумные темы с холиварами
Я лишь высказал свое мнение, Arduino позволяет сделать рабочие программы. Вы написали что это "игрушка для подростков по сути". Естественно получится тема с холиваром, без вариантов. Очень мнения разные, кто хочет пускай спорит. Мне не хочется.

Re: Arduino - общие вопросы

Добавлено: 02 янв 2016, 23:38
selenur
AVK74 писал(а):Вот в этом вся суть ардуинщиков.
Давайте найдем библиотеку для этого и для этого и для этого тоже.
Чо там внутре этих библиотек смотреть страшно, ибо писано такими же далекими от электроники и программирования людьми.
И потом на форумах начинаются безумные темы с холиварами.
AVR сам по себе контроллер несложный и очень удобный.
Берем Евстифеева "Микроконтроллеры AVR семейства classic и mega" для вникания в аппаратную часть.
И чонить по Си типа "CodeVision пособие для начинающих" для программной.
И погнали. Без базовых знаний не обойтись. Вернее обойтись можно (ардуинщики доказали) но будет грустно и постоянные непонятки при малейших проблемах.
То есть, надо совершенно четко представлять как работает контроллер, таймера, прерывания, регистры, АЦП, ШИМ и т.д.
Это на самом деле совсем не сложно.
Полностью согласен!
Но как начальный путь в электронику, для большинства, (и для меня тоже) очень простой, вначале делаешь как попало, главное что-бы работало, более менее стабильно. А дальше начинаешь понемногу втягиваться, и углубляться в дебри микроконтроллера.
Сейчас я свободно пишу и на Си и на асме под AVR, и STM, но если-бы не ардуина, которая была тем самым мостиком в электронику, я навряд ли смог добиться текущих результатов.

Сразу пытаться программировать не имея базиса, под микроконтроллер, не каждому хватит усидчивости, простой пример: на ардуине получить значение АЦП (аналогового сигнала) дело всего одной строки, если попытаться получить значение своими силами, без использования библиотек, наступаешь на разные грабли, одна из которых состоит в том, что после настройки параметров работы АЦП, необходимо получить минимум 3-4 раза значение АЦП, что-бы иметь достоверный результат. Конечно в документации всё это написано, но размер этой документации далеко не маленький... :-)

Re: Arduino - общие вопросы

Добавлено: 03 янв 2016, 08:12
AVK74
selenur писал(а):ардуине получить значение АЦП (аналогового сигнала) дело всего одной строки
Да это в любой среде уже давно так
В том же CV read_adc(ch) и все. Там же элементарно все. Запросили, подождали, получили результат.
Там функция в две строчки.