Re: RX conversione diretta
salve a tutti,rieccomi...(ahia),intanto mi rendo conto di essere entrato a gamba tesa in una discussione che riguardava solo marginalmente la domanda che ho posto, e per questo chiedo venia se volete possiamo spostarci e aprirne una dedicata al ad9850.....eppoi per GIF come procede con il ricevitore??Mica ti sarai fermato?
Ho letto con interesse la spiegazione e l'esempio che hai postato...come dici li mandi su parallela, nei progetti che ho io Arduino li trasferisce serialmente, come in questo esempio che genera una freq. fissa di 10 MHZ, e' piccolo:
/*
* A simple single freq AD9850 Arduino test script
* Original AD9851 DDS sketch by Andrew Smallbone at www.rocketnumbernine.com
* Modified for testing the inexpensive AD9850 ebay DDS modules
* Pictures and pinouts at nr8o.dhlpilotcentral.com
* 9850 datasheet at http://www.analog.com/static/importe...ets/AD9850.pdf
* Use freely
*/
#define W_CLK 8 // Pin 8 - connect to AD9850 module word load clock pin (CLK)
#define FQ_UD 9 // Pin 9 - connect to freq update pin (FQ)
#define DATA 10 // Pin 10 - connect to serial data load pin (DATA)
#define RESET 11 // Pin 11 - connect to reset pin (RST).
#define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); }
// transfers a byte, a bit at a time, LSB first to the 9850 via serial DATA line
void tfr_byte(byte data)
{
for (int i=0; i<8; i++, data>>=1) {
digitalWrite(DATA, data & 0x01);
pulseHigh(W_CLK); //after each bit sent, CLK is pulsed high
}
}
// frequency calc from datasheet page 8 = <sys clock> * <frequency tuning word>/2^32
void sendFrequency(double frequency) {
int32_t freq = frequency * 4294967295/125000000; // note 125 MHz clock on 9850
for (int b=0; b<4; b++, freq>>=8) {
tfr_byte(freq & 0xFF);
}
tfr_byte(0x000); // Final control byte, all 0 for 9850 chip
pulseHigh(FQ_UD); // Done! Should see output
}
void setup() {
// configure arduino data pins for output
pinMode(FQ_UD, OUTPUT);
pinMode(W_CLK, OUTPUT);
pinMode(DATA, OUTPUT);
pinMode(RESET, OUTPUT);
pulseHigh(RESET);
pulseHigh(W_CLK);
pulseHigh(FQ_UD); // this pulse enables serial mode - Datasheet page 12 figure 10
}
void loop() {
sendFrequency(10.e6); // freq
while(1);
}
giustamente, un po' di luce, lui ne spedisce 32, cioe' la frequenza (giusto?),quindi qui andrebbero aggiunti gli altri 8 divisi come sappiamo,ora io mi immagino tanti zero e uno che entrano nel dds, i programmatori invece usano arcane formule per fare lo stesso, i primi 8 poi gli altri 8, boh! e questo non mi aveva aiutato( l'ignoranza e' una brutta bestia).
Io ho ordinato un'altro DDS, posso fare prove,intanto finisco il genetarore su cui lavoro....ma sono disponibile a testare codici e provare i risultati.
Non sono, comunque, in grado di scrivermelo e per questo qualunque aiuto e' ben accetto.
Grazie ancora
73 de iw0hjz
alberto
salve a tutti,rieccomi...(ahia),intanto mi rendo conto di essere entrato a gamba tesa in una discussione che riguardava solo marginalmente la domanda che ho posto, e per questo chiedo venia se volete possiamo spostarci e aprirne una dedicata al ad9850.....eppoi per GIF come procede con il ricevitore??Mica ti sarai fermato?
Ho letto con interesse la spiegazione e l'esempio che hai postato...come dici li mandi su parallela, nei progetti che ho io Arduino li trasferisce serialmente, come in questo esempio che genera una freq. fissa di 10 MHZ, e' piccolo:
/*
* A simple single freq AD9850 Arduino test script
* Original AD9851 DDS sketch by Andrew Smallbone at www.rocketnumbernine.com
* Modified for testing the inexpensive AD9850 ebay DDS modules
* Pictures and pinouts at nr8o.dhlpilotcentral.com
* 9850 datasheet at http://www.analog.com/static/importe...ets/AD9850.pdf
* Use freely
*/
#define W_CLK 8 // Pin 8 - connect to AD9850 module word load clock pin (CLK)
#define FQ_UD 9 // Pin 9 - connect to freq update pin (FQ)
#define DATA 10 // Pin 10 - connect to serial data load pin (DATA)
#define RESET 11 // Pin 11 - connect to reset pin (RST).
#define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); }
// transfers a byte, a bit at a time, LSB first to the 9850 via serial DATA line
void tfr_byte(byte data)
{
for (int i=0; i<8; i++, data>>=1) {
digitalWrite(DATA, data & 0x01);
pulseHigh(W_CLK); //after each bit sent, CLK is pulsed high
}
}
// frequency calc from datasheet page 8 = <sys clock> * <frequency tuning word>/2^32
void sendFrequency(double frequency) {
int32_t freq = frequency * 4294967295/125000000; // note 125 MHz clock on 9850
for (int b=0; b<4; b++, freq>>=8) {
tfr_byte(freq & 0xFF);
}
tfr_byte(0x000); // Final control byte, all 0 for 9850 chip
pulseHigh(FQ_UD); // Done! Should see output
}
void setup() {
// configure arduino data pins for output
pinMode(FQ_UD, OUTPUT);
pinMode(W_CLK, OUTPUT);
pinMode(DATA, OUTPUT);
pinMode(RESET, OUTPUT);
pulseHigh(RESET);
pulseHigh(W_CLK);
pulseHigh(FQ_UD); // this pulse enables serial mode - Datasheet page 12 figure 10
}
void loop() {
sendFrequency(10.e6); // freq
while(1);
}
giustamente, un po' di luce, lui ne spedisce 32, cioe' la frequenza (giusto?),quindi qui andrebbero aggiunti gli altri 8 divisi come sappiamo,ora io mi immagino tanti zero e uno che entrano nel dds, i programmatori invece usano arcane formule per fare lo stesso, i primi 8 poi gli altri 8, boh! e questo non mi aveva aiutato( l'ignoranza e' una brutta bestia).
Io ho ordinato un'altro DDS, posso fare prove,intanto finisco il genetarore su cui lavoro....ma sono disponibile a testare codici e provare i risultati.
Non sono, comunque, in grado di scrivermelo e per questo qualunque aiuto e' ben accetto.
Grazie ancora
73 de iw0hjz
alberto
Commenta