Расширенная инструкция языка

Сергей Алексеевич
Offline
Зарегистрирован: 09.01.2015

Есть ли где-то исчерпывающее описание языка? Существующие инструкции какие-то уныло-вялые, с сайта arduino.cc я тоже не нашёл достаточно полезного.

Пример вопросов, которые мне не удалось решить:

1. Диапазон измерений, по типу: if(2>U>1) — простая задача, которая работает только в трактовке: if(2>U && U>1)

2. Подать половину напряжения на цифрвой порт, которое считывается с другого. Пример:

void setup(){pinMode(11, OUTPUT);}

void loop(){digitalWrite(11, digitalRead(12));} //подаю на 11 контакт 5 вольт, которые снял с 12го.

//но, когда мне надо подать 2,5 вольта, то:
void loop(){digitalWrite(11, digitalRead(12)/2);} //не работает

В связи с чем хотелось бы найти полноценную инструкцию

Coolerr
Offline
Зарегистрирован: 30.06.2014

По первому вопросу непонятно что не устраивает, да работает только так 

Про digitalWrite http://arduino.ru/Reference почитать отдельно, может принимать 2 значения HIGH или LOW. Посему, что такое HIGH/2 непонятно. Если есть желание получить такой эффект то лучше использовать analogRead и Write соответственно.

Сергей Алексеевич
Offline
Зарегистрирован: 09.01.2015

analogWrite даёт импульсный сигнал, а это неудобно. Если я чего-то не понимаю, то это опять же сводится к тому, что нужно внятное руководство.

Diemon
Offline
Зарегистрирован: 18.11.2011

Автор, почитайте что такое двоичная логика. И потом ответьте на вопрос: как в двоичной логике можно подать половинный сигнал? Тут мозги нужны, а не внятное руководство.

Сергей Алексеевич
Offline
Зарегистрирован: 09.01.2015

Я спрашиваю не про системы счисления. Либо предлагайте полезный материал, либо не засоряйте тему. 

dimax
dimax аватар
Онлайн
Зарегистрирован: 25.12.2013

Сергей Алексеевич,  изучите язык Си, хотя-бы основные команды и операторы. Изучите общую информацию по устройству и принципу работы микроконтроллеров, изучите даташит на ваш конкретный микроконтроллер. После этого все вопросы сами отпадут.

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Куда уж более внятно - цифровой вход на то и цифровой, что может быть только в двух состояниях.

Никаких промежуточных значений прочитать с него невозможно - только дискретно HIGH или LOW.

Если нужны промежуточные значения - используйте АЦП, который прикручен к аналоговым входам.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Не нравятся ответы, читайте доки.
Не нравится Си, используйте другой язык программирования.
Хотите холивара, продолжайте в том же духе.

Datak
Offline
Зарегистрирован: 09.10.2014

Сергей Алексеевич пишет:

analogWrite даёт импульсный сигнал, а это неудобно. Если я чего-то не понимаю, то это опять же сводится к тому, что нужно внятное руководство.

По этому вопросу читать надо документацию на конкретный микроконтроллер - там всё будет описано предельно внятно. Настоящих аналоговых выходов у ардуиновских контроллеров нет, как и у многих других контроллеров. Если аналоговый выход необходим - цепляйте внешний ЦАП, или выбирайте другой контроллер.

По поводу if(2>U && U>1) - читать надо документацию на языки C/C++. На этих языках - да, выражение if(2>U>1) будет логически неправильным, хотя синтаксической ошибки нет - правила языка соблюдаются.

Сергей Алексеевич
Offline
Зарегистрирован: 09.01.2015

Цифровой вход, однако, при analogWrite, согласно тем же инструкция, выдаёт 256 значений, которые можно изменять. Но я не понимаю, как это применить в моём случае. И это НЕ единственная задача. Поэтому и прошу у вас не советов, а материала.

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Сергей Алексеевич пишет:

Цифровой вход, однако, при analogWrite, согласно тем же инструкция, выдаёт 256 значений, которые можно изменять. Но я не понимаю, как это применить в моём случае. И это НЕ единственная задача. Поэтому и прошу у вас не советов, а материала.

