nRF24L01 + attiny85
Драсти.
Не люблю я эти модули, но время от времени ничего лучше них придумать не могу.
Начну с того,что у меня ни на одном модуле с али (ну да, клоны, не оригинал) никогда не работал нормально printDetails, даже там где установлено соединение и данные передаются в обе стороны.
Про конденсаторы и установление почти всех параметров как бы в курсе.Сейчас задач малость забавная. Пытаюсь запилить связку attiny85 от дигиспарк с рф24 модулем. Делал согласно "трехпиновому подключению" (можно нагуглить в прицнипе).
На быстроразводной макетной плате (баребоард) даная схема функционирует успешно. Данные передаются (я передаю в одну сторону, принимает мега, принимает успешно).А вот распаять на pcb ту же схему мне пока не удалось. Дважды уже пытался и дважды не удалось. Питание идет через 1117 3в3 регулятор с 5в (там до ампера вроде бы). Используется типичная
https://tmrh20.github.io/RF24/ATTiny.html
там в числе прочего упрощенная софтварная спи-реализация, успешно работающиая с трехпиновым подключением.Вопрос в том - куда вообще говоря смотреть...
Осцилографа нет.А пока пытаюсь припилить сериал к аттини, пока не очень успешно =(
Идеи кончились...Код собсн...
#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>
#if defined (__AVR_ATtiny85__)
#define CE_PIN 3
#define CSN_PIN 3
#endif
#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__) || defined(__AVR_ATmega2560__)
#define CE_PIN 48
#define CSN_PIN 49
#endif
RF24 radio(CE_PIN, CSN_PIN);
byte radio_pipes[2][6] = {"1Node", "2Node"};
struct SRadioData {
int32_t counter;
int16_t pins[3];
int16_t radio_ms;
int16_t value;
int16_t angle;
};
void setup() {
radio.begin();
radio.setPALevel(RF24_PA_LOW);
radio.setChannel(98);
radio.setDataRate(RF24_2MBPS);
radio.setCRCLength(RF24_CRC_8);
radio.setAutoAck(0);
radio.setRetries(7, 7);
radio.setPayloadSize(sizeof(SRadioData));
//radio.powerUp();
#if defined (__AVR_ATtiny85__)
// spammer
radio.openWritingPipe(radio_pipes[1]);
radio.openReadingPipe(1, radio_pipes[0]);
//radio.startListening();
radio.stopListening();
#endif
#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__) || defined(__AVR_ATmega2560__)
// reciever
radio.openWritingPipe(radio_pipes[0]);
radio.openReadingPipe(1, radio_pipes[1]);
radio.startListening();
Serial.begin(19200);
Serial.println("SETUP...");
Serial.print("PAYLOAD=");
Serial.print(sizeof(SRadioData));
Serial.println();
#endif
}
#if defined (__AVR_ATtiny85__)
int spam_index = 0;
long spam_m = 0;
SRadioData spam_dat = {0};
#endif
#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__) || defined(__AVR_ATmega2560__)
int recv_index = 0;
long recv_timer = 0;
#endif
void loop() {
#if defined (__AVR_ATtiny85__)
// spammer
spam_m = millis();
spam_dat.counter = spam_index++;
spam_dat.pins[0] = 1; //analogRead(IR0_PIN);
spam_dat.pins[1] = 2; //analogRead(IR1_PIN);
spam_dat.pins[2] = 3; //analogRead(ENC_PIN);
spam_dat.value = 50;
spam_dat.angle = 90;
//radio.stopListening();
//delay(10);
radio.write( &spam_dat, sizeof(spam_dat) );
//radio.startListening();
spam_dat.radio_ms = millis() - spam_m;
#endif
#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__) || defined(__AVR_ATmega2560__)
// reciever
int read_bad = 1;
if ( radio.available() > 0 ) {
struct SRadioData di = {0};
radio.read( &di, sizeof(di) );
uint8_t *u = (uint8_t *)&di;
uint8_t uu = 0;
for (int i = 0; i < sizeof(di); ++i)
uu |= u[i];
read_bad = 0;
if (read_bad == 0) {
if (1) {
Serial.print("RADIO_MON_");
Serial.print(recv_index++);
Serial.print("(counter=");
Serial.print(di.counter);
Serial.print(", pin0=");
Serial.print(di.pins[0]);
Serial.print(", pin1=");
Serial.print(di.pins[1]);
Serial.print(", pin2=");
Serial.print(di.pins[2]);
Serial.print(", radio_ms=");
Serial.print(di.radio_ms);
Serial.print(", value=");
Serial.print(di.value);
Serial.print(", angle=");
Serial.print(di.angle);
Serial.print(")");
Serial.println();
};
recv_timer = millis();
radio.startListening();
};
delay(20);
};
if (read_bad) {
// no radio available
if (millis() - recv_timer > 2000) {
recv_timer = millis();
Serial.print("RADIO_MON_");
Serial.print(recv_index++);
Serial.print(": NO DATA ");
Serial.print(read_bad);
Serial.println();
};
};
#endif
};
- Войдите на сайт для отправки комментариев

Доброго времени суток. Вы решили свою проблему?. Так же мучаюсь с переносом на печатку.
Последнее что не пробовал, это убрать все колодки напрочь (запаять приёмник на плату) и развернуть антену (т.е плату в другую сторону, что бы платы не лежали бутербродом.)
Про кондер по питанию слышал, а вот про установку всех параметров можно по подробнее?
Делал по этой печатке:
Сейчас чуть подругому сделаю и уберу земляные полигоны.

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