сдвигового регистра

Тема в разделе "Arduino & Shields", создана пользователем Mestniy, 1 окт 2015.

  1. Mestniy

    Mestniy Гуру

    Доброго времени суток. Подскажите пожалуйста, можно ли как-то через множитель выбрать конкретный диод и сним проводить манипуляции. И как это прописать?
     
    Viquis нравится это.
  2. bobu

    bobu Нерд

    Mestniy нравится это.
  3. Mestniy

    Mestniy Гуру

    А что у вас со второй частью?
     
    Viquis нравится это.
  4. bobu

    bobu Нерд

    не хватило ума объеденить всё в один финишный скетч
     
  5. Mestniy

    Mestniy Гуру

    ) Время, синяки, и боль от душераздерающих нерабочих скетчей. Думаю догодаешся, если день-два поседишь. Ну если вопросы есть, буду рад помочь. Хотя сам я не профи, но помогу чем могу.
     
    Viquis нравится это.
  6. Mestniy

    Mestniy Гуру

    У меня возник вопрос. Имеется часть скетча:
    Код (C++):

    const int latchPin = 8;
    const int clockPin = 12;
    const int dataPin = 11;
    char inputString[2];
    void setup() {
      pinMode(latchPin, OUTPUT);
      pinMode(dataPin, OUTPUT);
      pinMode(clockPin, OUTPUT);
      Serial.begin(9600);
      Serial.println("reset");
    }
    void loop() {
      for (int thisLed = 0; thisLed < 16; thisLed++) {
        registerWrite(thisLed, HIGH);
        if (thisLed > 0) {
          registerWrite(thisLed - 1, LOW);
        }
        else {
          registerWrite(15, LOW);
        }
        delay(250);
      }
    }
    void registerWrite(int whichPin, int whichState) {
      unsigned int bitsToSend = 0;  
      digitalWrite(latchPin, LOW);
      bitWrite(bitsToSend, whichPin, whichState);
      byte registerOne = highByte(bitsToSend);
      byte registerTwo = lowByte(bitsToSend);
      shiftOut(dataPin, clockPin, MSBFIRST, registerTwo);
      shiftOut(dataPin, clockPin, MSBFIRST, registerOne);
      digitalWrite(latchPin, HIGH);
    }
     
    Вопрос, а что если у меня 9 сдвиговых регистров? То как правильно прописать эту часть кода?:
    Код (C++):
    void registerWrite(int whichPin, int whichState) {
      unsigned int bitsToSend = 0;
      digitalWrite(latchPin, LOW);
      bitWrite(bitsToSend, whichPin, whichState);
      byte registerOne = highByte(bitsToSend);
      byte registerTwo = lowByte(bitsToSend);
      shiftOut(dataPin, clockPin, MSBFIRST, registerTwo);
      shiftOut(dataPin, clockPin, MSBFIRST, registerOne);
      digitalWrite(latchPin, HIGH);
     
    Viquis нравится это.
  7. DrProg

    DrProg Вечный нерд

    Не совсем понятен вопрос, что значит множитель выбрать? Доступ к конкретному биту интересует? Пример:
    Код (C++):
    char i = 0;
    i |= 1; // установка 0-го бита переменной i в 1
    i |= 1 << 3; // установка 3-го бита в 1 (отсчет с 0, т.е. первый бит -- это нулевой)
    i &= ~(1 << 4); // Сброс 4-го бита в 0
    Если регистры каскадом, то сначала пихается байт предназначенный самому дальнему регистру.
     
    ИгорьК нравится это.
  8. Megakoteyka

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

    Mestniy, начинайте изъясняться по-русски. Что это за название темы - "сдвигового регистра"?
    Формулируйте так, чтобы было понятно не только вам, но и другим. Какой множитель? Какой диод и где он находится? Тут с телепатами туго, еще не все из отпусков вернулись.
     
  9. Mestniy

    Mestniy Гуру

    Понял. Спасибо большое за советы. Буду обязательно работать.
    Не подскажите по коду?
     
    Viquis нравится это.
  10. Mestniy

    Mestniy Гуру

    И вопрос, можно ли посмотреть состояние светодиода 35-го, например(HIGH или LOW).
     
    Viquis нравится это.
  11. Megakoteyka

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

    Заведите массив на 9 байт.
    Зачем его смотреть? Вы его и так знаете, вы же сами устанавливаете его состояние.
     
    Mestniy нравится это.
  12. Mestniy

    Mestniy Гуру

    Можете пожалуйста поподробнее про 9-ти битовую систему? Как она приминима к моему коду?
    И про посмотреть, я имел ввиду считать. Например если registerRead(6, LOW);, то выполнить действие!
    Заранее спасибо...
     
    Viquis нравится это.
  13. Megakoteyka

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

    Вы байты с битами путаете. Один регистр - 1 байт. 9 регистров - 9 байт.
    У вас регистры выходные, в них можно только писать. Читают с входных регистров.
     
  14. Mestniy

    Mestniy Гуру

    А как массив то прописать?
    И как вы говорите считывать?
     
    Viquis нравится это.
  15. DrProg

    DrProg Вечный нерд

    byte massiv
    Код (C++):
    byte massiv[9];
     
    ИгорьК и Mestniy нравится это.
  16. DrProg

    DrProg Вечный нерд

    Зачем считывать? Значения битов имеется в байте который вы только что закинули в регистр.
     
    ИгорьК нравится это.
  17. Megakoteyka

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

    Не пора ли вам почитать книжек и выучить С++? А то вы уже предлагаете писать прошивки за деньги, а сами при этом задаете вопросы уровня новичка.
     
  18. ИгорьК

    ИгорьК Гуру

    Читать книжки вредно. Надо задавать вопросы. Все правильно товарищ делает. У него есть отличный пример.
     
    Mestniy нравится это.
  19. Mestniy

    Mestniy Гуру

    Спасибо Игорь за поддержку!
    Я извиняюсь за глупые вопросы. На заказ я делаю только то что умею.
    Но спасибо за советы. Обязательно буду продолжать изучать C++.
     
    Viquis нравится это.
  20. Mestniy

    Mestniy Гуру

    Спасибо.
     
    Viquis нравится это.