Attny84 e modulo nrf24l01

Salve a tutti, ultimamente stavo cercando di realizzare una connessione remota tra un attiny85 come trasmettitore e un arduino uno come ricevitore, e utilizzando la libreria Mirf riuscivo ad inviare un carattere e di conseguenza accendere un led di avvenuta recezione, ma appena ho sostituito l'aruino con un attiny84 le cose non sono andate alla grande. Premetto che ho cercato molto su internet ed ho persino combiato l'intestazione dei pin sui documenti RF24.cpp e SPI85.cpp ma comunque non ho ottenuto alcun ti po di risultato nell'usare le diverse librerie, l'unica connessione che sono riuscito a stabilire è utilizzando i comandi SPI (credo si chiamino cosi) del tipo :

#include "API.h"
#define CEq       3  (PA3)
// CE_BIT:   Digital Input     Chip Enable Activates RX or TX mode
#define CSNq      7 (PA7)
// CSN BIT:  Digital Input     SPI Chip Select
#define SCKq      4 (PA4)
// SCK BIT:  Digital Input     SPI Clock
#define MOSIq     5 (PA5)
// MOSI BIT: Digital Input     SPI Slave Data Input
#define MISOq     6 (PA6)
// MISO BIT: Digital Output    SPI Slave Data Output, with tri-state option


struct dataStruct{
   int adcc; 
   unsigned long counter;
}nrf_data;
#define led 1






#define TX_ADR_WIDTH    5   // 5 unsigned chars TX(RX) address width
#define TX_PLOAD_WIDTH  sizeof(nrf_data)  // 32 unsigned chars TX payload

unsigned char TX_ADDRESS[TX_ADR_WIDTH]  = 
{
  0x34,0x43,0x10,0x10,0x01
}; // Define a static TX address

unsigned char rx_buf[TX_PLOAD_WIDTH];
unsigned char tx_buf[TX_PLOAD_WIDTH];
//***************************************************
void setup() 
{
  pinMode(led,OUTPUT);
  pinMode(CEq,  OUTPUT);
  pinMode(SCKq, OUTPUT);
  pinMode(CSNq, OUTPUT);
  pinMode(MOSIq,  OUTPUT);
  pinMode(MISOq, INPUT);

  SPI_RW_Reg(FLUSH_RX,0); 
  init_io();                        // Initialize IO port
  unsigned char status=SPI_Read(STATUS);

  RX_Mode();                        // set RX mode
}
void loop() 
{
  for(;;)
  {
    unsigned char status = SPI_Read(STATUS);                         
    if(status&RX_DR)                                                 
    {
      SPI_Read_Buf(RD_RX_PLOAD, rx_buf, TX_PLOAD_WIDTH);             
      SPI_RW_Reg(FLUSH_RX,0);                                        
    
      memcpy(&nrf_data, rx_buf, sizeof(nrf_data));
         
      digitalWrite(led,LOW);
      delay(900);
      
    }
    else{
      digitalWrite(led,HIGH);
      delay(200);
    }
    SPI_RW_Reg(WRITE_REG+STATUS,status);                          
    delay(100);
  }
}
 
(il codice è molto lungo, quindi ricopio solo due pezzi)

void RX_Mode(void)
{
  digitalWrite(CEq, 0);
  SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // Use the same address on the RX device as the TX device
  SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);      // Enable Auto.Ack:Pipe0
  SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);  // Enable Pipe0
  SPI_RW_Reg(WRITE_REG + RF_CH, 40);        // Select RF channel 40
  SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH); // Select same RX payload width as TX Payload width
  SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x27);   // TX_PWR:0dBm, Datarate:250Kbps, LNA:HCURR
  SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f);     // Set PWR_UP bit, enable CRC(2 unsigned chars) & Prim:RX. RX_DR enabled..
  digitalWrite(CEq, 1);                             // Set CE pin high to enable RX device
 
}

Non posso usare questo sketch perchè mi viene molto complicato adattarlo alle mie esigenze e quindi volevo trovare un modo per utilizzare qualche libreria ma pur lasciando la stessa intestazione dei pin anche in altri scketch che includono librerie diverse, l'attiny84 non riceve.
Qualcuno puo darmi qualche consiglio o indicarmi quale strada è meglio seguire?
Vi ringrazio molto.

Fammi capire con attiny85 lavora.
Con attiny84 ** non ** lavora.

