NRF24L01 с ATTiny и Uno не соединяются

У меня ATTiny85 подключен к модулю NRF24L01+ с помощью этой схемы подключения: схема. ATTiny85 периодически входит и выходит из спящего режима, чтобы посылать какое-то значение получателю, Arduino Uno. Если ATTiny работает от источника питания Arduino (3.3 В), все работает правильно. Когда я запускаю ATTiny с отдельной ячейки для монет CR2032, которая обеспечивает напряжение около 3 В, Arduino никогда не получает никаких данных. У меня есть индикатор состояния, подключенный к ATTiny, чтобы убедиться, что ATTiny правильно просыпается, что и есть. Вот код для обоих:

РЕДАКТИРОВАТЬ: Подключение его к внешнему 3.3 В, а не от Uno делает все работает - почему не работает напряжение ячейки монеты? Я думаю, что все оценивается ниже 2,8 В, минимум CR2032.

Код ATTiny

#include <avr/sleep.h>
#include <avr/interrupt.h>

// Routines to set and claer bits (used in the sleep code)
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif

#define CE_PIN 3
#define CSN_PIN 3 //Since we are using 3 pin configuration we will use same pin for both CE and CSN

#include "RF24.h"

RF24 radio(CE_PIN, CSN_PIN);

byte address[11] = "SimpleNode";
unsigned long payload = 0;

void setup() {
  radio.begin(); // Start up the radio
  radio.setAutoAck(1); // Ensure autoACK is enabled
  radio.setRetries(15,15); // Max delay between retries & number of retries
  radio.openWritingPipe(address); // Write to device address 'SimpleNode'
  pinMode(4, OUTPUT);
  digitalWrite(4, HIGH);
  delay(500);
  digitalWrite(4, LOW);
  delay(500);
  digitalWrite(4, HIGH);
  delay(500);
  digitalWrite(4, LOW);
  delay(500);
  digitalWrite(4, HIGH);
  delay(500);
  digitalWrite(4, LOW);
  delay(1000);
  setup_watchdog(6);
}

volatile int watchdog_counter = 0;

ISR(WDT_vect) {
  watchdog_counter++;
}

void loop() 
{
  sleep_mode(); //Go to sleep!

  if(watchdog_counter >= 5)
  {
    digitalWrite(4, HIGH);
    watchdog_counter = 0;
    payload = 123456;
    radio.write( &payload, sizeof(unsigned long) ); //Send data to 'Receiver' ever second
    delay(1000);
    digitalWrite(4, LOW);
  }
}



//Sleep ATTiny85

void system_sleep() {

  cbi(ADCSRA,ADEN);                    // switch Analog to Digitalconverter OFF

  set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here
  sleep_enable();

  sleep_mode();                        // System actually sleeps here

  sleep_disable();                     // System continues execution here when watchdog timed out 

  sbi(ADCSRA,ADEN);                    // switch Analog to Digitalconverter ON

}

// 0=16ms, 1=32ms,2=64ms,3=128ms,4=250ms,5=500ms
// 6=1 sec,7=2 sec, 8=4 sec, 9= 8sec
void setup_watchdog(int ii) {

  byte bb;
  int ww;
  if (ii > 9 ) ii=9;
  bb=ii & 7;
  if (ii > 7) bb|= (1<<5);
  bb|= (1<<WDCE);
  ww=bb;

  MCUSR &= ~(1<<WDRF);
  // start timed sequence
  WDTCR |= (1<<WDCE) | (1<<WDE);
  // set new watchdog timeout value
  WDTCR = bb;
  WDTCR |= _BV(WDIE);
}

Код получателя

#define CE_PIN 7
#define CSN_PIN 8

#include <SPI.h>
#include "RF24.h"

RF24 radio(CE_PIN, CSN_PIN);

byte address[11] = "SimpleNode";
unsigned long payload = 0;

void setup() {
  while (!Serial);
  Serial.begin(115200);
  radio.begin(); // Start up the radio
  radio.setAutoAck(1); // Ensure autoACK is enabled
  radio.setRetries(15,15); // Max delay between retries & number of retries
  radio.openReadingPipe(1, address); // Write to device address 'SimpleNode'
  radio.startListening();
  Serial.println("Did Setup");

}

void loop(void){
  if (radio.available()) {

    radio.read( &payload, sizeof(unsigned long) );
    if(payload != 0){
        Serial.print("Got Payload ");
        Serial.println(payload);
    }
  }
}

Проблема здесь в том, что ATTiny и Uno нужно включать одновременно, чтобы установить соединение, или это связано с батареей, или что-то еще полностью? Любая помощь будет оценена.

1 ответ

Я испытываю ту же проблему при запуске Arduino Nano от аккумулятора. Nano имеет 3,3 В контакт, который я использую для питания модуля NRF24L01+.

Когда напряжение от моего аккумулятора падает ниже 3,3 В, напряжение на контакте 3,3 В также падает. Через несколько минут модуль RF не отправляет никаких сообщений.

Я временно решил проблему, направив батарею через 12-вольтовый стабилизатор, который я купил ранее для другого проекта. Эти 12 В затем идут к выводу "ООН" на Nano, который принимает 6-20 В. Эта установка работает хорошо, но определенно не является оптимальной.

Поэтому я планирую использовать регулятор с повышением напряжения 3,3 В, такой как регулятор с повышением напряжения Pololu 3,3 В U1V11F3, который, по словам поставщика, может эффективно генерировать 3,3 В из входных напряжений всего 0,5 В.

Я думаю, что это может быть полезно для вашего проекта.

Другие вопросы по тегам