#1 Re: Программирование Arduino » Инициализация SPI2 на Arduino Mega 2560 Rev3 » 2019-02-11 09:08:39

ard125 пишет:

Я смотрю что у вас в скетчах по разному обозначен пин слейв для карты. В одном sc, в другом чипселект. Может в этом проблема?

наверное запутался. Но как я его уже не обзывал. толку 0.

#2 Re: Программирование Arduino » Инициализация SPI2 на Arduino Mega 2560 Rev3 » 2019-02-10 22:48:29

Они у вас что по отдельности работают?

Не RF24 в определенный момент затыкается. Уже выяснил что у меня нет SPI2 а проблема в китайском модуле SD micro. Он не заканчивает сесию а втупую держиш шину. Из за этого масса проблем.

#3 Re: Программирование Arduino » Инициализация SPI2 на Arduino Mega 2560 Rev3 » 2019-02-10 19:43:03

Это я уже читал. Не очень понимаю. Там в мануале сказано что есть 2 SPI независимых. (https://www.microchip.com/wwwproducts/en/ATmega2560)По идеее я могу их оба сделать мастерами. Как сделать второй мастером. Как его вообще объявить? В чем суть мат части? Да чего то не понимаю. На вики болт тоже. При чем тут вики.

#4 Программирование Arduino » Инициализация SPI2 на Arduino Mega 2560 Rev3 » 2019-02-10 12:59:48

0z0n
Ответов: 9

Нужна помощь с этим вопросом т.к. модуль micro sd card блокирует работу других устройств arduino на шине SPI. Взял Megu для этих целей но не могу поднять SPI2 помогите кто соображает как это сделать. Мат части нигде толком нет. roll

Точнее модуль SD работает всегда но вот незадачка если V5+ подключаю к источнику питания даже не подключив V5- модуль RF24 ложится и начинает при опросе каналов  кидать "4444444444444444444444444444444444444444" как будто он не подключен.

Вот стандартный скетч немного переработаный для "RF 24"

#include <Wire.h>
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include <SD.h>


Sd2Card card;
SdVolume volume;
SdFile root;

const int chipSelect = 4;

//RF24 radio(9,10); // инициализировать модуль на пинах 9 и 10 Для Уно
RF24 radio(9,53);// Для Меги

int SR = 53;
int SC = 4;

const uint8_t num_channels = 128;
uint8_t values[num_channels];
void setup(void)
{

Serial.begin(9600);

pinMode(SR,OUTPUT);
pinMode(SC,OUTPUT);
pinMode(9,OUTPUT);
digitalWrite(9, LOW);
digitalWrite(SR, LOW);
digitalWrite(SC, HIGH ); // - работа с пином  
  
  printf_begin();
  radio.begin();
  radio.setAutoAck(false);
  radio.startListening();

  radio.printDetails();  // Вот эта строка напечатает нам что-то, если все правильно соединили.
  delay(5000);              // И посмотрим на это пять секунд.

  radio.stopListening();
  int i = 0;    // А это напечатает нам заголовки всех 127 каналов
  while ( i < num_channels )  {
    printf("%x",i>>4);
    ++i;
  }
  printf("\n\r");
  i = 0;
  while ( i < num_channels ) {
    printf("%x",i&0xf);
    ++i;
  }
  printf("\n\r");
}
const int num_reps = 100;

void loop(void)
{
  memset(values,0,sizeof(values));
  int rep_counter = num_reps;
  while (rep_counter--) {
    int i = num_channels;
    while (i--) {
      radio.setChannel(i);
      radio.startListening();
      delayMicroseconds(128);
      radio.stopListening();
      if ( radio.testCarrier() )
        ++values[i];
    }
  }
  int i = 0;
  while ( i < num_channels ) {
    printf("%x",min(0xf,values[i]&0xf));
    ++i;
  }
  printf("\n\r");
}
int serial_putc( char c, FILE * ) {
  Serial.write( c );
  return c;
}

void printf_begin(void) {
  fdevopen( &serial_putc, 0 );
} 

И вот для SD


#include <Wire.h>

#include <SPI.h>
#include <SD.h>

#include "nRF24L01.h"
#include "RF24.h"

int SR = 53;
int SC = 4;

Sd2Card card;
SdVolume volume;
SdFile root;

const int chipSelect = 4;

void setup() {
pinMode(SR,OUTPUT);
pinMode(SC,OUTPUT);
pinMode(9,OUTPUT);
digitalWrite(9, LOW);
digitalWrite(SR, HIGH);
digitalWrite(SC, LOW); // - работа с пином  
    
    
    Serial.begin(9600);
    Serial.print("\nInitializing SD card...");

    if (!card.init(SPI_HALF_SPEED, chipSelect)) {
        // неверное подключение или карта неисправна
        Serial.println("initialization failed");
        return;
    } else {
        // всё ок!
        Serial.println("Wiring is correct and a card is present.");
    }

    // считываем тип карты и выводим его в COM-порт
    Serial.print("\nCard type: ");
    switch (card.type()) {
        case SD_CARD_TYPE_SD1:
            Serial.println("SD1");
            break;
        case SD_CARD_TYPE_SD2:
            Serial.println("SD2");
            break;
        case SD_CARD_TYPE_SDHC:
            Serial.println("SDHC");
            break;
        default:
            Serial.println("Unknown");
    }

    // инициализация файловой системы
    if (!volume.init(card)) {
        // неверная файловая система
        Serial.println("Could not find FAT16/FAT32 partition.");
        return;
    }

    // считываем тип и вычисляем размер первого раздела
    uint32_t volumesize;
    Serial.print("\nVolume type is FAT");
    Serial.println(volume.fatType(), DEC);
    Serial.println();

    volumesize = volume.blocksPerCluster(); // блоков на кластер
    volumesize *= volume.clusterCount(); // кластеров
    volumesize *= 512; // 512 байтов в блоке, итого байт.. 
    Serial.print("Volume size (bytes): ");
    Serial.println(volumesize);
    Serial.print("Volume size (Kbytes): ");
    volumesize /= 1024;
    Serial.println(volumesize);
    Serial.print("Volume size (Mbytes): ");
    volumesize /= 1024;
    Serial.println(volumesize);

    Serial.println("\nFiles found on the card (name, date and size in bytes): ");
    root.openRoot(volume);
    // выводим список файлов
    root.ls(LS_R | LS_DATE | LS_SIZE);
}

void loop(void) {
}

Подвал раздела