SPI & ARDUINO NANO

Тема в разделе "Arduino & Shields", создана пользователем netro, 21 сен 2018.

Метки:
  1. netro

    netro Нуб

    Проблемма чтения с использования spi мой алгоритм
    1 Ставлю CSN(ss) в HIGH
    2 инициализирую spi
    3 Ставлю CSN(ss) в low
    !!!4 начинаю передачу команды чтения регистра ( вот здесь проблемма независима от регистра после окончания передачи имеется 1110000)
    5 пауза 1 мкс
    6 Ставлю CSN(ss) в HIGH
    7 выключаю spi
    8 вывожу результат

    *библиотека nrf работает нормально передача есть

    использую пины :

    // SPI PIN //
    #define MiSO 11 // SPI Serial Output
    #define MOSI 12 // SPI Serial Input
    #define CE 9 // TX ModeHigh Pulse > 10μs |RX Mode High | Standby Modes Low
    #define CSN 10 //SPI Chip Select, active low
    #define SCK 13 // SPI Clock

    Код (C++):

    #include <Arduino.h>
    #include "SPI.h"
    #include "nRF24L01.h" // тут только map регистров

    SPISettings SetupSpi(4000000, LSBFIRST, SPI_MODE0);

    void setup() {
            pinMode(CSN, OUTPUT);
            digitalWrite(CSN, HIGH);
            byte In=0;
            byte In1=0;
            Serial.begin(9600); //set baud rate to 115200 for usart
            SPDR=0;
            SPI.begin ();
            SPDR=NRF_CONFIG;
            digitalWrite(CSN, LOW);
            SPI.beginTransaction(SetupSpi);
            SPI.transfer(FIFO_STATUS);
            In=SPDR;
            delayMicroseconds(1);
            In1=SPDR;
            digitalWrite(CSN, HIGH);
            SPI.endTransaction();

            In1=SPDR;
            Serial.println(SPDR,BIN);            // print as a raw byte value
            Serial.print(NRF_CONFIG,BIN);            // print as a raw byte value

            SPI.end();

    }

    void loop() {
    }
     
     
  2. Daniil

    Daniil Гуру

    Поясните, пожалуйста. К кому эта команда обращена?
    Может засмеют, в даташит не хочется лезть, что в регистре SPDR?
    У вас к spi шине подключено устройство?
    Если не вдаваться в подробности подключаемого устройства, и верить, что вы делаете все правильно, т.е. устройство отвечает сразу. То вам нужно посмотреть на то, что возвращает spi.transfer.
    answer=spi.transfer(ask)
    На этом форуме я делал ацп ad7714 подглядите там. Я специально слал заглушку "0хFF", чтобы во время передачи получать данные.
    Что делает задержка в 1мкс?
     
  3. netro

    netro Нуб

    SPDR- регистор мк atmega328( он равен на стороне master-- answer=spi.transfer(FIFO_STATUS) , тоесть answer=SPDR).

    Использовал , delayMicroseconds(1); думал дело в задержке .

    FIFO_STATUS- команда чтения регистра статуса fifo (ещё читал статус 0x00 точно также ) сама команда выглядит 0b000A AAAA где А регистр который читать .
     
  4. netro

    netro Нуб

  5. Daniil

    Daniil Гуру

    чтобы считать данные, нужно их запросить. После этого нужно тактировать sck чтобы получить ответ.
    При этом помнить, что spi.transfer работает только с байтами.
    Псевдокод:
    Код (C++):
    spi.transfer(запрос данных регистра А)
    uint8_t ans1=spi.transfer(0xff)
    uint8_t ans2=spi.transfer(0xff)
    uint16_t ans=ans1<<8 | ans2
    1 мкс погоду не сделает, у вас spi на частоте 4 МГц, да и в ардуино все реализовано последовательно, пока не отправит она не перейдёт к следующей операции.
     
  6. parovoZZ

    parovoZZ Гуру

    С Nrf24l01+ работаешь? Или с другим чем? Я неоднократно выкладывал коды. Да и в сети полно инфы.
     
  7. parovoZZ

    parovoZZ Гуру

    В абдурино может быть, а у нормальных программистов отправка через USART работает независимо от программы. Окончание отправки сигнализируется флагами и прерываеиями.
     
  8. Daniil

    Daniil Гуру

    за всё говорить не буду, но spi точно не в "фоне" отправляет данные.
     
  9. netro

    netro Нуб

    Да с nrf
     
  10. netro

    netro Нуб

    не нашел что бы использовали не библеотеку nrf
     
    Последнее редактирование: 22 сен 2018
  11. parovoZZ

    parovoZZ Гуру

    В USI да - не в фоне - там сдвиговый регистр тактировать надо.
     
  12. parovoZZ

    parovoZZ Гуру

    Я не использую библиотеку. Если надо, вечерком скину код.
     
  13. netro

    netro Нуб

    буду признателен.