11-10-2014, 11:34
"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:
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/
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/