Koleżankom i Kolegom Radioamatorom, Krótkofalowcom,
Konstruktorom i Waszym Rodzinom – w tych trudnych czasach –
Zdrowych, Spokojnych i Pogodnych Świąt Bożego Narodzenia oraz
Szczęśliwego Nowego Roku

Życzy Zespół Home Made


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: #11
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Hmmm.... tak sobie pomyślałem że pewnie brakuje Ci jeszcze biblioteki "rotary encoder".

Bo jeśli je ręcznie załadowałeś to innej przyczyny być nie może.
Biblioteka w załączeniu.


Załączone pliki
.zip  RotaryEncoder.zip (Rozmiar: 3.33 KB / Pobrań: 1539)

...przede wszystkim nie zakłócać...
11-10-2014 22:49
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ6IYY Offline
miso(michal]
***

Liczba postów: 155
Dołączył: 21-09-2009
Post: #12
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
biblioteka lcd nokie weryfikacja ok
na LCD5110 Basic i Graph nie udało się weryfikować


Załączone pliki
.zip  pcd8544.zip (Rozmiar: 146.61 KB / Pobrań: 1340)

Nie otrzymasz koni wyścigowych krzyżując dwa osły
12-10-2014 10:09
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ9MDD Offline
Rysiek
****

Liczba postów: 380
Dołączył: 01-02-2009
Post: #13
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Faktycznie masz rację Michał, mój błąd, użyłem tam innej biblioteki do LCD.
Z tą którą dałeś będzie to działać.
To teraz czekamy czy zadziała jeśli tak to możemy coś tam dalej dopisywać.

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

Liczba postów: 36
Dołączył: 09-11-2013
Post: #14
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
(11-10-2014 11:34)SQ9MDD napisał(a):  "Heniek" chyba gdzieś w akcji zaginął nam.
...
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...

Ale się cieszę. Po cichu liczyłem że ktoś "kumaty" w ARDUINO
nie wytrzyma i temat pociągnie. Pomysł jest świetny i szkoda by
gdzieś nam zaginął. Jam prosty mechanik, potrafię gotowy kod
przejrzeć i czasami coś zmodyfikować ale nie napisać od zera.
Zaczynam gromadzić klocki. Big Grin
12-10-2014 11:46
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP6AUO Offline
Andrzej
*****

Liczba postów: 1,050
Dołączył: 20-09-2009
Post: #15
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Witam Wszystkich.
Weryfikacja zakończona sukcesem.
Mogę przystąpić do konstruowania schematu i montażu detali.
W załączeniu widok po weryfikacji.

İmage

Andrzej
12-10-2014 14:34
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ9MDD Offline
Rysiek
****

Liczba postów: 380
Dołączył: 01-02-2009
Post: #16
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
No i super widzę że nawet jest zainteresowanie wspólnym pisaniem synezera.
No to postanowiłem że nieco wyprostuję ten kod.
I tak:
- zmieniłem jednak bibliotekę do obsługi LCD gdyż pojawiały się problemy z kontrastem wyświetlacza przy poprzedniej.
- przeniosłem wyświetlanie częstotliwości do osobnej funkcji tak by można było z jednego miejsca kontrolować sposób wyświetlania częstotliwości.

İmage

Następne co zrobić trzeba koniecznie to wprowadzenie pośredniej, i obsługę zmiany kroku syntezera.

Odpalajcie sprzęty jak będzie działać to piszemy dalej.

Kod:
//**************************************************​**********************//
// Złomek - kumpel Heńka, projekt pogladowy obsługi DDS AD9850,
// wyświetlacza nokii 5110 i jakiegoś enkodera.
// Projekt otwarty http://sp-hm.pl
// SQ9MDD -  początkowy szkielet programu v 1.0.0
// S_____ -
// S_____ -
//
//**************************************************​**********************//
/* CHANGELOG (nowe na górze)
2014.10.12 - początek projektu wspólnego na sp-hm.pl
wymiana biblioteki wyświetlacza lcd na LCDD5110 basic
2014.05.22 - pierwsza wersja kodu warsztaty arduino w komorowie.  
*/
//**************************************************​**********************//
//podłączamy bibliotekę syntezera
#include <AH_AD9850.h>

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

//podłączamy bibliotekę do obsługi wyświetlacza
#include <LCD5110_Basic.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
LCD5110 lcd(7,6,5,3,4);
extern uint8_t SmallFont[]; //czcionka z biblioteki
extern uint8_t MediumNumbers[];//czcionka z biblioteki

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

//kontrast wyświetlacza
const int kontrast = 70;

//zmienna pomocnicza do wyrzucania danych na lcd
char buffor[] = "              ";

//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;

//funkcja do obsługi wyświetlania zmiany częstotliwości
void show_frequency(){
  lcd.setFont(SmallFont);                    //ustawiamy czcionkę
  sprintf(buffor,"%lu",czestotliwosc);       //konwersja danych do wyświetlenia (ładujemy longa do stringa
  lcd.print(buffor,CENTER,0);                //wyświetlamy dane na lcd
}