В данном случае - это не цифровой ВХОД, а цифровой ВЫХОД. К тому-же речь идет  о ШИМ.

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

В, по всей видимости, вместо изучения вопроса, пытаетесь применить какие-то свои знания, которые не совсем применимы к программированию Ардуино.

Datak
Offline
Зарегистрирован: 09.10.2014

Сергей Алексеевич пишет:

Цифровой вход, однако, при analogWrite, согласно тем же инструкция, выдаёт 256 значений

Выход. И выдаёт он не 256 значений, а два, но со строго определёнными временными характеристиками, которые как раз зависят от параметра функции analogWrite.

Документация по функциям - да, она нужна. И я согласен, что она не такая полная, как иногд ахочется. Но для простого применения, без углубления в подробности - по-моему вполне достаточно

Сергей Алексеевич
Offline
Зарегистрирован: 09.01.2015

Давайте всё-таки отойдём от вопроса АЦП. Я читаю хабр и некоторые скетчи, но там попадаются чаще всего большие и сложные задачи, разбор которых не всегда принсоит то, что я искал. Поэтому предлагайте, что мне гуглить ещё, но именно связанное с Ардуино. 

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

А вопрос-то какой?

Сергей Алексеевич
Offline
Зарегистрирован: 09.01.2015

Что почитать связанного именно с языком Ардуино, чтобы оно охватывало хотя бы глупые вопросы а-ля первый пост. 

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014
Сергей Алексеевич
Offline
Зарегистрирован: 09.01.2015

На это уже подписан на ютубе, как раз их скетчи и смотрел. 

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Ну тогда задавайте конкретные вопросы...

Сергей Алексеевич
Offline
Зарегистрирован: 09.01.2015

Конкретных вопросов будет целый форум )) Я планировал сделать на Арудинке одну часть схемы, как потенциометр - входное напряжение и два выходных, разные по величине. Например, на вход 5в, на один выход 3в, на другой 2В. Логика, которую я применил, написав digitalRead(12)/2 — считанное напряжение поделить на 2. Т.е. в целом код я представлял себе следующим образом:

void setup(){
  pinMode(11, OUTPUT); //выход 3В
  pinMode(10, OUTPUT); //выход 2В
}

void loop(){
  digitalWrite(11, digitalRead(12)-102); //если 5В=256, то 256-102= ~3В
  digitalWrite(10, digitalRead(12)-153); // ~2В
}

Но, раз такая логика не работает, то ШИМ - единственный способ? 

 

Почему я не использую аналоговое входы - я на них буду подавать ещё входное напряжение, и задам аналогРеференс, т.е. установлю опорное напряжение равно 2В. Получается, что использовать 5В на аналоговых входах я уже не смогу, потому что все значения больше 2В будут равны 1023.

Coolerr
Offline
Зарегистрирован: 30.06.2014

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

Sanchogus
Offline
Зарегистрирован: 02.01.2015

Сергей Алексеевич пишет:

Конкретных вопросов будет целый форум )) Я планировал сделать на Арудинке одну часть схемы, как потенциометр - входное напряжение и два выходных, разные по величине. Например, на вход 5в, на один выход 3в, на другой 2В. Логика, которую я применил, написав digitalRead(12)/2 — считанное напряжение поделить на 2. Т.е. в целом код я представлял себе следующим образом:



void setup(){
  pinMode(11, OUTPUT); //выход 3В
  pinMode(10, OUTPUT); //выход 2В
}

void loop(){
  digitalWrite(11, digitalRead(12)-102); //если 5В=256, то 256-102= ~3В
  digitalWrite(10, digitalRead(12)-153); // ~2В
}

Но, раз такая логика не работает, то ШИМ - единственный способ? 

 

Почему я не использую аналоговое входы - я на них буду подавать ещё входное напряжение, и задам аналогРеференс, т.е. установлю опорное напряжение равно 2В. Получается, что использовать 5В на аналоговых входах я уже не смогу, потому что все значения больше 2В будут равны 1023.

Digital  может принять только лог. 0 или лог. 1.

Если результат не равен им, то будет округлен до 0 или 1.

Замерять напряжение только с аналоговых входов, таких как А0...Ах командой analogRead, получая диапазон от 0 до 255. Либо усложнять схему новыми элементами.

 

