Вопрос по драйверу дисплея MCP23017
- Войдите на сайт для отправки комментариев
Чт, 07/06/2018 - 11:09
Привет откликнувшимся!
Вопрост скорее всего глупый...
Понадобилось больше портов, вспомнил, что когда то покупал драйвер дисплея на базе MCP3217
Вот такой:
Для подключения использовал библиотеку Адафрут.
Подключил вроде как полагается, для тестов накалякал быстрый скеч RGB светодиода:
#include <Wire.h> #include "Adafruit_MCP23017.h" Adafruit_MCP23017 mcp; void setup() { mcp.begin(0x27); } void loop() { mcp.digitalWrite(7, 1); delay (10); mcp.digitalWrite(7, 0); mcp.digitalWrite(6, 1); delay (10); mcp.digitalWrite(6, 0); mcp.digitalWrite(5, 1); delay (10); mcp.digitalWrite(5, 0); }
Диод моргает, все хорошо. НО, как реализовать ШИМ в данной ситуации ? AnalogWrite выдает ошибку.
ШИМ надо реализовывать ручками, можно по таймеру - устанавливать/снимать нужный бит канала MCP через нужные промежутки времени.
Хм... т.е. через эту библиотек/микрсхему можно передавать/получать только бинарные значения ?
Хм... т.е. через эту библиотек/микрсхему можно передавать/получать только бинарные значения ?
Хм. Что такое ШИМ, по-твоему? Если по-босяцки объяснить, то берём одну секунду: если в течение этой секунды 250 мс на ноге высокий уровень, а 750 мс - низкий - это похоже на ШИМ, как считаешь?
Вот, вникай: https://ru.wikipedia.org/wiki/%D0%A8%D0%B8%D1%80%D0%BE%D1%82%D0%BD%D0%BE-%D0%B8%D0%BC%D0%BF%D1%83%D0%BB%D1%8C%D1%81%D0%BD%D0%B0%D1%8F_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F#%D0%A6%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%B0%D1%8F_%D0%A8%D0%98%D0%9C
Я знаю, что такое ШИМ. По сути AnalogWrite это и есть ШИМ. Имел ввиду, что эта бибилотека может работать только с DigitalWrite и DigitalRead ? Все остальное реализовывать руками ?
Я знаю, что такое ШИМ. По сути AnalogWrite это и есть ШИМ. Имел ввиду, что эта бибилотека может работать только с DigitalWrite и DigitalRead ? Все остальное реализовывать руками ?
1. Да.
2. Да.
Понял, спасибо :-)
Тогда еще вопрос. И i2c только начинаю работать, как можно используя Wire "включить" один из пинов ?
Понял, спасибо :-)
Тогда еще вопрос. И i2c только начинаю работать, как можно используя Wire "включить" один из пинов ?
Тебе напрямую через Wire надо выставить нужный уровень на одном из выходов MCP23017? Самый простой вариант - посмотреть, как это делается в той библиотеке, которую ты юзаешь - там идёт работа через Wire как раз ;)
Поэтому и спрашиваю, т.к. нифига не понял, как они это сделали :-(
Поэтому и спрашиваю, т.к. нифига не понял, как они это сделали :-(
Там сделано соответственно даташиту ;) Если хочешь разобраться - скачиваешь даташит на микруху, и пишешь/читаешь в/из неё. Там можно сразу всеми ногами регистра рулить, есличо, т.е. за один раз устанавливать все ноги регистра в нужное состояние. В библиотеке просто добавлена возможность рулить ногами по отдельности. Ничего сложного, тривиальные битовые операции.
"Лучше день/неделю/месяц потерять, потом за пять минут долететь" - я тебя понял.
"Лучше день/неделю/месяц потерять, потом за пять минут долететь" - я тебя понял.
Ну а по другому как? Если ты в исходниках - не понял? Там делаются тривиальные битовые операции, плюс чтение/запись в/из микрухи по I2C. Если сам ручками хочешь сделать то же самое - надо понимать, как всё работает, это есть в даташите.
Чем тебя библиотека не устроила? Там есть digitalWrite, юзай его, дёргай периодически и будет тебе программный ШИМ. Больших частот не добиться, но, возможно, для твоей задачи хватит.
Посмотрел под лупой, у меня микросхема PCF8574T :-)
Посмотрел под лупой, у меня микросхема PCF8574T :-)
Вот простой код для PCF : http://arduino.ru/forum/apparatnye-voprosy/lcd-2004-i2c-net-svyazi#comment-351752
Большое спасибо! Очень помогло. Выяснилось, что ноги микросхемы подключены не полностью к выводным пинам. Буду паять. Вот для этого и нужен форум :-).
Да вроде все должны быть распаяны. Просто на модуле штырьков избыточное количество для удобства прямого соединения с дисплеем. И, наверное, они вразнобой разведены по ногам чипа.
Я имел ввиду это :-)