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

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