Giusto?

La cosa è strana perché l'85 ha meno memoria e meno risorse, ma entrambe sono compatibili almeno io ricordo. L'84 c'è l'ho qui montato in breadboard ma l'85 non lo ho.

No hai sostituito arduino con l'84, non può funzionare, la seriale è diversa molto.
Arduino quale?

Ciao.

Allora io trasmetto con l'85 e volevo ricevere con l'84, so che è diversa la seriale tra arduino uno e un attiny però ho eseguito alla lettera tutti gli accorgimenti per far si che l'84 potesse ricevere, ho incluso SPI85 per comunicare via seriale con l'attiny, ma appena uso una qualsiasi libreria tipo RF24 o Mirf non ricevo nulla sull'84, lunico modo che ho per far comunicare l'84 con l'85 è usare quello sketch che ho copiato nel post.
Maurotec che libreria usi ne tuo 84?
ti ringrazio per la tua risposta.

Maurotec che libreria usi ne tuo 84?

Per adesso nessuna, non ho l'ide, vado di registri, ma ISP e USI non li uso da tempo, dovrei rimettermi a studiare il datasheet.

Dovresti cercare un core per attiny da installare e credo lo possa fare da IDE, ma solo per sentito dire.
Su github ci dovrebbe essere qualcosa prova a cercare github core attiny.

Ciao.

Maurotec:
Dovresti cercare un core per attiny da installare e credo lo possa fare da IDE

Basta caricare il "core" di Spence Konde (che è il migliore e più completo) aggiungendo nelle preferenze dell'IDE il seguente json ...

http://drazzy.com/package_drazzy.com_index.json

Guglielmo

P.S.: QUI i dettagli su github

Vi ringrazio per avermi risposto

gpb01:
Basta caricare il "core" di Spence Konde (che è il migliore e più completo) aggiungendo nelle preferenze dell'IDE il seguente json ...

GPB01, intendi aggiungere il link nel gestore schede che si trova nelle impostazioni? scusate la mia confusione ma ancora non mi è chiaro che pin mettere nei CE e CSN se scrivere PA3 e PA7 o semplicemente i numeri, mi scuso ancora per la mia ignoranza.

Jakex:
GPB01, intendi aggiungere il link nel gestore schede che si trova nelle impostazioni?

Nelle preferenze dell'IDE c'è un campo "URL aggiuntive per il Gestore schede" che serve proprio per l'aggiunta dei .json relativi a nuovi "core".

Fatto ciò, vai nel nel "Gestore schede" e installi il nuovo "core".

Guglielmo

gpb01:
Fatto ciò, vai nel nel “Gestore schede” e installi il nuovo “core”.

Ti ringrazio Guglielmo, sono riuscito ad installare tutto ora pero usando la libreria RF24 non riesco a ricevere nulla

Uso il seguente sketch:

#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(3,7); // CE, CSN
const byte address[6] = "00001";
int led =1;
void setup() {
  pinMode(led,OUTPUT);
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_MIN);
  radio.startListening();
}
void loop() {
  if (radio.available()) {
    char text[32] = "";
    radio.read(&text, sizeof(text));
    digitalWrite(led,LOW);
    
  }else{
    digitalWrite(led,HIGH);
  }
}

il led resta perennemente acceso, i collegamenti sono i seguenti
CE 3
CSN 7
SCK 4
MISO (DI) 5
MOSI (DO) 6

Attenzione che Konde prevede due numerazioni alternative della piedinaura … guarda l’allegato …

Guglielmo

P.S.: Le trovi nella cartalla “variants” del core

attinypdfv3_0.pdf (360 KB)

Non riesco comunque a ricevere nulla, non so piu’ cosa inventarmi, magari devo cambiare qualcosa nel file RF.cpp?
questo è lo sketch sull’attiny84:

#define CE_PIN 7
#define CSN_PIN 3
#include <nRF24L01.h>
#include <RF24.h>
 RF24 radio(CE_PIN, CSN_PIN); // CE, CSN
const byte address[6] = "00001";
int led =1;
void setup() {
  pinMode(led,OUTPUT);
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_MIN);
  radio.startListening();
}
void loop() {
  if (radio.available()) {
    char text[32] = "";
    radio.read(&text, sizeof(text));
    digitalWrite(led,LOW);
    
  }else{
    digitalWrite(led,HIGH);
  }
}