Каскад из шести сдвиговых регистров

Тема в разделе "Arduino & Shields", создана пользователем Viktor161, 16 мар 2014.

  1. Viktor161

    Viktor161 Нуб

    У нас краников нету, у нас клапана и частотники!!)
    Три контура с клапанами, на первом 45шт, на втором 35шт и на третьем 25шт, что бы всем этим хозяйством управлять и выбрали сдвиговые регистры, про tlc почитаю что за зверь))

    Вот опять у меня незадача......

    Это вопрос к уважаемому Megakoteyka, у меня релейные модули на которых реле срабатывает при подаче на нее LOW, то есть у меня все реле замкнуты а бегающее размыкается, как мне в впроге написать что бы было наоборот?? нормальное состояние было 1 а не 0???
     
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    Реле обычно можно подключить и нормально замкнуто, и нормально разомкнуто. Для этого реле имеет пару ног для управления и 3 ноги для подключения нагрузки - общая нога, нормально замкнутая и нормально разомкнутая.
    Вот здесь так сделано.
    Если нормально замкнутое реле держать разомкнутым, оно постоянно будет жрать ток на удержание "ненормального" состояния. Для нормально разомкнутого все наоборот.
    Вы какие модули используете?
     
  3. Viktor161

    Viktor161 Нуб

    Модули самопальные, это я в курсе что релюха имеет контакты нз и но, косяк в том что транзисторы я купил p-n-p. Не хочется опять все перепаивать поэтому вопрос можно это выполнить программно??))
     
  4. Megakoteyka

    Megakoteyka Оракул Модератор

    Можно и программно. Нужно просто инвертировать сигнал. Вместо HIGH писать LOW и наоборот.
     
  5. Viktor161

    Viktor161 Нуб

    Пробовал, все замкнуты, ни чего не происходит... Я думаю что))) сейчас у меня в регистр идет след информация 10000000, а нужно 01111111, а если поменять HIGH на LOW то буде 00000000 поэтому ничего и не происходит....
     
  6. Viktor161

    Viktor161 Нуб

    Надо инвертировать все а не только бегающий бит, вок как это сделать???
     
  7. Megakoteyka

    Megakoteyka Оракул Модератор

  8. Viktor161

    Viktor161 Нуб

    Походу это не то что мне нужно... Завтра поеду за n-p-n транзисторами)
     
  9. Viktor161

    Viktor161 Нуб

    Столкнулся с очередной трудностью, не получается написать код что бы замкнулись все реле на модуле, выкладываю код:
    Код (Text):

    int latchPin = 9;
    int clockPin = 13;
    int dataPin = 11;
    int buttonPin1 = 2;
    int buttonPin2 = 3;
    int buttonPin3 = 4;
    int buttonState1 = 0;
    int buttonState2 = 0;
    int buttonState3 = 0;
    int x;
    void setup()
    {
      pinMode(latchPin, OUTPUT);
      pinMode(dataPin, OUTPUT);
      pinMode(clockPin, OUTPUT);
      pinMode(buttonPin1, INPUT);
      pinMode(buttonPin2, INPUT);
      pinMode(buttonPin3, INPUT);
    }

    void loop()
    {
      buttonState1 = digitalRead(buttonPin1);
      buttonState2 = digitalRead(buttonPin2);
      buttonState3 = digitalRead(buttonPin2);
     
      if(buttonState1 == HIGH) {
        for(x = 0; x <= 22; x++) {      // Вращение по часовой стрелке
          registerWrite(x, HIGH);
          delay(248);
        }
      }
      else if (buttonState2 == HIGH) {
        for(x = 22; x >= 0; x--) {      // Вращение против часовой стрелки
          registerWrite(x, HIGH);
          delay(248);
        }
      }
      else if (buttonState3 == HIGH) {
                                        // Открыты все
      }
    }

    void registerWrite(int whichPin, int whichState) {
      byte bitsToSend[3] = {0, 0, 0};
      digitalWrite(latchPin, LOW);
      bitWrite(bitsToSend[whichPin/8], whichPin%8, whichState);
      for(int i = 0; i < 3; i++) shiftOut(dataPin, clockPin, LSBFIRST, bitsToSend[i]);
      digitalWrite(latchPin, HIGH);
    }
     
     
  10. Viktor161

    Viktor161 Нуб

    Что нужно написать что бы на ножках регистров с 0 по 22 было HIGH??
     
  11. Viktor161

    Viktor161 Нуб

    И еще происходит одна странная вещь, когда у меня работает вращение вправо или влево, последнее реле остается в сработке?? как от этого избавиться??