При определенном извращении можно выдавать сигнал с определнной точностью цифровым выходом через делитель напряжения... Но для этого нужно боооольше цифровых выходов.

Если вам надо выдавать 5 В или 2.5 В, то можно это сделать на паре резисторов и паре цифровых пинов.

 

 

Datak
Offline
Зарегистрирован: 09.10.2014

Сергей Алексеевич, советов не жалко, сейчас надаём, и полезных и не очень.

Но слишком мало информации, не совсем понятно, что нужно сделать.

Если я правильно понял - поделить входное напряжение на два выходных, в заданном соотношении?
Но если можно, чуть подробнее. Какие, например, требования к точности напряжений и быстродействию схемы? От этого зависит способ решения проблемы.

Насчёт аналогового выхода - да, у ардуино для этого есть только ШИМ. Но если потребуется, и если хватит выводов - можно прицепить что-нибудь вроде этого:

Простейший ЦАП на резисторах

Но опять же, невозможно вслепую угадать, подойдёт ли оно конкретно Вам.

Сергей Алексеевич
Offline
Зарегистрирован: 09.01.2015

Вся задача — это дебильный дипломный проект.

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

Datak
Offline
Зарегистрирован: 09.10.2014

Приблизительный код - это тот же Ваш предполагаемый скетч, но только с использованием analogRead и analogWrite, вместо digital-версий. А остальное - это уже подробности, которые можно уточнить только зная подробности. :)

Сергей Алексеевич
Offline
Зарегистрирован: 09.01.2015

Sanchogus пишет:

Замерять напряжение только с аналоговых входов, таких как А0...Ах командой analogRead, получая диапазон от 0 до 255. Либо усложнять схему новыми элементами.

Неплохо, но не представляю, как ) 

 

Второй аспект:

Я хочу на аналоговый вход подавать напряжение, которое буду контролировать. Оно очень мало и в предыдущей теме мы его усилили ОУ примерно до 2В. Чтобы регулировать его милливольтами я решил использовать AREF и подать опорное напряжение 2В. Т.е. я на всех аналоговых входах установлю опорку меньше пяти вольт. Или можно установить только для одного аналового входа опорку? Типа analogReference(14, EXTERNAL);

Сергей Алексеевич
Offline
Зарегистрирован: 09.01.2015

Изобразил графически. U1 изменяется вместе с U2, соответственно изменяются выходные напряжения. Всё это ранее контролировалось потенциометром, который решено заменить на Ардуино. Но только это почему-то невообразимо сложно

 сверху цифровые порты, снизу аналоговые. Проверил свою теорию «analogReference(14, EXTERNAL);» — не работает, а жаль. По-моему с точки зрения логики такое решение задачи наиболее простое и нормальное.

Coolerr
Offline
Зарегистрирован: 30.06.2014

От оно че Михалыч, нужен электронный потенциометр на ардуино?

Sanchogus
Offline
Зарегистрирован: 02.01.2015

Сергей Алексеевич пишет:

Sanchogus пишет:

Замерять напряжение только с аналоговых входов, таких как А0...Ах командой analogRead, получая диапазон от 0 до 255. Либо усложнять схему новыми элементами.

Неплохо, но не представляю, как ) 

Ну первое, что пришло в дурную голову:

Найти АЦП, котороый будет поставлять вам значения в двоичном коде на цифровые пины, что заметно уменьшит их количество.

А какая ардуина используется?

Сергей Алексеевич
Offline
Зарегистрирован: 09.01.2015

Можно назвать это и так. Лишь бы был способ осуществления.

 

Никакая Ардуино не используется. Работоспособность кода проверяю на 123d.circuits. 

 

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Sanchogus пишет:

Digital  может принять только лог. 0 или лог. 1.

Если результат не равен им, то будет округлен до 0 или 1.

Замерять напряжение только с аналоговых входов, таких как А0...Ах командой analogRead, получая диапазон от 0 до 255. Либо усложнять схему новыми элементами.

от 0 до 1023

Sanchogus
Offline
Зарегистрирован: 02.01.2015

Сергей Алексеевич пишет:

Можно назвать это и так. Лишь бы был способ осуществления.

 

