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
SP3JDZ Offline
Początkujący
**

Liczba postów: 92
Dołączył: 15-03-2014
Post: #131
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Znalazłem przyczynę dziwnego zachowania u mnie wersji 13-tej. Otóż nadgorliwie podłączyłem drabinkę oporową do masy (że niby rysownik schematu niedomalował masy). Odłączyłem masę, zaoszczędziłem dwa rezystory 1k no i ruszyło - przyciski step i RIT zaczęły działać.
Kod z przerobioną obsługą enkodera dla wersji 13-tej:

.zip  zlomek_1_0_13_PD20141103.zip (Rozmiar: 6.94 KB / Pobrań: 850)
Przy okazji zauważyłem takie fragmenty kodu:
Kod:
if(step_button_pressed == true){        //sprawdzanie czy przycisk jest wcisnięty
    delay(50);                            //zwłoka by wyeliminować drgania styków
    if(step_button_pressed == true){      //jeśli klawisz nadal jest wcisnięty (czyli nie są to zakłócenia)
i
Kod:
if(rit_button_pressed == true){             //jeśli klawisz wciśnięty
   delay(50);                                 //zwłoka by wyeliminować drgania styków
    if(rit_button_pressed == true){           //jeśli nadal wciśnięty (eliminuję drgania styku)
Myślę, że zmienne step_button_pressed i rit_button_pressed nie mają prawa same się zmienić więc ten czas jest stracony ;-)[/quote].

http://witec.pl
03-11-2014 21:31
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: #132
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
(03-11-2014 21:31)SP3JDZ napisał(a):  Myślę, że zmienne step_button_pressed i rit_button_pressed nie mają prawa same się zmienić więc ten czas jest stracony ;-).

Masz 100% rację Witku, to zaszłość, spowodowana przepisaną na nowo obsługą klawiszy, gdy każdy z nich miał swoje wejście, wtedy było to sensowne.

W momencie gdy czytamy je z jednego wejścia analogowego.

Brawo za czujność.

Witek mam propozycję by nie robić zamieszania z wersjami programu może umówmy się tak że twoje wersje będziesz ciągnął w osobnej numeracji, na przykład: 1.1.xxx a jeśli ktoś jeszcze dołączy do modyfikacji to swoją linię będzie mógł ciągnąć na przykład w serii: 1.2.xxx dzięki temu będzie łatwiej ogarnąć która wersja z której wynika i jakie można tam modyfikacje znaleźć.

...przede wszystkim nie zakłócać...
03-11-2014 22:24
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP2ONG Offline
Waldek
*

Liczba postów: 44
Dołączył: 22-10-2013
Post: #133
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
A nie myslicie o tym aby kod umiescic w GITHUB https://github.com/ lub SVN google code ? http://code.google.com/
Zaleta takiego rozwiazania jest ze kazdy ma dostep do kodu ale nad rozwojem pracuje grupa ktora jest wpisana w projekcie, mozna zglasazc swoje poprawki. Latwy system zarzadzania zmianami a jesli okaze sie ze jakas poprawak cos napsula to latwao ja wycofac korzystajac z mozliwosci czy to GIT czy SVN. Mozna robic tzw forki czyli jesli ktos uzna ze bedzie prowadzil swoja galaz rozwojowa kodu to jest to dostepne. Mysle ze warto to rozwazyc

73 Waldek sp2ong
04-11-2014 19:30
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: #134
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Kurcze! Waldek o tym nie pomyślałem...
Cały czas projekt traktowałem jako swojego rodzaju zabawę... Ale pomysł jest całkiem niezły, z tym że nie wszyscy korzystali z SVN-a. Pewnie będziesz musiał z tym pomóc. Smile

A właśnie jeśli chodzi o zabawę to dzisiaj przed sniadaniem chciałem sprawdzić w praktyce to o czym mówił Jakub SP2IPT, a mianowicie jakie są różnice w czasie wykonania operacji na IF-ach i SWITCH-ach.

Doszedłem do tego że robiąc różne operacje w środku tego kodu wyniki testu są niejednoznaczne... Popróbujcie sami kod poniżej

Kod:
//kilka zmiennych
unsigned long time_start = 0;
unsigned long time_stop = 0;
unsigned long if_execution_time = 0;
unsigned long switch_execution_time = 0;
int test_zmienna = 0;
int test_val = 1;

//setup odpalamy port szeregowy
void setup(){
Serial.begin(9600);
  delay(3000);
}

//pętla główna
void loop(){
  //sprawdzamy ile czasu wykonuje sie if
  time_start = micros();
  if(test_zmienna == 0){
   Serial.println("ABCD");
  }else{
   Serial.println("BCDA" );
  }
  time_stop = micros();
  if_execution_time = time_stop - time_start;
  
  //sprawdzamy ile czasu wykona się switch
  time_start = micros();
  switch(test_zmienna){
   case 0:
     Serial.println("ABCD");
   break;
   case 1:
     Serial.println("BCDA" );
   break;
  }
  time_stop = micros();
  switch_execution_time = time_stop - time_start;
  
  //wyświetlamy wyniki
  Serial.print("test 1 czas wykonania instrukcji IF: ");
  Serial.print(if_execution_time);
  Serial.println("uS");
  Serial.print("test 2 czas wykonania instrukcji SWITCH: ");
  Serial.print(switch_execution_time);
  Serial.println("uS");
  delay(10000);
  
  if(test_zmienna == 0){
    test_zmienna = 1;
  }else{
    test_zmienna = 0;
  }
}

Jako następne ćwiczenie sprawdźcie co się stanie jeśli w procedurze "switch" i procedurze "if", wykonamy jakąś operację która jest prosta i szybka na przykład zmiana wartości zmiennej czy coś podobnego...

Myślę że taką analizę co kompilator robi z naszymi poleceniami to mógłby wykonać ktoś kto posiada znajomośc assemblera Wink

...przede wszystkim nie zakłócać...
04-11-2014 19:55
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP2ONG Offline
Waldek
*

Liczba postów: 44
Dołączył: 22-10-2013
Post: #135
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Witam,

Czy GITHUB czy SVN trudno mi powiedziec ktory lepszy. Jedni wola GIT a inni SVN. W GIT widze ze dosc latwo robi sie tzw forka czyli osobna galaz projektu. W SVN nie bardzo pamietam. Troche uzywalem SVN na google bo tam mialem 2 projekty swoje OpenCaching (zabawa z GPS) ale obecnie juz mniej sie zajmuje nim bo sa koledzy ktorzy ciagna dalej :-)

Mysle ze trzeba zalozyc na przyklad projekt na ale tam trzeba miec konta na google a na GITHUB tez trzeba zarejstrowac sie i zalozyc konto chodzi o prowadzacych projekt.

Oczywiscie ci co bawia sie w programowanie musza zainstalowac sobie na SVN oprogramowanie i synchoroniowac go z code.google. Moze to wyglada strasznie napoczatku ale wierzcie mi jak jest paru ktorzy kod rozwijaja to porzadkuje calosc a moga dolaczyc inni zainteresowani.

Pare linkow do poczytania:

http://frogermcs.blogspot.com/2010/08/ob...lipse.html
http://mirror.1tbps.org/old-yc/youthcode...-code.html
http://informatyka.wroc.pl/node/628

Pod MSWidnows oprogramowanie niezbedne
http://tortoisesvn.net/downloads.html

http://leniwy.eu/news,9,Podstawy-SVN-por...acych.html
http://funkcje.net/pod_kat/5/47.html

pewnie wiele innych poradnikow

Dla GITHUB

http://git-scm.com/book/pl/v1/Podstawy-G...orium-Gita
http://blog.end3r.com/142/github-kodowan...znosciowe/
http://pl.discovermeteor.com/chapters/github/


Aby zylo sie lepiej z GITHUB w MSWidnows: https://windows.github.com/


http://www.kaims.pl/~goluch/KNAG/InstrGiT.pdf

Na GITHUB przykladowe projekty

https://github.com/electroyou/DDS_AD9834
https://github.com/MarSik/HF-SSB-CW-dire...n-receiver
https://github.com/m0xpd/DDS

Mysle ze GITHUB bedzie dobrym wyborem

73 Waldek SP2ONG
(Ten post był ostatnio modyfikowany: 05-11-2014 7:57 przez SP2ONG.)
04-11-2014 20:47
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP2IPT Offline
Jakub
***

Liczba postów: 233
Dołączył: 01-03-2012
Post: #136
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Hmmm... nawet wyjalem po raz pierwszy Mege 2560 z pudelka i podlaczylem do komputera.
Musze przyznac, iz jestem zadziwiony wynikiem. Ciekawe jak to jest w rzeczywistosci optymalizowane, ze wyniki sa takie jakie sa.

Kod:
//kilka zmiennych
unsigned long time_start = 0;
unsigned long time_stop = 0;
unsigned long if_execution_time = 0;
unsigned long switch_execution_time = 0;
int test_zmienna = 0;
int test_val = 1;
int wyjscie;

//setup odpalamy port szeregowy
void setup(){
Serial.begin(9600);
  delay(3000);
}

//pętla główna
void loop(){
  //sprawdzamy ile czasu wykonuje sie if
  time_start = micros();
  
  for (int i=0; i<1000; i++) {
    for (int j=0; j<1000; j++) {
      if (test_zmienna == 0) wyjscie=test_zmienna; else wyjscie=test_zmienna;
    }
  }
  time_stop = micros();
  if_execution_time = time_stop - time_start;
  
  //sprawdzamy ile czasu wykona się switch
  time_start = micros();
  for (int i=0; i<1000; i++) {
    for (int j=0; j<1000; j++) {
      switch(test_zmienna) {
        case 0:
          wyjscie=test_zmienna;
          break;
        case 1:
          wyjscie=test_zmienna;
          break;
      }
    }
  }
  time_stop = micros();
  switch_execution_time = time_stop - time_start;
  
  //wyświetlamy wyniki
  Serial.print("test 1 czas wykonania instrukcji IF: ");
  Serial.print(if_execution_time);
  Serial.println("uS");
  Serial.print("test 2 czas wykonania instrukcji SWITCH: ");
  Serial.print(switch_execution_time);
  Serial.println("uS");
  delay(10000);
  
  if(test_zmienna == 0){
    test_zmienna = 1;
  }else{
    test_zmienna = 0;
  }
}

Daje na wyjsciu spojne czasy:
Kod:
test 1 czas wykonania instrukcji IF: 251852uS
test 2 czas wykonania instrukcji SWITCH: 629160uS
test 1 czas wykonania instrukcji IF: 251852uS
test 2 czas wykonania instrukcji SWITCH: 629160uS
test 1 czas wykonania instrukcji IF: 251852uS
test 2 czas wykonania instrukcji SWITCH: 880692uS
test 1 czas wykonania instrukcji IF: 251852uS
test 2 czas wykonania instrukcji SWITCH: 629156uS
test 1 czas wykonania instrukcji IF: 251852uS
test 2 czas wykonania instrukcji SWITCH: 880696uS
test 1 czas wykonania instrukcji IF: 251856uS
test 2 czas wykonania instrukcji SWITCH: 629156uS
test 1 czas wykonania instrukcji IF: 251852uS

Zdeycdowanie co innego pamietam z nauki C Big Grin

Jak widac ominalem niepotrzebne opoznienia na komunikacji z portem szeregowym i kazalem prockowi troche policzyc zeby miec pewnosc prawidlowosci pomiaru.

BTW: czy da sie podpiac pod to IDE jakis normalny edytor? (czytaj: vim) Wink

pz
(Ten post był ostatnio modyfikowany: 04-11-2014 21:42 przez SP2IPT.)
04-11-2014 21:42
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ5KVS Offline
Karol
*****

Liczba postów: 1,012
Dołączył: 26-09-2012
Post: #137
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Właśnie nie wiem jak to jest z atmelami, ale... Procesory ARM maja inaczej zorganizowane wywołanie "IF" i w zasadzie różnic w szybkości miedzy If a switch nie ma. Zdecydowanie lepiej tez "komasowac" wiele instrukcji w jednym wywołanie, wtedy kompilator optymalizuje do odpowiednich komend wyższego poziomu (które robią kilka rzeczy na raz). Swego czasu pisałem programy z użyciem MMX/SSE/SSE2 - fajna zabawa, i sporo główkowania Smile
Ale - nie warto czasem kombinować pod górkę. Najpierw niech bedzie kod który robi co trzeba. Na doskonałość przyjdzie pora Wink

PS: Moze kompilator zauważył ze robisz dwa razy to samo niezaleznie od wyniku IFa.
(Ten post był ostatnio modyfikowany: 04-11-2014 22:20 przez SQ5KVS.)
04-11-2014 22:20
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ9MDD Offline
Rysiek
****

Liczba postów: 380
Dołączył: 01-02-2009
Post: #138
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
ad. p.s. To przebiegły kompilator...

Do poczytania, nie jesteśmy pierwsi którzy się zastanawiają o co chodzi...
http://blog.kriegsman.org/2013/12/01/opt...g-so-am-i/

No i Karol masz absolutną rację na tym etapie nie chodzi o "czystą perfekcję" a raczej o użyteczny kod i kupę zabawy Wink Kolega coś napisza a człowiek do porannej kawy główkuje jak by to przetestować. No a poza tym ja się cieszę że aktywność w wątku wzrasta.

Waldek dzięki za informacje o "SVN-ach" jest co czytać... postaram się coś z tego wdrożyć, chyba że będziesz pierwszy, to z chęcią się podepnę.

Vim? Brrr... to hardcor jakiś Wink Przyznam się że nie rozumiem vima.

...przede wszystkim nie zakłócać...
04-11-2014 22:56
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP2IPT Offline
Jakub
***

Liczba postów: 233
Dołączył: 01-03-2012
Post: #139
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Hardcore to byl jak IDE Arduino wywalilo mi system Smile
OSX 10.10, wersja beta IDE do Ardka 10.5.8 zeby nie musiec uzywac starej dziurawej Javy. W pewnym momencie podczas przelaczania programow zostal mi tylko enter w klawiaturze, myszka to sobie tylko moglem jezdzic, klikanie przestalo dzialac Big Grin

Jak narazie zaczynam rozgryzac STMy, ale pewnie jak juz wyjalem plytke z folii to cos tez w wolnej chwili (w tym momencie prawie sam padlem ze smiechu Wink) sie pobawie. Wrazenia jak narazie sa takie, ze na Arduino duzo latwiej zaczac, ale to oczywiste.

Zaczynalem od Emacsa, ale w miare szybko przerobili mnie znajomi na Vima Big Grin

Zeby by bylo juz zupelnie offtop: sprawdzilem z przypisaniem do drugiej zmiennej w przypadku else/case - zaleznosci pozostaja takie same.

pz
04-11-2014 23:27
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP3TLU Offline


Liczba postów: 8
Dołączył: 24-02-2010
Post: #140
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Witam szanownych kolegów.

Pozwolę sobie dołączyć do grona beta-testerów Złomka.
Temat śledzę od początku, ale dopiero wczoraj miałem trochę czasu
by to poskładać i uruchomić.

Ryszard, gratuluję i podziwiam.

Vy 73 Sebastian

İmage İmage İmage
06-11-2014 9:01
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Odpowiedz 


Skocz do:


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