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
SP2IPT Offline
Jakub
***

Liczba postów: 233
Dołączył: 01-03-2012
Post: #111
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
MAc - przenioslbym ostatnia linie wyzej Wink

O tak:
MagicznyKod napisał(a):buttonState = digitalRead(stepPin);
if (buttonState != lastButtonState) {
if (buttonState == LOW) { zróbcotrzeba();}
lastButtonState = buttonState;
}

Jak oszczedzac czas to oszczedzac Big Grin

pz
(Ten post był ostatnio modyfikowany: 28-10-2014 14:41 przez SP2IPT.)
28-10-2014 14:41
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ1GYQ Offline
Andrzej
****

Liczba postów: 411
Dołączył: 18-06-2009
Post: #112
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Witam

Cytat:Napisane przez SQ9MDD - 26-10-2014 22:45
Wielkość binarna szkicu: 15 820 bajtów (maksymalnie: 30 720 bajtów)

Czyli mijamy powoli połowę, dlaczego pytasz?

Pytam się Rysiu bo ja mam arduino z prockiem co ma 256kb atmega 256 , i nie wiedziałem ile w mniejszym arduino nano sofcik zajmuje miejsca.
Pytanie bardziej z Ciekawości :-)


Pozdrawiam

Andrzej
28-10-2014 17:59
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP9MRN Offline
MAc
*****

Liczba postów: 819
Dołączył: 29-08-2009
Post: #113
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
(28-10-2014 14:41)SP2IPT napisał(a):  MAc - przenioslbym ostatnia linie wyzej Wink

O tak:
MagicznyKod napisał(a):buttonState = digitalRead(stepPin);
if (buttonState != lastButtonState) {
if (buttonState == LOW) { zróbcotrzeba();}
lastButtonState = buttonState;
}

Jak oszczedzac czas to oszczedzac Big Grin

pz
Obawiam się, że jak przeniesiemy do "if" to stracimy istotę debouncingu. chodzi o to, żeby stany się wyrównały bezwarunkowo, po to, żeby kolejne działanie odbyło się wyłącznie wtedy, kiedy są różne.
ale mogę się mylić.

MAc
mrn
28-10-2014 18:48
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: #114
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Wartość edukacyjna wątku wzrasta Wink I bardzo dobrze, zachęcam gorąco do eksperymentów i publikowania ich wyników tutaj na forum. Oczywiście nie wszystkie eksperymenty będą udane, patrz moje walki z RIT-em na potencjometrze. Ale co się człowiek nauczył przy tym to jego.

Andrzej 256Mega to kawał procka jest, ja na tym swoją drukarę 3D zrobiłem (RAMPS), do zabaw z DDS to takie maleństwo jak 328 lub 32u4 wystarczy.

Cytat:...chodzi o to, żeby stany się wyrównały bezwarunkowo, po to, żeby kolejne działanie odbyło się wyłącznie wtedy, kiedy są różne

MAc jedna z lepszych krótkich definicji tego zagadnienia jakie słyszałem.
Ogólnie ta metoda jest jak najbardziej polecana wszędzie tam gdzie nie używamy przerwań a zależy nam na dostępności procesora. Ja tutaj celowo użyłem metody z delay-ami by początkujący złapali ideę.
Czasami trzeba ten krok zrobić by zdać sobie sprawę z ograniczeń.

A jak już jesteśmy przy ograniczeniach to moja metoda na obsługę s-metra ma jedną wadę ciekaw jestem kto zgadnie/wie jaką. Taki mały quiz...

Dla przypomnienia wygląda to tak:

Kod:
const long s_metr_update_interval = 100;     //interwał odświeżania s-metra w msec
long s_metr_update_time = 0;                 //zmienna pomocnicza do przechowywania czasu następnego uruchomienia s-metra


Kod:
void show_smetr(){                                
  if(millis() >= s_metr_update_time){                              //sprawdzam czy już jest czas na wykonanie funkcji

...cos tam robie i robie i robie, a następnie

     s_metr_update_time = millis() + s_metr_update_interval;       //ustawiam czas kolejnego wykonania tej funkcji
  }
}

...przede wszystkim nie zakłócać...
28-10-2014 21:46
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: #115
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
No ja wiem....ale myśmy o tym debatowali telefonicznie. Dlatego tez dobrowolnie nie wezmę udziału w quizie aby dać szansę innym Shy
Rysio!
28-10-2014 21:58
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP9MRN Offline
MAc
*****

Liczba postów: 819
Dołączył: 29-08-2009
Post: #116
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
no ja zgaduję, że basen za mały ;-)

MAc
29-10-2014 0:04
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ5OUX Offline
Norbert

Liczba postów: 9
Dołączył: 03-04-2012
Post: #117
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Czy chodzi o to, że metoda millis() po ok 50 dniach działania programu "przekręca" się i zaczyna liczyć od 0 ?
Teoretycznie nie wejdzie wtedy do tego if`a.
Norbert
(Ten post był ostatnio modyfikowany: 29-10-2014 15:32 przez SQ5OUX.)
29-10-2014 15:32
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ9MDD Offline
Rysiek
****

Liczba postów: 380
Dołączył: 01-02-2009
Post: #118
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Brawo Norbert!

Dokładnie z tym będzie problem. W zasadzie to z tym i jeszcze z jedną rzeczą, już tłumaczę.

Otóż millis() używa licznika 32bit bez znaku, czyli unsigned long, ma zakres od 0 do 4,294,967,295 (czas w milisekundach, to jest około 48dni z małym hakiem). Jednakże w całym programie błędnie przypisałem do liczenia zmiennej czasu, zwykłego longa a ten to też liczba 32bit, ale w zakresie od -2,147,483,648 do 2,147,483,647.
Czyli skróciłem swój licznik w którym mogę przechowywać kolejny moment odpalenia funkcji s-metr o połowę.
A zatem po około 24 dniach kolejne odsunięcie wykonania funkcji s-metra trafi w obszar którego mój licznik nie może przyjąć.

Reasumując jeśli przez 24dni nie wyłaczymy tego transceivera s-metr przestanie działać.

Należy zatem zadbać o obsługę przekroczenia licznika milis() i dodatkowo użyć właściwej zmiennej do liczenia czasu.

...przede wszystkim nie zakłócać...
29-10-2014 15:44
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP9MRN Offline
MAc
*****

Liczba postów: 819
Dołączył: 29-08-2009
Post: #119
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Albo oszczędzać prąd i raz na 3 tygodnie wyłączyć radio i pójść na spacer :-)

MAc
29-10-2014 17:49
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: #120
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Mac nie doceniasz myślę naszych beta testerów, sądzę że za niecałe trzy tygodnie były by pierwsze zgłoszenia błędów he he he Smile Ale wątki humorystyczne na bok wracajmy do tematu...

Poprawiłem zmienne i tylko zmienne. A teraz w ramach ćwiczeń zostawiam pole do popisu dla Was w kwestii zabezpieczenia przed skończeniem się licznika millis().

Czy resetować procesor gdy dojdziemy do końca licznika?
Czy ustawiamy nowe przesunięcia wykonania funkcji s-metra, gdy licznik się przekręci?
A może jeszcze inaczej?

Panowie do dzieła Smile czekam na wasze propozycje...



UPDATE 2014.10.30 19:01:

Poprawiłem i wyczyściłem kod najnowsza wersja poniżej:


Załączone pliki
.zip  zlomek_v_1_0_13-141030b.zip (Rozmiar: 6.98 KB / Pobrań: 859)

...przede wszystkim nie zakłócać...
30-10-2014 20:01
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: 10 gości