Помогите разобраться что не так с SPI. Собрал схему управления семисегментным индикатором, через shiftOut всё работает,а SPItransfer ни в какую. Код (Text): #include <SPI.h> // подключаем библиотеку SPI enum { reg = 10 }; // провод CS подсоединяем к 8-му пину Arduino void setup() { SPI.begin(); // инициализируем SPI pinMode(reg, OUTPUT); // настраиваем 8-й пин как выход } void loop() { // храним в массиве все цифры static uint8_t digit[16] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; // выводим цифры по одной for (int i=0;i<16;i++){ digitalWrite(reg, LOW); // притягиваем CS к земле - начало передачи SPI.transfer(digit[i]); // передаем байт digitalWrite(reg, HIGH); // отпускаем CS - конец передачи delay(1000); // ждем секунду } //очистим дисплей на секунду digitalWrite(reg, LOW); SPI.transfer(0xFF); digitalWrite(reg, HIGH); delay(1000); }
А если делать как тут? http://arduino.cc/en/Reference/SPITransfer http://arduino.cc/en/Reference/DueExtendedSPI
Попробуйте добавить в скетч Код (Text): pinMode(reg, OUTPUT); SPI.begin(reg); SPI.setDataMode(reg,SPI_MODE0); SPI.setBitOrder(reg,LSBFIRST); SPI.setClockDivider(reg,84);
Если я правильно Вас понял код должен выглядеть так. Код (Text): void setup() { // инициализируем SPI pinMode(reg, OUTPUT); // настраиваем 8-й пин как выход SPI.begin(reg); SPI.setDataMode(reg,SPI_MODE0); SPI.setBitOrder(reg,LSBFIRST); SPI.setClockDivider(reg,84); } void loop() { // храним в массиве все цифры static uint8_t digit[16] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; // выводим цифры по одной //for (int i=0;i<16;i++){ // digitalWrite(reg, LOW); // притягиваем CS к земле - начало передачи SPI.transfer(reg,digit[i]); // передаем байт //digitalWrite(reg, HIGH); // закоментировал в DUE библиотека сама выполняет управление передачей delay(1000); // ждем секунду
Разобрался, оказалось нужно подключать к системному SPI расположение пинов здесь http://arduino.ua/ru/prog/SPI