Никакая Ардуино не используется. Работоспособность кода проверяю на 123d.circuits. 

 

Ну если проект бумажный впишете не UNO, а MEGA. Там больше входов. XD

http://arduino.ru/Hardware/ArduinoBoardMega

Цифровые Входы/Выходы 54 (14 из которых могут использоваться как выходы ШИМ)
Аналоговые входы 16Не будете экономить их.

 

Упс, пардон насчет точности 0..1023. :)

Сергей Алексеевич
Offline
Зарегистрирован: 09.01.2015

И чего получится? Выдавать на каждый выход 5В и через делитель уже получать нужное напряжение? Если так, то это бред сивой кобылы - заменять один потенциометр на пяток делителей и гигантскую плату с процессором. 

Sanchogus
Offline
Зарегистрирован: 02.01.2015

Сергей Алексеевич пишет:

И чего получится? Выдавать на каждый выход 5В и через делитель уже получать нужное напряжение? Если так, то это бред сивой кобылы - заменять один потенциометр на пяток делителей и гигантскую плату с процессором. 

Там 14 ШИМ выходов. Делители не нужны будут.

Сергей Алексеевич
Offline
Зарегистрирован: 09.01.2015

Так шим импульсный, а мне нужно линейное. 

Sanchogus
Offline
Зарегистрирован: 02.01.2015

Сергей Алексеевич пишет:

Так шим импульсный, а мне нужно линейное. 

А для чего оно такое линейное нужно?

Конденсаторы впихнуть можно, будут сглаживать ШИМ сигнал.

dimax
dimax аватар
Онлайн
Зарегистрирован: 25.12.2013

Тема на изиэлектронике по мк-шному чтиву:

http://we.easyelectronics.ru/AVR/dokumentaciya-po-avr-mikrokontrolleram-...

Кто всё прочтёт, тому врятли придётся что-то спрашивать здесь))

Сергей Алексеевич
Offline
Зарегистрирован: 09.01.2015

Т.е. единственное, что мы можем - сделать ШИМ и сгладить его кондёрами? 

 

dimax, спасибо, почитаю в другой жизни. Времени не хватит )

Sanchogus
Offline
Зарегистрирован: 02.01.2015

Сергей Алексеевич пишет:

Т.е. единственное, что мы можем - сделать ШИМ и сгладить его кондёрами? 

Всего лишь, как вариант.

А чем вас ШИМ так не устраивает?

 

 

 

dimax пишет:

Тема на изиэлектронике по мк-шному чтиву:

http://we.easyelectronics.ru/AVR/dokumentaciya-po-avr-mikrokontrolleram-...

Кто всё прочтёт, тому врятли придётся что-то спрашивать здесь))

На всякий случай отправим в избранное. :)

Сергей Алексеевич
Offline
Зарегистрирован: 09.01.2015

Тем, что это будет система сигнализации, которая работает на отклонении в 200мВ. Если у меня будут импульсы, то стаблильности никакой. Добавлять кондера или собирать схемы на делителях тоже не вариант. Я надеялся получить от устройства простую математичскую функцию, вычитающую напряжения.

Sanchogus
Offline
Зарегистрирован: 02.01.2015

Сергей Алексеевич пишет:

Тем, что это будет система сигнализации, которая работает на отклонении в 200мВ. Если у меня будут импульсы, то стаблильности никакой. Добавлять кондера или собирать схемы на делителях тоже не вариант. Я надеялся получить от устройства простую математичскую функцию, вычитающую напряжения.

МК дискретные устройства. Они не могут выдать чистый сигнал отличный от логических 0 и 1. А вычитать напряжения можно и на операционнике и смотреть на его выходе уже разность сигналов какая.

Сергей Алексеевич
Offline
Зарегистрирован: 09.01.2015

Планировалось всё сделать на Ардуино, без лишних заморочек. И так уже воткнул ОУ на входной сигнал, потому что он отрицательный, а гребаное Ардуино отрицалки не читает. Теперь выясняется, что и выходное напряжение нужно чем-то обхаживать. Смысл от платформы? Усложнение схемы, повышение стоимости, увеличение габаритов. Чем больше устройств, тем меньше надёжность. 

