Attiny85+NRF2401++Arduino

kurakste
Offline
Зарегистрирован: 27.06.2017

Всем привет. 

 

Помогите пожалуйста разобраться с вопросом. Есть модуль на NRF2401+ с Digispark на Attiny85. 

Нужно собрать на этом передатчик. Не работает. 

Подключил по даташитам NRF к Digispark : MISO -0, MOSI-1,SCK-2,CSN-3, CE4-4 

Точнее не так - подключил прозвонив выводы. В доках на Digispark MISO - 1, MOSI -0, но осциллограф показывает другое. Написал такой код, что бы проверить правильность выводов:

 

#include <SPI85.h>

#define MISO 0
#define MOSI 1
#define SCL 2
#define SS 3
void setup() {
pinMode(MOSI,OUTPUT);
pinMode(SCL, OUTPUT);
pinMode(MISO,INPUT);
pinMode(SS,OUTPUT);
SPI85.begin;
digitalWrite(SS,HIGH);
digitalWrite(MOSI,HIGH);
digitalWrite(SCL,HIGH);
}

void loop() {
int i=0x0; //Здесь должен быть регистор CONFIG. Мы его считываем. 
uint8_t inchar;

while (1) {  
digitalWrite(SS,LOW);
inchar=SPI85.transfer(i);
//DigiKeyboard.println(inchar);
digitalWrite(SS,HIGH);
delay(500);} 
}

Код работает. Цифры посылает, модуль на них что-то отвечает.  

 

Загружаю код передатчика - не работает. 

Посмотрел осциллографом - MOSI, SCK,CSN - выходят как надо. 

Нет сигнала от модуля по MISO. Закралась догадка - отключил MISO от контроллера- данные из модуля передатчика идут. Получается контроллер прижимает MISO к земле? Не понятно почему. 

Пошел разбираться с библиотекой RF24. В ней вроде все как надо. 

Есть место в коде: 

 


..                                                                                
#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
// see http://gammon.com.au/spi                                                 
#   define DI   0  // D0, pin 5  Data In                                        
#   define DO   1  // D1, pin 6  Data Out (this is *not* MOSI)                  
#   define USCK 2  // D2, pin 7  Universal Serial Interface clock               
#   define SS   3  // D3, pin 2  Slave Select                                   
#elif defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
..

Void SPIClass::begin() {                                                                                                                                       
   pinMode(USCK, OUTPUT);                                                        
   pinMode(DO, OUTPUT);                                                          
   pinMode(DI, INPUT);                                                                                                              
   USICR = _BV(USIWM0);     }                                                     
..

 

В которым для тиньки определяются выводы и их направление. Единственная догадка - может так быть, компилятор получает другое название контроллера? Как это проверить?

Или я вообще не в ту сторону пошел? 

Помогите разобраться.

Спасибо.

 

PS: Библиотеку проверял на ардуино нано, uno - работает. Модуль тоже работает с другими платами. 

Gofen
Offline
Зарегистрирован: 02.12.2019

На Digispark на P1 висит светодиод на плате.