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
SP9MRN Offline
MAc
*****

Liczba postów: 819
Dołączył: 29-08-2009
Post: #171
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
nie nerwowo :-)
Prolific ma tak samo, pewnie ktoś ten numer powtórzy. To dotyczy chińskich podróbek - a większość naszych "nano" jest z chin...
postaram się sprawdzić, czy zamiana PID na F460 faktycznie zabezpiecza przed zmianą PIDa na 0000 - bo może to jest jakaś metoda profilaktyczna.
"Another solution: Simply change the PID of the device to F460 and you will get a 2.8.28 driver from the Windows Update. Hopefully this vendor / manufacturer won’t be forced by FTDI to update to a new driver anywhere soon…"

Tylko muszę znaleźć "zarażoną" maszynę. Za szybko wyleczyłem :-)

MAc
19-11-2014 1:19
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: #172
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
OK Panowie kończę na dzisiaj bo rano do pracy....
A więc tak:

Zmiany dotyczyły wprowadzenia obsługi VFO A i B.
Dodałem dwie zmienne dla przechowywania częstotliwości VFO A i VFO B do tych komórek chowam częstotliwość podczas zmiany bieżącego VFO.

Kod:
//funkcja do obsługi zmiany VFO
void change_vfo(){
  myGLCD.setFont(TinyFont);                    //mała czcionka
  switch(vfo_state){                           //sprawdzam jakie VFO zostało wybrane
     case 0:                                   //jeśli A to:
      myGLCD.print("V/A", 56,2);               //sygnalizuję które VFO pracuje
      frequency_vfo_b = frequency;             //zawartość częstotliwość odkładam do pamięci VFO B
      frequency = frequency_vfo_a;             //wczytuję zawartość częstotliwości z pamięci VFO A
     break;
     case 1:
      myGLCD.print("V/B", 56,2);               //sygnalizuję które VFO pracuje
      frequency_vfo_a = frequency;             //zawartość częstotliwość odkładam do pamięci VFO A
      frequency = frequency_vfo_b;             //wczytuję zawartość częstotliwości z pamięci VFO B
     break;
  }
  set_frequency(0);                            //ustawiam częstotliwość dla syntezera
  show_frequency();                            //pokazuję częstotliwość na LCD
  delay(200);                                  //male opóźnienie
}

Rozszerzyłem funkcję obsługującą drabinkę rezystorową i już mamy obsługę dwóch VFO.

Kod:
//obsługa przycisków
  if(analogRead(buttons_input) < 1000){        //jeśli cokolwiek jest wciśnięte to sprawdźmy co to
    delay(10);                                 //male opoźnienie by się ustabilizował stan
    int adc_value = analogRead(buttons_input);
    Serial.println(adc_value);                 //w tym miejscu sprawdzisz jaka wartość ma wcisnięty klawisz patrz port RS232 debugowanie
      if(adc_value < 10){                      //pierwszy przycisk
       step_button_pressed = true;
      }
      if(adc_value > 10 && adc_value < 120){   //drugi przycisk
        rit_button_pressed = true;
      }
      if(adc_value > 120 && adc_value < 220){  //trzeci przycisk
        dim_button_pressed = true;
      }
      if(adc_value > 220 && adc_value < 320){  //trzeci przycisk
        vfo_button_pressed = true;
      }      
  }else{                                       //w każdym innym przypadku resetujemy flagi przycisków
      step_button_pressed = false;             //reset przycisku step
      rit_button_pressed = false;              //przycisk rita
      dim_button_pressed = false;              //przycisk przyciemniania LCD
      vfo_button_pressed = false;              //przycisk zmiany VFO
  }

Kod po kilku testach bo już mi się dzisiaj nie chce siedzieć. Póki co wydaje się że wszystko jest ok. Jutro popołudniu wykonam resztę testów.

Poniżej oczywiście cały kod.


Załączone pliki
.zip  zlomek_v_1_0_15-141119a.zip (Rozmiar: 8.12 KB / Pobrań: 1012)

...przede wszystkim nie zakłócać...
19-11-2014 2:51
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: #173
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Rozmawiałem dzisiaj z Ryśkiem SP6IFN i zwrócił moją uwagę na pewien problem.
Otóż nasza synteza jest przystosowana do s-metra (pamiętajmy że to tylko wskaźnik) który pracuje z napięciem wyjściowym od 0V - 5V. Jest to oczywiście dość dużo, wiekszość konstrukcji pracuje na niższych napięciach.
Wobec tego przebudowałem program w taki sposób by można było zmienić ten zakres na 0V - 1.1V.
Zmiana ta realizowana jest za pomocą funkcji analogReference().
Minusem tego rozwiązania jest to ze nasza drabinka do obsługi przycisków też musi być przeprogramowana, bo zmiana napięcia referencyjnego dotyczy wszystkich wejść analogowych i przestała by działać.

A zatem:

W sekcji konfiguracyjnej mamy zmienną do wyboru napięcia odniesienia:
Kod:
const int bod_lvl = 0;                                //konfiguracja napięcia odniesienia 0 - 5V, 1 - 1.1V

Podczas startu procesora w funkcji setup ustawiamy odpowiednie napięcie:

Kod:
if(bod_lvl == 1){                             //tutaj przy starcie ustawiam właściwe napięcie odniesienia
    analogReference(INTERNAL);                  //dla ATmega168 i ATmega328, INTERNAL = 1.1V w arduino mega wpisujemy INTERNAL1V1
  }

No i na koniec fragment kodu w którym reagujemy na dane z przetwornika, czyli jak teraz wygląda nasza funkcja obsługująca przyciski, już po zmianach:

