Сдвиговый регистр 74HC595

Evjeki
Offline
Зарегистрирован: 15.05.2019

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

b707
Offline
Зарегистрирован: 26.05.2017

можно.

Насчет примера кода не понял. Никакого специального кода для вашей задачи не существует. Разбейте ее на две части - сначала читаете кнопку (примеров, надеюсь, не надо?), потом выставляете состояние на выходе сдвигового регистра

KindMan
Offline
Зарегистрирован: 19.12.2018

Так автор может хочет без МК управлять регистром.

Evjeki
Offline
Зарегистрирован: 15.05.2019

Дело в том, что при нажатии на кнопку мне необходимо чтобы изменилось состояние только двух выходов. остальные, чтобы оставались неизменными, так как они так же выполняют свою функцию. 

b707
Offline
Зарегистрирован: 26.05.2017

Evjeki пишет:

Дело в том, что при нажатии на кнопку мне необходимо чтобы изменилось состояние только двух выходов. остальные, чтобы оставались неизменными, так как они так же выполняют свою функцию. 

и в чем проблема?

sadman41
Offline
Зарегистрирован: 19.10.2016

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

Evjeki
Offline
Зарегистрирован: 15.05.2019

понятия не имею как задать это в скетче. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Тогда звиздуй читать литературу. Или заказывай проект за деньги.  Готовых кодов тебе здесь не дадут, здесь помогу поправить твой. 

Evjeki
Offline
Зарегистрирован: 15.05.2019

Вот сижу и ищу необходимую литературу. Написал, так как не нашел ее

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Вывсёврёти!  Литературы - полно. А по 595-му, наерно, и на эвенкийском языке даже есть, чо ты не нашол? 

KindMan
Offline
Зарегистрирован: 19.12.2018

Evjeki пишет:

Вот сижу и ищу необходимую литературу. Написал, так как не нашел ее


Тогда, учитесь пользоваться поисковиком… он всё умеет находить,
http://cxem.net/arduino/arduino166.php

b707
Offline
Зарегистрирован: 26.05.2017

Evjeki пишет:

Вот сижу и ищу необходимую литературу. Написал, так как не нашел ее

в гугле не способен найти учебник по Си и примеры работы со сдвиговым регистром?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

DetSimen пишет:

Вывсёврёти!  Литературы - полно

Это Вы фсёврёти! Нету никакой литературы где описывалось бы как при нажатии на кнопку поменять значения  двух конкретных выходов 595! Просто поменять - есть. Поменять по кнопке один выход - есть, поменять по кнопке все выходы- тоже есть! А вот поменять именно два (не каких попало, а каких надо, да ещё чтобы кнопка на нужном пине была!!!) - нет такого!

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ну я - так я. да, яфсёвру. прости, ТС, нихрена в сети нет по этому поводу. 

Green
Offline
Зарегистрирован: 01.10.2015

Слишком много должно совпасть. Хотя, чудеса иногда случаются.)

Evjeki
Offline
Зарегистрирован: 15.05.2019

Спасибо, как бы смешно не было, подобного найти действительно не смог.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

А каковы твои навыки в поиске в сети? Ну, например, порнуху найти можешь? А рекламу сумеешь найти?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Evjeki пишет:

Спасибо, как бы смешно не было, подобного найти действительно не смог.

Так я и говорю, что точно того, что Вам нужно в сети наверняка нет.

Evjeki
Offline
Зарегистрирован: 15.05.2019

я не просил готовый вариант, всё равно то что я спросл, это лишь малая часть проекта. Мне просто нужен был принип. я в программировании совсем зеленый. вот и спросил пример чтобы было от чего отталкиваться. я не пытался на халяву что-то словить. и шутки пр поиск неуместны. вспомните себя в начале.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ты вначале заставь 595-й хоть что-то выводить, а потом начинай прикручивать к нему нужный функционал

Evjeki
Offline
Зарегистрирован: 15.05.2019

до этого, слава богу, додумался

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ну и где скечч?  с выводом хоть чего нибудь?

b707
Offline
Зарегистрирован: 26.05.2017

Evjeki пишет:

это лишь малая часть проекта

я в программировании совсем зеленый

вот в этих двух фразах - корень ваших проблем. Пока "совсем зеленый" - начинайте с простеньких задачек Если сразу "космолет строить", то ничего не выйдет, только людей насмешите

sadman41
Offline
Зарегистрирован: 19.10.2016

Хорошо, что зелёный сознался. А то я ждал классического: "пишу на ассемблере 20 лет не вставая, а на Си канпилятор не подчиняется командам".

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

sadman41 пишет:

а на Си канпилятор не подчиняется командам".

Ибо кривой :(

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Evjeki пишет:

я не просил готовый вариант

А чего ты просил? Похоже, тебя никто не понял.

Ты вообще, читал правила форума? Посмотри пункт №5 вот здесь. Пока ты его не выполнишь, в теме ничего полезного для тебя не будет. А не хочешь или не можешь выполнить, тогда см. п. №6 там же.

Evjeki
Offline
Зарегистрирован: 15.05.2019

На то это и радел для зеленых

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Evjeki пишет:

На то это и радел для зеленых

На что, "на то"?

Читайте пост #25 и не думайте, что это шутка.

sadman41
Offline
Зарегистрирован: 19.10.2016

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

Evjeki
Offline
Зарегистрирован: 15.05.2019

Я вас услышал

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Вот и чудненько.

Evjeki
Offline
Зарегистрирован: 15.05.2019

Можно ли три регистра последовательно поставить? если да, то до какого количства их последовательно повесить можно?

 

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Evjeki пишет:

Можно ли три регистра последовательно поставить?

Кому как. Три, наверное, и тебе можно.

Evjeki пишет:

до какого количства их последовательно повесить можно?

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

Evjeki
Offline
Зарегистрирован: 15.05.2019

понял, спасибо.

Муж_Долговой
Муж_Долговой аватар
Offline
Зарегистрирован: 07.10.2018

// Регистры подключены по классической схеме последовательно
int latchPin = 10;  // Пины UNO
int clockPin = 12;  //  -//-
int dataPin = 11;   //  -//-
int buttonPin1 = 2;  // Подключаем кнопку к пину 2
int buttonPin2 = 3;  // Подключаем кнопку к пину 3/ это если ещё одна кнопка надо
uint8_t number595_1 = (B00000000);    //Регистр первый (самый дальний по схеме от входа) Пока на всех выходах "0"
uint8_t number595_2 = (B00000000);   // Регистр второй (при последовательном соединении) Если илишний закомментить!
uint8_t number595_3 = (B00000000);   // Регистр третий (Вот его пока к кнопке и подключим) Если лишний - закомментить!
uint8_t qa, qb, qc, qd, qe, qf, qg, qh; //Раздвинем ноги регистру
void setup() {
  Serial.begin (9600); // готовим монитор, чтобы потом подсматривать
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(buttonPin1, INPUT_PULLUP); //Уровень высокий. При нажатии кнопки - на выходе "0"
     }
void loop() {
  // Представим переменную uint8_t number595_1 в виде ног регистра
  number595_1 =  qa*1 +  qb*2 +  qc*4 +  qd*8 +  qe*16 +  qf*32 +  qg*64 +  qh*128; //ноги, которыми не хочешь управлять - так и оставь. Типа qe = 1, qh = 0  
    int push = digitalRead (buttonPin1);
    if (push == 0)   {
      qa = 1;    //Нажатием кнопки меняем состояние нужных ног регистра
      qb = 1;}
      else { // При отпускании кнопки на соответсвующих ногах опять "0"
        qa = 0;
        qb = 0;}    
   digitalWrite(latchPin, LOW);    //открываем защёлку
     shiftOut(dataPin, clockPin, MSBFIRST, number595_1);  //Заносим даные в первый регистр
     shiftOut(dataPin, clockPin, MSBFIRST, number595_2);  //Заносим даные во второй регистр. Если лишний - закомментить!
     shiftOut(dataPin, clockPin, MSBFIRST, number595_3);  //Заносим даные в третий регистр. Если лишний - закомментить!
   digitalWrite(latchPin, HIGH);  // закрываем защёлку
 Serial.println (number595_1, BIN); // Смотрим в мониторе порта, что получилось
        delay (500);} //Эта пауза, чтобы монитор не торопился. Потом закомментить
   
         
        

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Квест: чонетак в 22 строчке?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

DetSimen пишет:

Квест: чонетак в 22 строчке?

да он уж "рыцыдивист" с этим делом

b707
Offline
Зарегистрирован: 26.05.2017

"специализд" по сдвиговым регистрам, да и вообще по Си

Ща опять будет рассказывать, что у него переменная. заранее подготовленная в строке 20 - меняется при считывании кнопки в строке 21 :)

