GPIO для чайников (часть 4)
-
Смотрите 2-ю часть, там про использование порта в режиме ввода.
-
Я не правильно выразился. Можно ли на вход подать сигнал не верхнего уровня, а на пример 1 В или 1,5 В и определит ли его RPI? И можно ли на выходе получить значение из диапазона 0-3,3 В?
-
GPIO- это цифровой порт, а значит он умеет оперировать только цифровыми сигналами. Он может быть либо в состоянии "1", либо в "0". Промежуточные значения он не может обработать достоверно и каждый раз вы будете получать непредсказуемый результат. Поэтому, при сопряжении устройств с различными уровнями логики, вы обязательно должны их согласовывать. Работа с GPIO ничем не отличается от работы с другими логическими устройствами. Так что смело набирайте в гугле "согласование логических уровней" и выбирайте для себя наиболее подходящий вам способ. Самый универсальный вариант, это применение специализированных микросхем- трансляторов уровней. Например в вашем случае подойдёт ADG3301, или другие из этой линейки. Можно выполнить согласование и через операционный усилитель, или даже через обыкновенный транзистор. Нам просто нужно усилить сигнал уровнем 1в, до 3,3в. Т.е. нам необходимо расчитать усилитель с коэффициентом усиления 3,3.
Обратное преобразование с 3,3в к 1в очень легко можно выполнить резистивным делителем напряжения из 2-х резисторов. -
Что касается второго вашего вопроса, то опять-же, в логических уровнях нет промежуточных значений, а значит на выходе нельзя получить промежуточные значения напряжений.
Для решения этой задачи применяются цифро-аналоговые преобразователи. Так же можно применить ШИМ, а к выходу порта подключить интегрирующую цепочку из резистора и конденсатора, а к её выходу- операционный усилитель. Тогда изменяя скважность импульсов, вы сможите на выходе усилителя получать любые напряжения. Без усилителя на выходе интегрирующего звена вы получите напряжение в диапазоне от 0 до 3,3в. Но работать такая схема будет лишь на высокоомной нагрузке. Поэтому в любом случае лучше поставить операционный усилитель, даже если он будет работать в режиме повторителя с коэффициентом усиления 1.В общем все этивопросы напрямую относятся к схемотехнике и одинаково решаются для всех логических устройств, в том числе и для Raspberry.
-
Все понял куда копать. Нашел пример с АЦП на микросхеме MCP3008 (http://learn.adafruit.com/reading-a-analog-in-and-controlling-audio-volume-with-the-raspberry-pi).
Вы говорили, что в RPI имеется встроенный аппаратный ШИМ, а встроенного АЦП или ЦАП случайно нет? -
Нет. ЦАП и АЦП в нём нету.
-
Через резистивный делитель к примеру можно любое напряжение на выходе получить.
1.5В на входе должен по идее принять за лог.1
-
Все гораздо проще и рациональнее можно сделать...Вот пример http://www.airspayce.com/mikem/bcm2835/pwm_8c-example.html через реализованный через библиотечный CLOCK_DIVIDER.. Можно задать любую частоту работы для устройства...надо обновится до версии bcm2835 1.30...
-
В этом примере используете 18 порт, он является плюсовым как я понял, а в 1 части со свтеодиодом был использован отрицательный порт. Вопрос такой, как узнать или где можно посмотреть сколько еще имеется на raspberry портов таких как 18?
-
-
Странно, что никто не заметил."средний ток будет пропорционален отношению t1 к t2. А именно: Iср=Iн x
t1/t2, где Iн- номинальный ток светодиода, который мы благодаря
резистору установили в 10мА. При номинальном токе светодиод светится
наиболее ярко. А в нашем случае Iср=10 х 2/3 = 6,7мА."А если я установлю время свечения 3 мс, а время несвечения 2 мс, у меня соотношение t1/t2 будет 3/2, значит ток будет в Icp=10 x 3/2 = 15 мА? Если время несвечения уменьшать еще, то ток будет продолжать расти?Может, все-таки, t1 на Т надо делить? Тем более тогда обратная скважности величина получится.