• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Generator sinusoidalny na Arduino uno
#6
Ja steruję AD9850 bez żadnej biblioteki.

Definicje: (piny przykładowe)
Kod:
#define W_CLK 1
#define FQ_UD 2
#define DATA 3  
#define RESET 4  
#define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); }

W funkcji setup()
Kod:
 pinMode(FQ_UD, OUTPUT);
 pinMode(W_CLK, OUTPUT);
 pinMode(DATA, OUTPUT);
 pinMode(RESET, OUTPUT);
 pulseHigh(RESET);
 pulseHigh(W_CLK);
 pulseHigh(FQ_UD);

Później wysyłam częstotliwość wywołując funkcję sendFrequency(czestotliwosc);
W miejsce "częstotliwosc" możesz wpisać swój textfield.
Bajt do chipa wysyłam w postaci przekształconej według wzoru z AD9850 datasheet strona 8:

Therelationship of the output frequency, reference clock, and tuning
word of the AD9850 is determined by the formula:

fOUT = (∆ Phase × CLKIN)/2^32

where:
∆ Phase = value of 32-bit tuning word
CLKIN = input reference clock frequency in MHz
fOUT = frequency of the output signal in MHz

Kod:
void sendFrequency(double frq) {  
  int32_t f = frq * 4294967295/125000000; 
  
  //i takiego bajta wysyłam do czipa AD9850 funkcją trf_byte()
  
  
  for (int b=0; b<4; b++, f>>=8) {
    tfr_byte(f & 0xFF); 
  }
  tfr_byte(0x000); //
  pulseHigh(FQ_UD);
}

void tfr_byte(byte data)
{
  for (int i=0; i<8; i++, data>>=1) {
    digitalWrite(DATA, data & 0x01);
    pulseHigh(W_CLK);
  }
}
Taki sposób sterowania działa najlepiej.
Próbowałem różnych bibliotek i albo miałem problemy z obsługą przerwań, albo operatory nie pracowały na pinach jak należy, a tu masz ładny bezproblemowy kod.


Chociaż jak sobie właśnie przejrzałem bibliotekę do obsługi AD9850, to stwierdzam, że Ameryki nie odkryłem.
No ale u mnie śmiga pieknie, a to jest najważniejsze.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
  


Wiadomości w tym wątku
RE: Generator sinusoidalny na Arduino uno - przez Robson Kerman - 18-05-2017, 07:17

Skocz do:


Przeglądający: 1 gości