Увеличение аналоговых и цифровых входов
- Войдите на сайт для отправки комментариев
Ср, 24/04/2019 - 03:07
[code] /*Заготовка скетча для расширения портов NodeMCU ESP8266 или ардуино UNO * 74НС595 - две штуки. Расширитель аналоговых портов CD 4051BE - 2 штуки. * При чём аналогвые расширители управляются 5 портами микпрсхемы 74НС595 * Схема и скетч тестированы на UNO и NodeMCU ESP8266 c контролем на монитор порта * Скетч не содержит Delay и millis Однако аналоговый порт считываться успевает * Занимая один аналоговый порт микроконтроллера и три цифровых .... * получаем 16 аналоговых и 8+3 = 11 цифровых Может кому пригодится*/ int latchPin = D5; //10 Пин Uno int clockPin = D8; //12 Пин Uno int dataPin = D7; //11 Пин Uno int number595_1 = (B00001000); //xxx INH-2 INH-1 A B C - управление СD4051BE int number595_2 = (B00000000); // Расширение выходов void setup() { Serial.begin (115200); pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT);} void loop() { for ( number595_1 = (B00001000); number595_1 <= (B00010111); number595_1 ++){ // Перебираем входы управления СD4051BE digitalWrite(latchPin, LOW); //открываем защёлку shiftOut(dataPin, clockPin, MSBFIRST, number595_1); //Заносим даные в первый регистр shiftOut(dataPin, clockPin, MSBFIRST, number595_2); //Заносим даные во второй регистр digitalWrite(latchPin, HIGH); // закрываем защёлку int val = analogRead (A0); // в этом месте можно "перехватывать данные аналоговых //сигналов для использования в своих целях Serial.print (number595_1 - 8); // -8 чтобы в голове не пересчитывать номер //аналогового входа СD4051BE Serial.print ("="); Serial.println (val);} } [/code]
Теперь то же самое на I2C....
может и пригодится
Теперь то же самое на I2C....
Да. Для I2C хочу добавить качественный 16 разрядный, четырёхканальный ADS1115. Сегодня попробую.
165 регистр входов хотел тоже ... да передумал. Цифровой сигнал - это частный случай аналогового ... только не 0/1023, а 0/1.
И ещё ... в таком виде очень легко дописывать скетч под любую программу.
Тема и для меня актуальная.
Но у вас......столько хотелок!
поэтому для вас совет:
может мегу купить? глядишь - дешевле выйдет.
Есть у меня ESP32. В чём проблема? С расширителями входов программировать удобнее. Порты не надо объявлять входом - выходом. Включать-выключать можно одной строчкой.
Дело в том, что по непонятной причине новичкам не рассказывают про удобство 74НС595. Все примеры динамические, узкоспециальные с применением сокращённого программирования, сложного для понятия начинающим. А на самом деле ... там кода всего три строчки. Мой скетч тому пример. И ещё ... тоже важное ... 595 полностью снимает нагрузку с пинов микроконтроллера.
Про хотелки ... в моём ГАЗ-69 6 передач ... для разных условий движения. Не пересаживаемся же мы на разные машины когда нужно ехать в условиях разной сложности. Мне 8266 нравится за его WIFI. НО !!!!!! Один аналоговый вход!!!! Хиба такое можна сцярпець? Теперь у меня их 16. С перспективой. Неиспользуемые притянул к минусу и выставил условие ... если val не равно нолю отправлять в монитор порта.
Есть у меня ESP32. В чём проблема? С расширителями входов программировать удобнее. Порты не надо объявлять входом - выходом. Включать-выключать можно одной строчкой.
Дело в том, что по непонятной причине новичкам не рассказывают про удобство 74НС595. Все примеры динамические, узкоспециальные с применением сокращённого программирования, сложного для понятия начинающим. А на самом деле ... там кода всего три строчки. Мой скетч тому пример. И ещё ... тоже важное ... 595 полностью снимает нагрузку с пинов микроконтроллера.
По непонятной причине новички не желают читать то, что им рассказано и разжевано, например, http://arduino.ru/Tutorial/registr_74HC595. Куда уж яснее-то?
Растолкуйте плз:
I2C - это 5-В интерфейс. многие ИМС только от 5 В и работают (DS1307 например).
про 12В - интерфейс слышал (дорого 200 р за ИМС-переходник 5/12В).
а вот с 3,3В I2C как то вакуум у меня в голове.
прошу явить ИМС I2C которые от 3,3В работают. В привязке к целевому МК( пользую, нравится, хочу ещё ).
Можно ли метрах на 15 кабеля работать с I2C 3,3В ИМС (термометром каким-нибудь).
а вот с 3,3В I2C как то вакуум у меня в голове.
прошу явить ИМС I2C которые от 3,3В работают. В привязке к целевому МК( пользую, нравится, хочу ещё ).
Можно ли метрах на 15 кабеля работать с I2C 3,3В ИМС (термометром каким-нибудь).
I2С вовсе не привязан к 5в. Он совершенно без проблем работает , к примеру, на СТМ32. На распространенной "блюпилл" STM32F103 аж два I2C интерфейса - зачем бы их вставили на плату с питанием 3.3, если б они работали только от 5в ? :)
Насчет 15 метров кабеля - вопрос в принципе некорректный. I2C расшифровывается с английского как "межблочные коммуникации" - его расчетный радиус действия сантиметры.
Растолкуйте плз:
I2C - это 5-В интерфейс. многие ИМС только от 5 В и работают (DS1307 например).
про 12В - интерфейс слышал (дорого 200 р за ИМС-переходник 5/12В).
а вот с 3,3В I2C как то вакуум у меня в голове.
прошу явить ИМС I2C которые от 3,3В работают. В привязке к целевому МК( пользую, нравится, хочу ещё ).
Можно ли метрах на 15 кабеля работать с I2C 3,3В ИМС (термометром каким-нибудь).
Вот преобразователи 3,3 в 5,0 и наоборот
5шт IIC I2C Logic Level Преобразователь Bi-Directional Модуль совета 5V / 3.3V DC для Arduino с булавками
За 0,7$ мне али прислал их пять штук.
Усилитель выхода (7 каналов) возможно есть и у тебя ... он входит в стартовый набор Ардуино. Тоже копеечный, если на Али заказать.
Управление микросхемами CD4051BE по двоичному коду A, B, C, INH. (INH)- это разрешение на считывание. С двумя микросхемами я как то ухитрился. Если брать от 00001000 прибавлять по 00000001 и так до 00010111) то всё легко получилось в одну строчку.
21
for
( number595_1 = (B00001000); number595_1 <= (B00010111); number595_1 ++){
// Перебираем входы управления СD4051BE
а вот как управлять третьей, четвёртой и пятой (больше не нужно, так как у 74НС595 больше нету выходов) знаний у меня не хватило.
Если проще поставить вопрос ... как сделать перебор от В11101000 до В11110111 от 11011000 до 11011000 от 10111000 до 10111111 и от 01111000 до 01111111 в одной строке for? При чём организовать перебор можно на любых пинах лишь бы три бита (А В С) перебирались от 000 до 111 (0 до 7), а в остальных пяти (INH1, INH2 ... INH5) ноль перебегал в следующую ячкйку (01111, 10111, 11011, 11101, 11110).
Если это невозможно - буду другие способы искать. Например ... Можно создать в сетапе массив, потом в for спокойно его перебирать. Тогда и адаптировать под количество микросхем было бы легче.
Отвечать можно десятичными цмфрами. Строка
for
( number595_1 = 8; number595_1 <= 23; number595_1 ++) работает точно так же.
То, что нельзя сделать одним циклом, делается двумя. Можно, конечно, и экзотику придумать со сбросом бита в одном цикле, но есть ли в этом смысел...
А что? Нельзя разве ... сдесь читаем, здесь не читаем, а сдесь селёдку заварачивали?
1<a<10 & 100<a<110 ... что нибудь такое
Конечно такой перебор, как хочу ... строк за 10 ... 15 смогу сотворить. Но есть же ГУРУ, владеющие сокращённым программированием
Ну вот так и пишите селёдку в цикле.
Думаете, что у ГУРУ другие ЦЫКЛЫ - секретные и эти циклы в прошивке вообще ничего не занимают?
Проблему в лоб решить не получилось
Вот так читаешь человека... Вроде умные вещи пишет, что-то там полезное мастерит, а потом херак и
Что это вообще означает?
Грех над стариком пиариться. Ну исправь, если знаешь как
Так я и спрашиваю - что это означает по-человечески?
Это и означает, что хотел последовательно назначать ножкам 74НС595 перебором подряд из соответствующего массива
Грех над стариком пиариться. Ну исправь, если знаешь как
Ты не дочитал. Тестировано для двух CD4051BE
А это скетч исправленый
Я всё правильно сделал?
Если работает, как ожидалось, то значит правильно.
sizeof(inh) >= i или i < sizeof(inh).
sizeof(inh) >= i или i < sizeof(inh).
Это к чему?
Проверить оба варианта пока схему не разобрал?
В том виде скетч с помощью sadman41 всё работает как задумано. Монитор порта подтвердил.
Это к чему?
Не обращайте внимания.) Это я уже засыпал.