gpt4 book ai didi

arduino - ATTiny 和 Uno 未连接的 NRF24L01

转载 作者:行者123 更新时间:2023-12-02 01:30:15 26 4
gpt4 key购买 nike

我使用此接线图将 ATTiny85 连接到 NRF24L01+ 模块:diagram。 ATTiny85 会定期进入和退出 sleep 状态,以向接收器 Arduino Uno 发送一些值。如果 ATTiny 使用 Arduino 电源 (3.3v),一切正常。当我用一个单独的 CR2032 纽扣电池运行 ATTiny 时,它提供大约 3v 的电压,Arduino 从未收到任何数据。我有一个状态 LED 连接到 ATTiny 以确保 ATTiny 正确唤醒,它是。这是两者的代码:

编辑:将它连接到一个不是来自 Uno 的外部 3.3v 电压使一切正常——为什么纽扣电池的电压不起作用?我认为一切都低于 2.8v,即 CR2032 的最低值。

阁楼代码

#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 才能建立连接,还是与电池有关,或者完全是其他原因?任何帮助将不胜感激。

最佳答案

我在使用电池运行 Arduino Nano 时遇到了同样的问题。Nano 有一个 3.3V 引脚,我用它来为 NRF24L01+ 模块供电。

当我的电池组电压降至 3.3V 以下时,3.3V 引脚电压也会下降。几分钟后,RF 模块不再发送任何消息。

我通过我之前为另一个项目购买的 12V 升压稳压器对电池进行布线,从而暂时解决了这个问题。这些 12V 然后转到 Nano 上接受 6-20V 的“UN”引脚。此设置运行良好,但绝对不是最佳设置。

因此,我打算使用 3.3V 升压稳压器,例如 Pololu 3.3V 升压稳压器 U1V11F3,根据供应商的说法,它可以有效地从输入电压产生 3.3V低至 0.5V。

我认为这也可能对您的项目有所帮助。

关于arduino - ATTiny 和 Uno 未连接的 NRF24L01,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34708949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com