Kod:
else if(adc_value > 10 && adc_value < 120 && bod_lvl == 0){   //drugi przycisk napiecie odniesienia 5V
        rit_button_pressed = true;
      }
      else if(adc_value > 120 && adc_value < 220 && bod_lvl == 0){  //trzeci przycisk napiecie odniesienia 5V
        dim_button_pressed = true;
      }
      else if(adc_value > 220 && adc_value < 320 && bod_lvl == 0){  //czwarty przycisk napiecie odniesienia 5V
        vfo_button_pressed = true;
      }
      else if(adc_value > 350 && adc_value < 500 && bod_lvl == 1){   //drugi przycisk napiecie odniesienia 1.1V
        rit_button_pressed = true;
      }
      else if(adc_value > 500 && adc_value < 800 && bod_lvl == 1){  //trzeci przycisk napiecie odniesienia 1.1V
        dim_button_pressed = true;
      }
      else if(adc_value > 800 && adc_value < 1000 && bod_lvl == 1){  //czwarty przycisk napiecie odniesienia 1.1V
        vfo_button_pressed = true;
      }

W chwili obecnej na atmedze 328 nasz program zajmuje: 17 012 bajtów z 30 720 bajtów, czyli własnie przekroczyliśmy połowę pamięci procesora.
No Panowie ciekaw jestem waszych postępów w pracach, ktoś poza Rysiem już napędza Złomkiem jakieś radio?


Załączone pliki
.zip  zlomek_v_1_0_16-141119a.zip (Rozmiar: 8.43 KB / Pobrań: 946)

...przede wszystkim nie zakłócać...
19-11-2014 17:11
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: #174
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
(19-11-2014 17:11)SQ9MDD napisał(a):  No Panowie ciekaw jestem waszych postępów w pracach,
ktoś poza Rysiem już napędza Złomkiem jakieś radio?

Właściwie to nie ma się czym chwalić.
Mam na ukończeniu Kajmana i próbowałem
jak to działa. Złomek fajnie daje sobie radę.
W radiu muszę lekko podciągnąć filtr wejściowy
bo za wcześnie się kończy i zawęzić filtr kwarcowy
bo za szeroki ale dało się posłuchać(pobawić)
choć warunki nie najlepsze.
Pozdrawiam
19-11-2014 23:01
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ4KKG Offline


Liczba postów: 5
Dołączył: 07-11-2014
Post: #175
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Witam.
Melduję, że kolejny Złomek został częściowo uruchomiony - muszę się zaopatrzyć tylko w jakiś normalny encoder - do tej pory używam modułu KY-040. Zmienia mi częstotliwość co drugi ząbek (łopatologicznie tłumacząc na ząbkach parzystych mam sygnał, na nieparzystych brak).
(19-11-2014 17:11)SQ9MDD napisał(a):  No Panowie ciekaw jestem waszych postępów w pracach, ktoś poza Rysiem już napędza Złomkiem jakieś radio?
Na chwilę obecną mam go podłączonego do odbiornika ZetaSDR - sprawdza się w 100% na paśmie 80 m.
Może to trochę śmieszne, ale od czegoś trzeba zacząćTongue

Pozdrawiam
19-11-2014 23:43
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ6IYY Offline
miso(michal]
***

Liczba postów: 155
Dołączył: 21-09-2009
Post: #176
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Witam po naciskaniu klawisza zmiany kroku podkreślenie kroku mi lata bez zaczymania
Cytat:int adc_value = analogRead(buttons_input);
Serial.println(adc_value); //w tym miejscu sprawdzisz jaka wartość ma wcisnięty klawisz patrz port RS232 debugowanie
jaka praktycznie wygląda sposób sprawdzania: terminal itp.. za kogoż kto to nigdy nie robił

Nie otrzymasz koni wyścigowych krzyżując dwa osły
(Ten post był ostatnio modyfikowany: 20-11-2014 3:46 przez SQ6IYY.)
20-11-2014 3:46
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP3JDZ Offline
Początkujący
**

Liczba postów: 92
Dołączył: 15-03-2014
Post: #177
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
(20-11-2014 3:46)SQ6IYY napisał(a):  Witam po naciskaniu klawisza zmiany kroku podkreślenie kroku mi lata bez zaczymania

Sprawdź, czy czasem nie masz podłączonego ostatniego/pierwszego rezystora z drabinki od przycisków do masy. Jeden koniec drabinki oporowej jest podłączony do VCC, drugi wisi w powietrzu (nie jest nogdzie podłączony).

http://witec.pl
20-11-2014 9:14
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: #178
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Cytat:Sprawdź, czy czasem nie masz podłączonego ostatniego/pierwszego rezystora z drabinki od przycisków do masy. Jeden koniec drabinki oporowej jest podłączony do VCC, drugi wisi w powietrzu (nie jest nogdzie podłączony).

tak wisi w powietrzu i nadal skacze

Nie otrzymasz koni wyścigowych krzyżując dwa osły
(Ten post był ostatnio modyfikowany: 20-11-2014 14:23 przez SQ6IYY.)
20-11-2014 14:21
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ9MDD Offline
Rysiek
****

Liczba postów: 380
Dołączył: 01-02-2009
Post: #179
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Michał podpowiedz jakie masz arduino i jakim napięciem zasilasz drabinkę. To pomoże zdiagnozować co się dzieje.

Jeśli nic nie pomyliłem to schemat połączen wygląda tak:

İmage

...przede wszystkim nie zakłócać...
21-11-2014 11:10
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: #180
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Arduino Uno zasilane z usb na drabinki 4.89V(mierzone)podane z przyłącza Arduino POWER 5V przycisk STEP na enkoderu

Nie otrzymasz koni wyścigowych krzyżując dwa osły
(Ten post był ostatnio modyfikowany: 21-11-2014 14:24 przez SQ6IYY.)
21-11-2014 14:24
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Odpowiedz 


Skocz do:


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