SPI и PT6961

Тема в разделе "Arduino & Shields", создана пользователем xplp, 17 дек 2012.

  1. xplp

    xplp Нуб

    Есть плата с лед матрицей и драйвером PT6961. Не могу разобраться как правильно отправлять данные по SPI на PT6961. Вот код где тупо перебором отправляются данные, матрица зажигается и хаотично мигает по строкам.[​IMG]
    Код (Text):
    #include <SPI.h>
     
    const int SSPin = 10;
     
    void setup() {
     
      pinMode (SSPin, OUTPUT);
     
      SPI.begin();
     
    }
     
    void loop() {
     
      for(int i=0; i<255; i++){
        for(int j=0; j<255; j++)
        digitalPotWrite(i,j);
        delay(1);
      }
     
    }
     
    int digitalPotWrite(int address, int value) {
     
      digitalWrite(SSPin,LOW);
     
      SPI.transfer(byte(address));
      SPI.transfer(byte(value));
     
      digitalWrite(SSPin,HIGH);
    }
    Вот тут https://sites.google.com/a/gvc.in/open-embedded/home/ic-details/pt6961 написано как работать с этим драйвером, но я не понимаю как правильно отправлять данные, что бы, например, инициализировать лед матрицу, написано - отправить в такой последовательности:
    So to initalise 6961 write following commands
    0x03
    0x40
    0x8f (for maximum intensity and display on)
    0xc0 + address, data.. (upto address 0x0d)
    Но если я пишу последовательно SPI.transfer(byte(03)) и т.д. при инициализации ничего не происходит. Вопрос как правильно отправлять данные? Если есть готовая библиотека для работы, то подскажите где она лежит.
     
  2. nailxx

    nailxx Официальный Нерд Администратор

    А вы не могли спутать шестнадцатиричную и десятичную/восьмеричную систему счисления? Т.е. вы пишите byte(0x40), а не byte(40) ?
     
  3. xplp

    xplp Нуб

    Я писал по разному, и 03 и 0х03. и просто переводил 40 из 16й в 10ю и писал 64... просто дело в том, что ничего не зажигается. Вот что например нужно послать и в какой последовательности согласно приведённой инструкции, чтобы загорелся один светодиод?
    В даташите https://dl.dropbox.com/u/64193121/datasheet_6961.pdf на 13 странице написан алгоритм работы, какие данные посылать. Помогите разобраться, как это в коде для ардуино написать правильно.
    Посылаю данные так:
    Код (Text):
      digitalWrite(SSPin,LOW); //command 2
      SPI.transfer(byte(0x40));
      digitalWrite(SSPin,HIGH);
      digitalWrite(SSPin,LOW); //command 3
      SPI.transfer(byte(0xC0));
      digitalWrite(SSPin,HIGH);
      digitalWrite(SSPin,LOW); //command 1
      SPI.transfer(byte(0x03));
      digitalWrite(SSPin,HIGH);
      digitalWrite(SSPin,LOW); //command 4
      SPI.transfer(byte(0x80));
      digitalWrite(SSPin,HIGH);
      digitalWrite(SSPin,LOW); //command 1
      SPI.transfer(byte(0x03));
      digitalWrite(SSPin,HIGH);
      digitalWrite(SSPin,LOW); //command 4
      SPI.transfer(byte(0x8F));
      digitalWrite(SSPin,HIGH);
    Такая запись будет правильная или нет?