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
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
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 :
usando la libreria MD_AD9833 non e' neccessario dichiarare i pin ? Quindi utilizza l'interfaccia e i pin gia' assegnati nell'arduino?
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?
// 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.
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???
Grazie ancora, espero che questi sforzi possano tornare utili a chi utilizzera' un mega....
C'è scritto "Hardware SPI" e "Arbitrary SPI pins"
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".
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
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.