Arduino Nano e SI5351

Buonasera a tutti,
sto realizzando un VFO con l'ausilio di un Si5351 e Arduino Nano, ho preso alcuni Sketch da internet e li ho modificati adattandoli al mio utilizzo. Ho però una difficoltà, non riesco a far uscire niente dagli output del SI. Ho provato con gli esempi delle librerie e ottengo lo stesso problema. Con un frequenzimetro collegato al CLK0 o 1 non ho nessuna frequenza in uscita. A qualcuno di voi è già capitato una cosa del genere? Ho provato con due SI5351 appena giunti dall'oriente

Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, fino a quando non sarà fatta la presentazione, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

Magari se ci metti un link a questo prodottop Si5351 che stai utilizzando, alle librerie ed uno schema esatto di come hai effettuato i collegamenti (basta un disegno ben fatto e poi fotografato ed allegato), possiamo provare ad aiutarti ...

Guglielmo

Buongiorno Guglielmo, chiedo venia per non averlo fatto immediatamente nel momento della mia iscrizione al forum. Buona domenica

Senza link al prodotto, Circuito elettrico o buone foto come lo hai collegato al NANO e lo sketch di prova che non funziona come possiamo aiutarti?
Ciao Uwe

Allora lo scheck che ho usato come test è il seguente e l'ho preso dagli esempi delle librerie.

#include "si5351.h"
#include "Wire.h"

Si5351 si5351;

void setup()
{
  bool i2c_found;

  // Start serial and initialize the Si5351
  Serial.begin(57600);
  i2c_found = si5351.init(SI5351_CRYSTAL_LOAD_8PF, 0, 0);
  if(!i2c_found)
  {
    Serial.println("Device not found on I2C bus!")
  }

  // Set CLK0 to output 14 MHz
  si5351.set_freq(1400000000ULL, SI5351_CLK0);

  // Set CLK1 to output 175 MHz
  si5351.set_ms_source(SI5351_CLK1, SI5351_PLLB);
  si5351.set_freq_manual(17500000000ULL, 70000000000ULL, SI5351_CLK1);

  // Query a status update and wait a bit to let the Si5351 populate the
  // status flags correctly.
  si5351.update_status();
  delay(500);
}

