Ad9833 + mega2560

Ciao a tutti,
Scrivo qui ma solo dopo aver fuso un arduino nano e un ad9833...
Ma d'altronde prima si prova fino allo sfinimento...

Allora il mio problema e' l seguente.

Ho ora un mega2560e un modulo ad9833 nuovi...

Ho cercato di usare il codice seguente:

#include <SPI.h>
#include <MD_AD9833.h>

// Define the AD9833 pins
#define AD9833_SDATA 51
#define AD9833_FSYNC 52
#define AD9833_SCLK 53

// Define the potentiometer input pin
#define POT_PIN A0

// Define the frequency step
#define FREQ_STEP_LOW 5
#define FREQ_STEP_HIGH 100

// Define the frequency range
#define FREQ_MIN 5
#define FREQ_MAX_LOW 1000
#define FREQ_MAX_HIGH 20000
  MD_AD9833 ad9833(AD9833_SDATA, AD9833_FSYNC, AD9833_SCLK);
void setup() {
  // Initialize the SPI bus
  SPI.begin();

  // Set the SDATA pin as output
  pinMode(AD9833_SDATA, OUTPUT);

  // Set the FSYNC pin as output
  pinMode(AD9833_FSYNC, OUTPUT);

  // Set the data pin as output
  pinMode(AD9833_SCLK, OUTPUT);

  // Create the ad9833 object
Serial.begin(9600);
}

void loop() {
  // Set the frequency
  float frequency = 400;

  // Set the frequency
  //ad9833.setActiveFrequency(0);
  ad9833.setFrequency(0,frequency);

  // Send the frequency via serial
  Serial.println(frequency);

  // Wait for 3 seconds
  delay(3000);


}

utilizzando i digitali 51-52-53, e l'alimentazione 5V dal mega.
Niente da fare, a volte mi compare una sinusuoide sull'osciloscopio, altre un'onda distorta di qualche Mhx ma non corrisponde mai alla mia impostazione della variabile frequency.
2 serate di test cambio pin e sketch di test ma sono riuscito solo a fare due caduti..
Avrei bisogno di una connessione "Bona" pin to pin tra mega2560 e AD9833 e uno sketch che faccia uscire almeno una sinusoide a 1000 Hz.
Il modulo ha questi pin
Vcc-Dgnd-Sdata-Sclk-Fsync-Agnd-Out
C'e' un'anima pia che ha tempo di tirarmi fuori da questo tunnel ???
Grazie anticipate

Steve

Qui usa un'altra libreria: Il generatore di segnali AD9833 | Electronic Paradise blog

noi però abbiamo notato alcune cose incorrette

primo sembra aver scambiato SlaveSelcet con Sync
poi inizializza i pin riservati alla libreria SPI
poi non è chiaro se usa lo SPI hardware del MEGA o uno software, dato che sembra mescolare le inizializzazioni

prima di cominciare a cambiare libreria e mischiare ancora le carte diremmo di controllare queste cose e fare una bella luce
solo dopo passare ad aumentare la confuzione

Potresti iniziare da questo:

Scusa, ma che significa che hai "fuso" un Nano???... Che puoi avergli fatto?...

Buongiorno a tutti,

Grazie per le risposte, in effetti dopo un centianaio di prove (veramente) ho iniziato certamente a fare un bel mischione.

Ora ho a disposizione un mega2560 e quindi cercero' di utilizzare questo.

Non riesco a capire bene alcune cose :

  1. usando la libreria MD_AD9833 non e' neccessario dichiarare i pin ? Quindi utilizza l'interfaccia e i pin gia' assegnati nell'arduino?

  2. Quali sono realmente e sopratutto come piffero li connetto a questo modulino malefico?
    Utilizzando un Mega2560 non arduino nano che ho "cremato"

A tal proposito, come ho fatto a cremarlo?
Facile sera tarda, tutte le prove che portavano a risultati anomali a volte anche solo ripetendole, sconforto, positivo e negativo invertiti, fumo bianco come "Habemus Papam"...

Oggi provo ancora, ma se utilizzo i pin 10 11 12 13 come in alcuni skecth provati su forum e rete, avendo un mega funzionano?

Grazie ancora per la pazienza...

Steve

Ho appena provato questo sketch:

// Basic MD_AD9833 test file
//
// Initialises the device to default conditions
// 
// Connect a pot to A0 to change the frequency by turning the pot
//
#include <MD_AD9833.h>
#include <SPI.h>

// Pins for SPI comm with the AD9833 IC
const uint8_t PIN_DATA = 11;	///< SPI Data pin number
const uint8_t PIN_CLK = 13;		///< SPI Clock pin number
const uint8_t PIN_FSYNC = 10;	///< SPI Load pin number (FSYNC in AD9833 usage)

MD_AD9833	AD(PIN_FSYNC);  // Hardware SPI
// MD_AD9833	AD(PIN_DATA, PIN_CLK, PIN_FSYNC); // Arbitrary SPI pins

void setup(void)
{
	AD.begin();
}

void loop(void)
{
	static uint16_t lastv = 0;
	uint16_t v = analogRead(A0);
                AD.setFrequency(MD_AD9833::CHAN_0, 1000);
		delay(5000);
	
}