anatoli_nik
Offline
Зарегистрирован: 17.01.2019

DetSimen пишет:

Квест: чонетак в 22 строчке?

бага... или фича, а может пасхалка?:)

Муж_Долговой
Муж_Долговой аватар
Offline
Зарегистрирован: 07.10.2018

"специализд" по сдвиговым регистрам, да и вообще по Си

Учись!!! Пока  жив ещё.

 

b707
Offline
Зарегистрирован: 26.05.2017

Муж_Долговой пишет:

Учись!!! Пока  жив ещё.

 

ошибку то исправишь или ты "выше этого" ?

Муж_Долговой
Муж_Долговой аватар
Offline
Зарегистрирован: 07.10.2018

b707 пишет:

Муж_Долговой пишет:

Учись!!! Пока  жив ещё.

 

ошибку то исправишь или ты "выше этого" ?

 

Как скажите.

b707
Offline
Зарегистрирован: 26.05.2017

Муж_Долговой - в целом неплохо, хотя есть еще что подтянуть:

 - одна описка (исправлена)

- одна несуразность в логике (строка 20 должна стоять после строки 27)

- и общая новичковость кода - например использование длинных делеев при работе с кнопками

 

если что забыл - извиняйте.

b707
Offline
Зарегистрирован: 26.05.2017

Муж_Долговой - а слабо убрать делей и сделать так, чтобы в Сериале вывод не печатался непрерывно, а только когда реально надо? :)

Муж_Долговой
Муж_Долговой аватар
Offline
Зарегистрирован: 07.10.2018

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

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

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Теперь строки с 21 по 27 лехким движеньем заменяюца на

qa = qb = !digitalRead(buttonPin1);

b707
Offline
Зарегистрирован: 26.05.2017

Муж_Долговой пишет:

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

добавлю еще новичковости

 - в шифт-регистр бесконечно суются одни и те же байты

 - Сериал бесконечно печает одно и то же

Короче, даже с поправкой на новичковость надо бы переписать без делей, заодно убрав бесполезную активность в цикле :)

Муж_Долговой
Муж_Долговой аватар
Offline
Зарегистрирован: 07.10.2018

b707 пишет:

Муж_Долговой - а слабо убрать делей и сделать так, чтобы в Сериале вывод не печатался непрерывно, а только когда реально надо? :)

Шутишь. Это невозможно!

Разве, что принт в if перенести третьей строчкой.

Муж_Долговой
Муж_Долговой аватар
Offline
Зарегистрирован: 07.10.2018

DetSimen пишет:

Теперь строки с 21 по 27 лехким движеньем заменяюца на

qa = qb = !digitalRead(buttonPin1);

Не спеши! Специально так оставил, чтобы автор мог менять ноги по усмотрению. Не усложняйте пока.

Нет предела совершенству! Но, пока, чем проще - тем лучше.

b707
Offline
Зарегистрирован: 26.05.2017

Муж_Долговой пишет:

Разве, что принт в if перенести третьей строчкой.

тогда принт будет печататься в среднем в 2 раза реже. Но все равно также бесконечно :) ибо бесконечность, поделенная на 2 - остается бесконечностью

sadman41
Offline
Зарегистрирован: 19.10.2016

b707 пишет:

тогда принт будет печататься в среднем в 2 раза реже. Но все равно также бесконечно :) ибо бесконечность, поделенная на 2 - остается бесконечностью

Но это вдвое меньшая бесконечность, что немаловажно в этом мире.