Sanchogus
Offline
Зарегистрирован: 02.01.2015

Сергей Алексеевич пишет:

Планировалось всё сделать на Ардуино, без лишних заморочек. И так уже воткнул ОУ на входной сигнал, потому что он отрицательный, а гребаное Ардуино отрицалки не читает. Теперь выясняется, что и выходное напряжение нужно чем-то обхаживать. Смысл от платформы? Усложнение схемы, повышение стоимости, увеличение габаритов. Чем больше устройств, тем меньше надёжность. 

Наличие смысла необходимо смотреть в каждом конкретном случае. Где-то ардуина будет отлично подходить, а где-то нет.

Более того ардуину еще от помех надо защищать. :)

 

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

TevatroN
Offline
Зарегистрирован: 17.11.2013

Не совсем понял нужность тут МК, ОУ тут более подходит, тем более есть двуполярные ОУ.

Но если уж так приперло использповать МК, то вы можете шимом управлять яркостью светодиода, который будет управлять сопротивлением фоторезистора, просто говоря оптрон. за одно и гальваническая развязка.

Далее, есть микросхемы электронных регуляторов громкости, с цифровым входом, но они имеют малое количество шагов.

И последнее, я смотрю нынешнее образование вообще не заставляет думать мозги, не в обиду вам.

П.С. советы может пригодятся.

И да если это для курсовой, и нужно именно на МК, то вы можете еще забубенить езернет, с выводом на страничке в удобочитаемом виде показаний. Тогда успех вам гарантирован.

Сергей Алексеевич
Offline
Зарегистрирован: 09.01.2015

Я лампочку чтоли тут зажигаю? ) Это дипломный проект по дистанционнму управлению электронным потенциометром средствами gsm. Но весь проект загибается на том, что на выходе у меня должно быть обычное напряжение, как с батарейки, а не шим. И уж лишние конструкции мне точно там не нужны, и так сам модуль здоровенный, да ещё GSM-шилд. 

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Вот что бывает, если ТС изначально не верно поставил перед собою задачу, и принял неверные пути решения.

И рад бы помочь, но до сих пор не могу понять сути задания. Придется вам натягивать Ардуино на глобус без меня...

Сергей Алексеевич
Offline
Зарегистрирован: 09.01.2015

Начало темы гласит не от ТС или ТЗ или проекте в целом ) Я вообще начала разговор о литературе. Раз литература в дефиците, то ответил на несколько вопросов. Да меня не устраивает ШИМ, потому что. Раз методов, кроме ШИМ нет, я буду заниматься проектом исходя из маскимального упрощения. Если Будет совсем тяжко, закожу здесь код с подробным ТЗ. 

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Код...

Если я правильно вас понимаю - вам нужна работа с аналоговым сигналом.  Не  нравится ШИМ - прикрутите к Ардуино ЦАП.

Но я даже не уверен, что вам нужен микроконтроллер...

TevatroN
Offline
Зарегистрирован: 17.11.2013

Сергей Алексеевич пишет:
Если Будет совсем тяжко, закожу здесь код с подробным ТЗ.

Я не Пухлявый, но лучше закажите мозг.

Я радиолюбитель, собравший и отремонтировавший сотни устройств и девайсов. Но я не могу понять что вы хотите. У вас хоть есть блоксхема или нечто похожее? Еще раз повторю то что уже сказали выше, МК это логика, она либо 1 либо 0. Есть у МК АЦП есть выход ШИМ+RC цепочка будет вам то что нужно.

БП у компа тот же ШИМ! И там очень стабильные напруги 12/5/3.3 В и т.д.

Сергей Алексеевич
Offline
Зарегистрирован: 09.01.2015

Проект - это бандурина, состоящая из модулей от двух до одиннадцати. Уже извините, что не расписал тут всей схемы со всеми датчикам, микросхемами и трансфорамотором во главе. Для тех, кто ЯННП даже картинки прикреплены. 

Сергей Алексеевич
Offline
Зарегистрирован: 09.01.2015

Начальство не одобрило схему с ШИМ. Проект будет переделываться, значит, холивар можно дальше не разводить. Оставим только входные напряжения и смс-ки о их состоянии.