Подключение pt6311b по spi

Тема в разделе "Arduino & Shields", создана пользователем Funny59, 8 фев 2020.

Метки:
  1. Funny59

    Funny59 Нерд

    Разбираюсь с управлением контроллером ВЛИ PT6311B. Первый раз работаю с spi, до этого только через готовые библиотеки работал. Написал вот такой скетч, всё по датащиту, но не пашет
    Код (C++):
    #include <SPI.h>

    int CS = 14;

    void setup() {
      // put your setup code here, to run once:
      delay(200);
      pinMode(CS, OUTPUT);
      digitalWrite(CS, HIGH);
      SPI.setBitOrder(LSBFIRST);
      SPI.setClockDivider(SPI_CLOCK_DIV32);
      SPI.setDataMode(SPI_MODE2);
      SPI.begin();
     
      digitalWrite(CS, LOW);
      SendByte(0b01000000); //cmd2
      digitalWrite(CS, HIGH);

      digitalWrite(CS, LOW);
      SendByte(0b11000000); //cmd3
      for(int i = 0x00; i < 0x2F; i++) SendByte(0); //data
      digitalWrite(CS, HIGH);

      digitalWrite(CS, LOW);
      SendByte(0b00001100); //cmd1
      digitalWrite(CS, HIGH);
     
      digitalWrite(CS, LOW);
      SendByte(0b10001100); //cmd4
      digitalWrite(CS, HIGH);
    }

    void loop() {
      // put your main code here, to run repeatedly:
      digitalWrite(CS, LOW);
      SendByte(0b01000000); //cmd2
      digitalWrite(CS, HIGH);

      digitalWrite(CS, LOW);
      SendByte(0b11000000); //cmd3
      for(int i = 0x00; i < 0x2F; i++) SendByte(0xff); //data
      digitalWrite(CS, HIGH);

      delay(100);
    }

    void SendByte(int data){
      SPI.transfer(data);
    }
     
  2. Daniil

    Daniil Гуру

    Что такое sendbyte? В ардуино transfer поменялся?
    проверяйте параметры spi.
    Когда я начинал я прогал программный spi, в таком случае очень просто проверить правильность передачи данных. (по какому фронту и каким уровнем).
    Если есть логический анализатор или осциллограф, то все значительно проще. Если нет, то светодиодами.
    Советую начинать с запроса какого-нибудь известного регистра.
     
  3. Funny59

    Funny59 Нерд

    Нет sendbyte это функция после loop. Осциллограф есть, но чем он тут поможет
     
  4. parovoZZ

    parovoZZ Гуру

    А там точно SPI MODE 2?
     
  5. Funny59

    Funny59 Нерд

    Не уверен, но CPOL = 1
     
  6. parovoZZ

    parovoZZ Гуру

    А я вижу, что mode 3
     
  7. Funny59

    Funny59 Нерд

    Тоже увидел. Но всё равно не работает
     
  8. Daniil

    Daniil Гуру

    лучше оформлять функции и процедуры перед использованием. Ардуина иде это позволяет, но другие заклюют ошибками.
    смотреть обмен, есть ли ответ, а какой, а правильно ли вы дашик прочитали на spi, то ли отправляете, той ли полярностью... Главное чтоб осцилл был, остальное мелочи.
    Т.е. вы в первый раз взялись за spi и сразу такой сложный код написали. Поимейте терпение и получите результат.;)
     
  9. Funny59

    Funny59 Нерд

    Дак код не сложный как-раз. Делаю по датащиту всё, там алгоритм расписан
     
  10. Daniil

    Daniil Гуру

    нет, имхо, раз он не работает.
    Но задача сама по себе требует наличие железки и времени. Она есть только у вас
     
  11. Funny59

    Funny59 Нерд

    Просто думал какая-то банальная ошибка которую я не вижу
     
  12. parovoZZ

    parovoZZ Гуру

    Странное нежелание ТС посмотреть физические сигналы на шине осликом. А гадание на кофейной гуще в электронике не поможет.
     
  13. Daniil

    Daniil Гуру

    Почти уверен, что так и есть)
    1. Разработчик всегда воюет с контактами.
    Холодная пайка, бредборд, неправильный флюс - причины наличия/отсутствия ненужного/нужного контакта. - тестер/осцилограф в помощь.
    2. Лучше упростить код до запроса какого-нибудь заранее известного регистра (заводской номер) и запрашивает его раз в секунду. Так осцилографом вы увидите заранее известную картину.
    2.1. Нужно убедиться что мк отсылает то, что нужно - осциллограф вблизи мк.
    2.2. Нужно убедиться, что 2-я микросхема получает данные - осциллограф вблизи 2-го камня.
    3. Если с контактами все ок, то проверяем код.
    Полярность spi и т.п.
    Среди запросов не вижу обработки ответа. Вы помните, что spi.transfer во время отправки еще и принимает байт? (т.е. чтобы получить ответ, нужно после запроса отправить байт пустышку, на который 2-й камень никак не реагирует, но в это время он отстукивает ответ на предыдущий запрос).
    4. Если совсем плохо то либо ссзб и проверяем все с начала, либо 2-й камень сдох.
    я еще помню, что до понимания этой истины я мне пришлось потратить время. Мне кажется, до этого каждый должен прийти сам.

    ТС не брезгуйте 1-м пунктом! Особенно, если контакт появляется только при измерении (тестером давите) - вот бида пичаль:(
     
  14. Funny59

    Funny59 Нерд

    Пайку проверил, всё пропаяно. Не совсем понимаю как смотреть осциллографом изменяющийся сигнал
     
  15. Daniil

    Daniil Гуру

    осциллограф ли у вас?
    Какая его модель?
     
  16. Funny59

    Funny59 Нерд

    САГА, просто передача данных не повторяющийся сигнал же
     
  17. Funny59

    Funny59 Нерд

    Известного регистра у микросхемы нет. Про ожидание ответа при использовании spi.transfer не знал
     
  18. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Не слишком высокая скорость ? 1мгц (Ардуино 16мгц).
     
  19. Funny59

    Funny59 Нерд

    Мк прошит на 8мгц встроеные, делитель пробовал ставить на 16 и 32
     
  20. Daniil

    Daniil Гуру

    этот? Внешняя синхронизация по CS от ардуины не поможет?
    для ардуины норм. А вот для 2-й микры многовато, там, кажется, 650кГц максимум