Ардуино + led матрица

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Vitalii, 6 май 2014.

  1. Vitalii

    Vitalii Нуб

    Доброго дня! Собрал такую схему! что в ней не так, постоянно открыты ключи на BC557 транзисторе, в матрице столбец постоянно светится, digitalWrite(номер пина, HIGH); или digitalWrite(номер пина, LOW); ничего не дают. Может я не так что то подключаю? что сдесь не правильно?

    пример скетча:

    Код (Text):
    #include <SPI.h>
    enum { REG = 8 }; // пин, управляющий защёлкой (SS в терминах SPI)


    int col_1 = 2;
    int col_2 = 3;
    int col_3 = 4;
    int col_4 = 5;
    int col_5 = 6;
    int col_6 = 7;
    int col_7 = 9;

    /* Теперь шлём по 16 бит. Важный момент: так как по умолчанию
     * данные передаются, начиная со старшего бита, сначала нужно
     * послать старший байт, затем - младший - тогда всё 16 бит
     * передадутся в правильном порядке.
     */
    void writeShiftRegister16(int ss_pin, uint16_t value)
    {
      digitalWrite(ss_pin, LOW);
      /* Фокус вот в чём: сначала шлём старший байт */
      SPI.transfer(highByte(value));
      /* А потом младший */
      SPI.transfer(lowByte(value));
      digitalWrite(ss_pin, HIGH);
    }

    /* Слегка изменим функцию для работы с 16-битными значениями */
    void rotateLeft(uint16_t &bits)
    {
      uint16_t high_bit = bits & (1 << 15) ? 1 : 0;
      bits = (bits << 1) | high_bit;
    }


    void setup() {
      pinMode(col_1, OUTPUT);
      pinMode(col_2, OUTPUT);
      pinMode(col_3, OUTPUT);
      pinMode(col_4, OUTPUT);
      pinMode(col_5, OUTPUT);
      pinMode(col_6, OUTPUT);
      pinMode(col_7, OUTPUT);
     
      digitalWrite(col_1, HIGH);
      digitalWrite(col_2, HIGH);
      digitalWrite(col_3, HIGH);
      digitalWrite(col_4, HIGH);
      digitalWrite(col_5, HIGH);
      digitalWrite(col_6, HIGH);
      digitalWrite(col_7, HIGH);
      SPI.begin();
      pinMode(REG, OUTPUT);
      writeShiftRegister16(REG, 0);
    }

    // the loop routine runs over and over again forever:
    void loop() {
     
      uint16_t nomad = 1;
      for(int i = 0; i < 10; i++){ // в данный момент матрица на 10 столбиков!  
       
    //  writeShiftRegister16(REG, 0);
       
    //  digitalWrite(col_1, HIGH);
    //  delay(300);
    //  digitalWrite(col_1, LOW);
    //  writeShiftRegister16(REG, 0);
    //  delay(300);
    //  digitalWrite(col_2, HIGH);
    //  delay(300);
    //  digitalWrite(col_2, LOW);
    //  writeShiftRegister16(REG, 0);
    //  delay(300);
       
      writeShiftRegister16(REG, nomad);
      rotateLeft(nomad);
       
      delay(250);
      }  
    }
     

    Вложения:

    • Схема.jpg
      Схема.jpg
      Размер файла:
      586,2 КБ
      Просмотров:
      981
  2. acos

    acos Официальный гик Администратор

    Резисторы в цепи светодиодов присутствуют? (в схеме нету)
     
  3. Vitalii

    Vitalii Нуб

    да в матрице стоят на 300 ом. Щас взял просто транзистор BC557C - на эмиттер подал 5 вольт. проверяю напряжение - на эмиттере = 5.11, на базе = 5.19 (через резистор на 8.2 кОм так само 5.18?) , коллектор = 0. Подключаю пин ардуино ( который с задержкой в несколько секунд меняет состояние HIGH на LOW) через резистор на 8.2 кОм. замеряю. эмиттер = 5.11, база на транзисторе = 4.44 , коллектор = 5 вольт - постоянно в независимости от состояния пина!!! даже когда пин не подключен и касаешся базы - на коллекторе появляется напряжение!
    что за фигня?! что не так делаю?
     
  4. Vitalii

    Vitalii Нуб

    так - поставил между базой и эмиттером резик на 10 кОм - вроде заработало. теперь надо как то расчитать правильность номиналов этих резисторов. Может кто подскажет как вообще правильно делать ключ на p-n-p транзисторе и можно ли его в данной схеме чем то заменить - вроде про мосфеты с каким то n канолом ????
     
  5. acos

    acos Официальный гик Администратор

    http://wiki.amperka.ru/конспект-arduino:биполярный-транзистор

    Далее - почему с LM7805 питание кидаете на Vin а не на 5V? На регуляторе ардуины в итоге падает напряжение ниже 5 вольт, и у вас на ардуине в итоге те самые 4,44 вольта. Разницы напряжения между эмиттером и базой в итоге хватает на то, чтоб открыть транзистор, и получаете то что имеете.
    Подайте с 7805 сразу на вход 5V, должно помочь.
     
    Vitalii нравится это.
  6. Vitalii

    Vitalii Нуб

    Еханый бабай!!! забыл что у nano внизу регулятор стоит.... РЕАЛЬНО помогло. Огромное ПОСИБО!