void loop()
{
  // Read the Status Register and print it every 10 seconds
  si5351.update_status();
  Serial.print("SYS_INIT: ");
  Serial.print(si5351.dev_status.SYS_INIT);
  Serial.print("  LOL_A: ");
  Serial.print(si5351.dev_status.LOL_A);
  Serial.print("  LOL_B: ");
  Serial.print(si5351.dev_status.LOL_B);
  Serial.print("  LOS: ");
  Serial.print(si5351.dev_status.LOS);
  Serial.print("  REVID: ");
  Serial.println(si5351.dev_status.REVID);

  delay(10000);

Come collegamento è molto semplice, alimento il nano tramite usb e dall'Arduino prelevo i +5V per il Si5351. Gli unici collegamenti sono i classici due fili A4 SDA e A5 SLC per pilotare il Si5351. Per il circuito come è fatto potete vedere questo link, l'unica eccezione è che anziché usare Arduino Uno utilizzo Arduino Nano. Per scrupolo ho fatto la prova anche utilizzando Arduino UNO e non cambia nulla, non ho nessuna uscita di frequenza. Ho verificato sia con oscilloscopio che con un frequenzimetro. Se scollego i fili del I2C il monitor seriale mi dice che non trova il device, mentre le lo collego non mi da l'errore. Sto uscendo pazzo... l'unica cosa che mi viene da pensare è che probabilmente i due Si che provengono dall'oriente non funzionano....
Questo un link per rendere meglio l'idea

Posti il link di Adafrauit, ma la libreria che usi mi pare un'altra.
Qui: Arduino Code | Adafruit Si5351 Clock Generator Breakout | Adafruit Learning System
la libreria è Adafruit_Si535 ed infatti l'oggetto da creare è:
Adafruit_SI5351 clockgen = Adafruit_SI5351();

Sicuro di usare la stessa libreria?

Come collegamento è molto semplice, alimento il nano tramite usb e dall'Arduino prelevo i +5V per il Si5351. Gli unici collegamenti sono i classici due fili A4 SDA e A5 SLC per pilotare il Si5351.

Spero che hai collegato anche la massa.

Se fai girare lo sketch I2C Scanner Ti trova un indirizzo?
https://playground.arduino.cc/Main/I2cScanner

Ciao Uwe

>fiutone: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post #5 (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More → Modify che si trova in basso a destra del tuo post) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie.

Guglielmo

Nid69it, la libreria che uso è quella di Etherkit_SI5351, ho messo il link di adafruit per rendere meglio l'idea di come ho fatto i collegamenti. Tutti i progetti su Internet riportano lo stesso schema di collegamento, solamente i deu fili del bus e basta, alimentazioni ovvie.
Uwefed, si si ho collegato l'alimentazione compreso di massa, difatti misurando sul Si5351 ho alimentazione sui rispettivi pin e sul condensatore di filtro. Ho analizzato anche con l'oscilloscopio e qualcosa sul bus arriva. Ora provo a far girare lo scanner I2C
Gpb01, chiedo ancora venia, spero di averlo inserito correttamente il codice :-[
Scusatemi, sono alle prime armi con Arduino, cerco di rompere meno possibile le scatole...

Aggiornamento, ho provato a eseguire lo schech dello scanner e mi trova il Si5351 all'indirizzo 0x60

... sei sicuro che la schedina che stai utilizzando abbia a bordo le resistenze di pull-up per il bus I2C? ... perché se non le ha, le devi aggiungere obbligatoriamente tu ...

Guglielmo

Ha due resistenze di pullup da 10k. Cmq allego lo schema della schedina breakout board del Si5351

Ho visto solo ora il tuo aggiornamento del post #9 (in questi casi meglio fare un nuovo post che aggiornare uno vecchio), quindi, scoperto che ha indirzzo 0x60, hai verificato che la libreria che usi cerchi la scheda su tale indirizzo?

Guglielmo

Guglielmo, alias Gbp01, come faccio a capire :confused: è la prima volta che uso il bus I2C e scusatemi per le domande a voi banali... ma per me è tutto nuovo questo. Leggere uno stato o settare un'uscita è abbastanza banale ma questo è la prima volta che mi ci scontro

fiutone:
Guglielmo, alias Gbp01, come faccio a capire :confused: è la prima volta che uso il bus I2C e scusatemi per le domande a voi banali...

... mi passi il link della libreria che stai usando? così ci do un'occhiata denntro e ti indico le righe da esaminare :wink:

Guglielmo

Ecco le librerie che sto usando per questa prova. Una domanda, ma c’è una riga di comando da inserire nel setup per indicare l’indirizzo corretto?
Nella cartella example trovi lo scheck che sto usando per fare la prova e si chiama “si5351_example”.

Comunque ho provato anche con la libreria e file di esempio di Adafruit, per intenderci quella del mio primo link, e anche con quella zero, non esce nulla

Si5351Arduino-master.zip (49.4 KB)

fiutone:
Guglielmo, alias Gbp01, come faccio a capire :confused: è la prima volta che uso il bus I2C e scusatemi per le domande a voi banali…

La risposta la trovi nel file “si5351.h”, subito all’inizio c’è una riga (la no.38) che recita:

#define SI5351_BUS_BASE_ADDR            0x60

… ovvero il valore che hai trovato tu con lo scanner I2C.

Quel valore è usato, sempre nello stesso sorgente, nel “costruttore” della classe:

class Si5351

{
public:
  Si5351(uint8_t i2c_addr = SI5351_BUS_BASE_ADDR);

… che, SE non gli si passa nulla, usa appunto come valore di default, il valore SI5351_BUS_BASE_ADDR.

Chiarito questo, viene però la mia domanda …
… hai studiato il readme che è allegato alla libreria? … Perché ci sono varie spiegazioni ed indicazioni importanti per il collegamento e per l’uso … ::slight_smile:

E poi … perché proprio quella libreria e, ad esempio, non quella di Adafruit che è certamente ben spiegata e collaudata?

Guglielmo

P.S.: Nel caso tu non riesca a leggere il file readme.md della libreria, te lo allego in formato .pdf :wink:

README.pdf (133 KB)

Guglielmo,
allora per ora funziona. Grazie innanzitutto per la conversione del file readme.md, mi è stato molto di aiuto. Ho aggiunto solamente una riga dove vado a settare la potenza di uscita a 8dBm e leggo finalmente la frequenza. Cosa assai curiosa è che ora anche “remmando” la riga ho lo stesso l’uscita che desidero.
Ora che so che finalmente il Si5351 mi funziona, devo provare a far funzionare lo schech del programma che stavo facendo del VFO.
Ovviamente il giapponese ha usato ovviamente una libreria più vecchia e come si evince anche dal file readme che mi hai gentilmente postato, esso fa riferimento alla versione 1. Devo mettermi di santa pazienza e fare in modo di usare la libreria aggiornata e della quale sono certo che mi funziona.

Buonasera a tutti, allora faccio un piccolo aggiornamento, grazie a Guglielmo “gpb01” che mi ha dato una dritta sul discorso della libreria e anche a tutti gli altri che sono intervenuti in questo post.
Oggi ho preso lo scheck iniziale che stavo provando prima di usare quello di test per verificare il funzionamento del Si5351 e andando a spulciare nella libreria che utilizzavo ho notato che la riga sia dell’indirizzo che del quarzo che è installato erano remmate. Questo perchè di Si5351 ce ne sono due tipi, uno con quarzo a 25MHz e uno con quarzo a 27MHZ, Quello venduto da adafruit ha il quarzo da 25MHz e indirizzo I2C 0x60 mentre quello venduto da Mouser ha il quarzo da 27 e l’indirizzo I2C 0X61. Per questo motivo non mi funzionava, perchè la libreria puntava sull’indirizzo 0X61 anziché 0X60.
Di nuovo grazie a tutti