HomeMade

Pełna wersja: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
"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/
Witam Ryszard.
Proponuję założyć nowy wątek np: dds- składak arduino.
Bo te kody mają ogromną wartość naukową dla takich jak ja.
Pojawiają się pytania.
Żeby nie zaśmiecać Heńka, proszę o nowy wątek.
Pozdrawiam.
proszę Wink
Dzięki.
Pytanie brzmi czy ten program dotyczy wyświetlacza który kupiłem po Burzeninie 2013.(trochę mi pamięć zatarło)
Płytka 43 x 43 mm. Brak napisu z nazwą.Po jednej stronie 8 pinów i po drugiej to samo.
Chyba kupiłem od noki.
Przerobiłem 3 kursy programowanie w C.
Jakoś nie potrafię to ogarnąć.Zmontowałem m0nka bo był komplet źródłowy.
Wyszło,że za wysoko postawiłem poprzeczkę.
Arduino 1.0.5. ,taką wersję zainstalowałem rok temu.
Gdzie można pobrać #include <AH_AD9850.h> i te inne.
Postaram się trochę doczytać.
Tak ten wyświetlacz nokii, to napewno da się podpiąć, popatrz w kodzie jest rozpiska które piny LCD do których pinów arduino.

Kod:
// 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);

Pokombinuj, po zaprogramowaniu i podłączeniu powinno się coś wyświetlać.

Biblioteki w załączeniu, pasuje pod arduino 1.0.4, 1.0.5., 1.0.6 pod innymi nie sprawdzałem.
Mam już wyświetlacz ustalony nokia 5110.
[attachment=9063]
mam już zainstalowany <AH_AD9850.h>.
Teraz zajmę się Twoim załącznikiem.
Czyli jeszcze najprostszy encoder syntezer i jakiś odbiornik kontrolny by słuchać efektów pracy... daj znać jak odpalisz Andrzej Wink
Już daję.
[attachment=9064][attachment=9065]
nie mogę zweryfikować.
Brak PCD8544.h

Mam taką wersję do 5110 ale coś nie pasuje.Ten napis na dole.
[attachment=9066]
Tylko się upewniam, biblioteki wrzuciłeś do katalogu libraries w folderze instalacyjnym arduino? Bo wygląda na to że nie masz bibliotek.
Tak już są ale efektów brak.
Stron: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
Przekierowanie