Genera una sinusoide bella ma di frequenza fissa a circa 12.65 Khz (oscilloscopio).
Qualunque numero metta fisso o nella variable non cambia nulla.
Questa prova l'avevo gia fatta, purtroppo ma ho rifatto tutto con un modulo ad9833 nuovo, ne ho 3.

Il codice in github è un po' diverso...

void loop(void)
{
	static uint16_t lastv = 0;
	uint16_t v = analogRead(A0);

	if (abs(v-lastv) > 20)
	{
		AD.setFrequency(MD_AD9833::CHAN_0, 1000 + v);
		lastv = v;
	}
}

Hai usato i pin 11, 13 e 10?
Io, purtroppo, non ho mai usato l'AD9833. Ho solo usato, con molta soddisfazione, l'AD9850. Ne ho parlato qui:

Si,
Ho utilizzato sia il codice originale che questo con un valore fisso al posto della lettura da potenziometro (non ne ho uno sottomano ora).

i pin sono i 10 11 e 13 digitali del mega, e' corretto?

Non ho mai usato il Mega, ma direi di sì, però vedo che nel codice è attivo l'SPI hardware, quindi devi usare i pin dell'SPI hardware di Arduino Mega:

Per usare i pin 11, 13 e 10 devi attivare l'altra riga:
// MD_AD9833 AD(PIN_DATA, PIN_CLK, PIN_FSYNC); // Arbitrary SPI pins
e commentare la riga:
MD_AD9833 AD(PIN_FSYNC); // Hardware SPI

1 Like

No!

Sul mega i pin per la SPI sono:
50 - MISO
51 - MOSI
52 - SCK

Il pin CS può essere quello che vuoi, ma quello di default è il 53.

Datman funziona!!!

Mantenendo il codice invariato e abilitando questa linea riesco ad ottenere la frequenza impostata.

ecco il codice funzionante con il mega:

// Basic MD_AD9833 test file
//
// Initialises the device to default conditions
// 
// Connect a pot to A0 to change the frequency by turning the pot
//
#include <MD_AD9833.h>
#include <SPI.h>

// Pins for SPI comm with the AD9833 IC
const uint8_t PIN_DATA = 11;	///< SPI Data pin number
const uint8_t PIN_CLK = 13;		///< SPI Clock pin number
const uint8_t PIN_FSYNC = 10;	///< SPI Load pin number (FSYNC in AD9833 usage)

//MD_AD9833	AD(PIN_FSYNC);  // use this line with Hardware SPI
MD_AD9833	AD(PIN_DATA, PIN_CLK, PIN_FSYNC); // use this line with Arbitrary SPI pins

void setup(void)
{
	AD.begin();
}

void loop(void)
{
	static uint16_t lastv = 0;
	uint16_t v = 3000;

		AD.setFrequency(0, v );
		delay(5000);
	
}

Grazie infinite, ero quasi sul punto di abbandonare questo progetto.
Pero' non capisco bene, dichiaro dei digitali che non sono quelli dedicati e poi abilitando una linea funziona?

E quando ne uscivo io??? :slight_smile:

Grazie ancora, espero che questi sforzi possano tornare utili a chi utilizzera' un mega....

Steve

1 Like

C'è scritto "Hardware SPI" e "Arbitrary SPI pins" :slight_smile:
Non è bello, però, che i pin 11, 13 e 10 siano dichiarati come se servissero comunque. In realtà andrebbero insieme alla riga "Arbitrary SPI pins".

Si potrebbe fare così:

// #define Arbitrary_SPI // Attivare per usare pin SPI arbitrarii.
#include <MD_AD9833.h>
#include <SPI.h>

#ifdef Arbitrary_SPI
// Pins for SPI comm with the AD9833 IC
const uint8_t PIN_DATA = 11;	// SPI MOSI Data pin
const uint8_t PIN_CLK = 13;		// SPI SCK Clock pin
const uint8_t PIN_FSYNC = 10;	// SPI SS/ Slave Select/Load pin (FSYNC in AD9833 usage)
MD_AD9833	AD(PIN_DATA, PIN_CLK, PIN_FSYNC); // use this line with Arbitrary SPI pins
#else
MD_AD9833	AD(PIN_FSYNC);  // use this line with Hardware SPI
#endif
1 Like

Perché stai usando un bus SPI software che viene "emulato" invece del bus SPI hardware del Mega che è connesso ai pin 50, 51, 52, 53 e rimane invece inutilizzato.

Ragione per cui io ti consiglio di cambiare il collegamento collegando il modulo all'SPI hardware

1 Like

Fatto,
anche perche' vorrei aggiungere un lcd touch da 3.5, e i pin digitali spi sono liberi.

Grazie a tutti per il supporto e i chiarimenti.

Steve

.:slight_smile:.

1 Like

Se si tratta di qualcosa tipo questo avrai problemi con il lettore SD proprio perché i pin SPI non sono dove la shield del display si aspetta (pin 10,11 e 13).

Una volta mi è successo e per farlo andare ho dovuto ponticellare tra loro i pin in questione con i pin 50, 51, 52 del mega.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.