Koleżankom i Kolegom Radioamatorom, Krótkofalowcom,
Konstruktorom i Waszym Rodzinom – w tych trudnych czasach –
po dotkliwej awarii naszego forum
Pogodnego czasu po Bożym Narodzeniu,
Dosiego Nowego Roku
oraz Radosnych Trzech Króli

Życzy Zespół Home Made

Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Rysiek zasygnalizował Bricka FT232. Microsoft podobno wycofał już update, ale jakby się komuś przytrafiło to:
http://www.rei-labs.net/fixing-the-ftdi-...o-updates/
i potem FT_PROG ze strony FTDI, żeby z powrotem zmienić PIDa na 6001.
Uwaga, jak ktoś będzie za szybki i zmieni sobie jak ja na 0601 ;-) to trzeba po prostu dopisać je w OBU infach.

Sztuczka z poprzednim driverem działa częściowo, bo PID zapisany w kości zostaje zmieniony na 0000 i na innym komputerze może być kłopt


aaa, pamiętajcie, że prolific też wypuścił zarute drivery. Perfidia FTdi polegała na tym, że zatrute jabłko było w microsoftowym updacie do windowsów
MAc
mrn

jeszcze to: http://www.rei-labs.net/changing-ftdi-pid/

i jeszcze załączam dwa pliki txt w których należy zmienić rozszeżenia na "inf" a następnie podmienić z infami w katalogu arduino/drivers/ftdi usb drivers i można spokojnie ponownie zainstalować drivery ręcznie korzystając z powyższego katalogu. Uwaga najpierw trzeba ściągnąć ze strony ftdi program do czyszczenia systemu z driverów


Załączone pliki
.txt   ftdibus.txt (Rozmiar: 5.39 KB / Pobrań: 1,434)
.txt   ftdiport.txt (Rozmiar: 5.3 KB / Pobrań: 989)
Odpowiedz
Ogólnie taka historia że FTDI w swoim driverze napisało złośliwy kod który zmienia PID urządzeń nie oryginalnych (nadpisuje wewnętrzny eeprom chipu ftpi).
Powoduje to że podłączone do systemu windows urządzenia z FTDI zwyczajnie przestają się komunikować.
Sama podmiana PID jest możliwa za pomocą programu ze strony FTDI. Natomiast gorzej jest że jeśli w systemie windows pozostanie feralny driver to uszkodzi nasze urządzenie ponownie. Podmiana sterowników na starsze w windowsach 7 może być kłopotliwa pół wieczoru nad tym siedziałem bo co restart wracał mi feralny driver.

Pomógł przepis z tej strony:

http://superuser.com/questions/597370/ho...riverstore

Oraz usunięcie wszystkich plików DLL które wyprodukowało FTDI z katalogu C:/Windows/System32

I taka sugestia... jeśli coś projektujecie odpuście sobie FTDI.... szkoda nerwów...
No i w związku z tymi perturbacjami nie zdążyłem z kolejną wersją Złomka dziś...
...przede wszystkim nie zakłócać...
Odpowiedz
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
Odpowiedz
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ń: 1,202)
...przede wszystkim nie zakłócać...
Odpowiedz
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ń: 1,137)
...przede wszystkim nie zakłócać...
Odpowiedz
(19-11-2014, 16: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
Odpowiedz
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, 16: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
Odpowiedz
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
Odpowiedz
(20-11-2014, 2: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).
Odpowiedz
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
Odpowiedz


Skocz do:


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