03-11-2014, 20:12
03-11-2014, 20:31
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:
[attachment=7542]
Przy okazji zauważyłem takie fragmenty kodu:
i
Myślę, że zmienne step_button_pressed i rit_button_pressed nie mają prawa same się zmienić więc ten czas jest stracony ;-)[/quote].
Kod z przerobioną obsługą enkodera dla wersji 13-tej:
[attachment=7542]
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)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)03-11-2014, 21:24
(03-11-2014, 20: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źć.
04-11-2014, 18:30
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
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, 18:55
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.
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
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
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.

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

04-11-2014, 19:47
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
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
04-11-2014, 20:42
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.
Daje na wyjsciu spojne czasy:
Zdeycdowanie co innego pamietam z nauki C
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)
pz
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: 251852uSZdeycdowanie co innego pamietam z nauki C

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)

pz
04-11-2014, 21:20
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 
Ale - nie warto czasem kombinować pod górkę. Najpierw niech bedzie kod który robi co trzeba. Na doskonałość przyjdzie pora
PS: Moze kompilator zauważył ze robisz dwa razy to samo niezaleznie od wyniku IFa.

Ale - nie warto czasem kombinować pod górkę. Najpierw niech bedzie kod który robi co trzeba. Na doskonałość przyjdzie pora

PS: Moze kompilator zauważył ze robisz dwa razy to samo niezaleznie od wyniku IFa.
04-11-2014, 21:56
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
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ś
Przyznam się że nie rozumiem vima.
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
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ś
Przyznam się że nie rozumiem vima.04-11-2014, 22:27
Hardcore to byl jak IDE Arduino wywalilo mi system 
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
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
) 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
Zeby by bylo juz zupelnie offtop: sprawdzilem z przypisaniem do drugiej zmiennej w przypadku else/case - zaleznosci pozostaja takie same.
pz

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

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

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