// setup funkcja odpalana przy starcie
void setup(){
  //odpalamy syntezer i ustawiamy częstotliwość startową
  AD9850.set_frequency(0,0,czestotliwosc);    //set power=UP, phase=0, 1MHz frequency
  delay(1000);                                //sekunda opóźnienia
  lcd.InitLCD(kontrast);                      //odpalamy lcd ustawiamy kontrast
  show_frequency();                           //pokazmy cos na lcd
}

void loop(){
  //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

    AD9850.set_frequency(czestotliwosc);  //ustawiam syntezę na odpowiedniej częstotliwości
    show_frequency();                     //drukuję częstotliwość na wyświetlaczu za pomocą gotowej funkcji
    enc_sum = 0;                          //reset zmiennej zliczającej impulsy enkodera
  }
  if(enc_sum <= -2){
    czestotliwosc = czestotliwosc - 100;  //docelowo czestotliwosc = czestotliwosc - krok      
    AD9850.set_frequency(czestotliwosc);  //ustawiam syntezę na odpowiedniej częstotliwości
    show_frequency();                     //drukuję częstotliwość na wyświetlaczu za pomocą gotowej funkcji      
    enc_sum = 0;                          //reset zmiennej zliczającej impulsy enkodera
  }  
  delayMicroseconds(5);                    //małe opóźnienie dla prawidłowego działania enkodera
}

A tak działa:




Załączone pliki
.zip  zlomek_v_1_0_0-141012a.zip (Rozmiar: 1.67 KB / Pobrań: 1341)

...przede wszystkim nie zakłócać...
12-10-2014 14:52
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP6IFN Offline
Ryszard
****

Liczba postów: 456
Dołączył: 23-03-2010
Post: #17
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
U mnie przestraja co 200Hz, na LCD i w rzeczywistości. Pomiar na liczniku częstotliwości. Enkoder jest mechaniczny za 2,40zł (czy coś takiego).
Rysio!
PS. U mnie jeden ząbek enkodera to cyfra 4. Należy tą wartość zmienic w programie na 4, co też uczyniłem. Teraz jest OK!
(Ten post był ostatnio modyfikowany: 12-10-2014 17:28 przez SP6IFN.)
12-10-2014 17:28
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ9MDD Offline
Rysiek
****

Liczba postów: 380
Dołączył: 01-02-2009
Post: #18
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Ha, to pewnie inaczej działający enkoder. Zrób Ryśku taki test, w funkcji setup włącz port szeregowy:

Kod:
Serial.begin(9600);

A następnie podczas odczytywania enkodera wyświetl ile masz impulsów na ząbek:

Kod:
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
    Serial.println(enc); //<---- to dorzucamy
  }

Pewnie u Ciebie jest inaczej niż w tym moim i dlatego skacze po 200Hz
I teraz w zasadzie możemy albo zmienić krok albo inaczej zliczać impulsy.

Właściwa zmiana powinna się odbywać tutaj:

Kod:
if(enc_sum >= 2){

i tutaj:

Kod:
if(enc_sum <= -2){

Zamieniamy dwójkę na wartość jaką masz na ząbek. W sumie najlepiej to wystawić jako zmienną do konfiguracji.

Z ciekawości zapytam co to za enkoder?

...przede wszystkim nie zakłócać...
12-10-2014 17:35
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP6AUO Offline
Andrzej
*****

Liczba postów: 1,050
Dołączył: 20-09-2009
Post: #19
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Ryszard, jaki to jest model arduino.
Jaki tam jest prosesor i jaki kwarc.
Żeby nie odstawać dokupię taki model jak na fotce (ja mam Arduino UNO)

Andrzej
12-10-2014 17:38
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP6IFN Offline
Ryszard
****

Liczba postów: 456
Dołączył: 23-03-2010
Post: #20
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Tu go kupiłem: http://electropark.pl/szukaj?orderby=pos...rch=Szukaj 24kroki/obrót, cena jest już trochę wyższa.
Zmieniłem krok liczenia, napisałem wcześniej PS do info poprzedniego.
Rysio!
PS. Andrzeju!
Nie masz co kombinować, każde Arduino jest tu dobre do ćwiczeń. Ja mam DUEMILANOWE. Każde Arduino chodzi na kwarcu 16MHz, u mnie siedzi ATmega 328P.
PS2. Faktycznie, ładnie czyta na porcie szeregowym, dostaję 4 jedynki....ale jak wcześniej już napisałem, poprawiłem w programie cyfrę 2 na 4, jest OK!
(Ten post był ostatnio modyfikowany: 12-10-2014 17:55 przez SP6IFN.)
12-10-2014 17:55
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Odpowiedz 


Skocz do:


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