Odpowiedz 
 
Ocena wątku:
  • 6 Głosów - 4 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
SQ9MDD Offline
Rysiek
****

Liczba postów: 380
Dołączył: 01-02-2009
Post: #1
Copyleft Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
"Heniek" chyba gdzieś w akcji zaginął nam.
Jeśli ktoś ma chęć coś z taką syntezką podłubać to wrzucam absolutną podstawę kodu by to odpalić i dalej rozwijać. Kod jest mocno skomentowany nie powinno być problemu z dalszym rozwojem:

Kod:
//*************************************************//
// Warsztaty arduino SP5YAM 2014                   //
// © SQ9MDD Ryszard Labus                          //
// rysieklabus@gmail.com                           //
// udostępniam na licencji GPL
//*************************************************//

//podłączamy bibliotekę syntezera
#include <AH_AD9850.h>

//podłączamy bibliotekę enkodera
#include <RotaryEncoder.h>;

//podłączamy bibliotekę do obsługi wyświetlacza
#include <PCD8544.h>

//inicjalizujemy komunikację z syntezerem
//syntezer   - arduino
//CLK        - PIN 8
//FQUP       - PIN 9
//BitData    - PIN 10
//RESET      - PIN 11
AH_AD9850 AD9850(8, 9, 10, 11);

// inicjalizujemy wyświetlacz
// lcd    - arduino
// sclk   - PIN 7
// sdin   - PIN 6
// dc     - PIN 5
// reset  - PIN 3
// sce    - PIN 4
PCD8544 lcd = PCD8544(7,6,5,3,4);

//inicjalizujemy enkoder
//AO - w lewo
//A1 - w prawo
//nalezy pamiętać o kondensatorach (100nF) pomiędzy liniami encodera a masą
RotaryEncoder encoder(A0,A1,5,6,1000);

//zmienna dla częstotliwości, wstawiamy tam częstotliwość od której startujemy
long czestotliwosc = 3710000;
//zmienna pomocnicza do liczenia impulsów z enkodera
int enc_sum = 0;

void setup(){
  //odpalamy syntezer i ustawiamy częstotliwość startową
  AD9850.set_frequency(0,0,czestotliwosc);    //set power=UP, phase=0, 1MHz frequency
  delay(1000);
  //odpalamy lcd
  lcd.begin(84, 48);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print(czestotliwosc);
  lcd.setCursor(0,3);
  lcd.print("Warsztaty");
  lcd.setCursor(0,4);
  lcd.print("ARDUINO");
  lcd.setCursor(48,5);
  lcd.print("SP5YAM");
}

void loop(){
  //ustawiamy kursor w odpowiednim miejscu na wyświetlaczu lcd
  lcd.setCursor(0,0);
  
  //czytamy wartość z encodera
  int enc = encoder.readEncoder();
   if(enc != 0) {                           //jeśli wartość jest inna niż zero sumujemy
     enc_sum = enc_sum + enc;               //jeden ząbek encodera to +2 lub -2 tutaj to zliczam
   }
   //jesli zaliczyliśmy ząbek dodajemy lub odejmujemy do częstotliwości wartość kroku (na razie na sztywno 100Hz)
     if(enc_sum >= 2){
       czestotliwosc = czestotliwosc + 100;  //docelowo czestotliwosc = czestotliwosc + krok
       lcd.print(czestotliwosc);             //drukuję częstotliwość na wyświetlaczu
       AD9850.set_frequency(czestotliwosc);  //ustawiam syntezę na odpowiedniej częstotliwości
       enc_sum = 0;                          //reset zmiennej zliczającej impulsy enkodera
     }
     if(enc_sum <= -2){
       czestotliwosc = czestotliwosc - 100;  //docelowo czestotliwosc = czestotliwosc - krok
       lcd.print(czestotliwosc);             //drukuję częstotliwość na wyświetlaczu
       AD9850.set_frequency(czestotliwosc);  //ustawiam syntezę na odpowiedniej częstotliwości
       enc_sum = 0;                          //reset zmiennej zliczającej impulsy enkodera
     }  
   delayMicroseconds(5);                     //małe opóźnienie dla prawidłowego działania enkodera
}

Przepraszam że się tak wpycham z tym ale może koledzy mają ochotę podłubać. Jeśli ktoś ma arduino to może już testować, a kto wie może obok Heńka jakiś Złomek powstanie...

UWAGA:

Ostatnia aktualna wersja Złomka jest zawsze dostępna pod adresem:

https://code.google.com/p/zlomek/

...przede wszystkim nie zakłócać...
11-10-2014 11:34
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Odpowiedz 


Wiadomości w tym wątku
Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO - SQ9MDD - 11-10-2014 11:34

Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości