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
DA_KAR Offline
Darek
*

Liczba postów: 36
Dołączył: 09-11-2013
Post: #101
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Tak u mnie wygląda odpalony ale nie spalony "Złomek" z RIT-em.
Jeszcze bez 9850.


İmage
26-10-2014 15:59
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP5IWI Offline
Janek
*

Liczba postów: 32
Dołączył: 01-02-2009
Post: #102
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Witam
A tak u mnie,Rysiu jestes 'W I E L K I"
Janek İmage İmage
26-10-2014 17:05
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ9MDD Offline
Rysiek
****

Liczba postów: 380
Dołączył: 01-02-2009
Post: #103
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Weekend, weekend i po weekendzie... fajnie że tyle osób testuje złomka. To budujące że ktoś to buduje i testuje. A zatem do dzieła jedziemy dalej.

Dzisiaj zanim pójdę spać bo rano w trasę Wink Postanowiłem przepisać obsługę klawiszy STEP i RIT, a konkretnie wzorem z Heńka przewalić je na jedno wejście, bo przyda nam się parę fajnych klawiszy a wejść jest jak na lekarstwo. Dodatkowo przeniosłem sygnał PTT z pinu 12 na 2, a dlaczego o tym na końcu.

Zacząłem od tego że przygotowałem dwie zmienne typu boolean by przechowywać status tych przycisków.

Kod:
boolean step_button_pressed = false;
boolean rit_button_pressed = false;

Do sprawdzania stanu wciśnięcia przycisków użyjemy jednego z wejść, dokładnie tego którego używaliśmy do obsługi przycisku krok syntezy, w tym miejscu by mocno w kodzie nie mieszać poprostu zapalamy flagi wciśniętych klawiszy:

Kod:
const int buttons_input = A2;

A robimy to tak:

Kod:
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 < 100){      //drugi przycisk
      rit_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
  }

Uwagę proszę zwrócić na pierwszą linię tej funkcji, by nie opóźniać procesora podczas normalnej pracy gdy żaden z przycisków nie jest naciśnięty, funkcja ta nie sprawdza już nic więcej tylko resetuje flagi przycisków.

Poszczególne funkcje które dotychczas sprawdzały stan wejść teraz sprawdzają tylko stan flag przycisków.

Było tak:

Kod:
//obsługa klawisza zmiany kroku
  if(digitalRead(step_input) == LOW){     //sprawdzanie czy przycisk jest wcisnięty
    delay(50);                            //zwłoka by wyeliminować drgania styków
    if(digitalRead(step_input) == LOW){
......

a teraz jest tak:

Kod:
//obsługa klawisza zmiany kroku
  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){
....

Podobnie zrobiłem w części kodu obsługującego klawisz RIT.

Jesli chodzi zaś o przeniesienie sygnału PTT na pin 2 to intencją było zwolnienie pinu 12-tego który może pracować jako PWM. A na nim zrobimy sobie w następnym odcinku ściemnianie podświetlenia wyświetlacza. Taki wypas Wink

İmage
Mały schemat podłączenia przycisków.

W załączeniu kod po ostatnich zmianach.


Załączone pliki
.zip  zlomek_v_1_0_12-141026b.zip (Rozmiar: 6.91 KB / Pobrań: 688)

...przede wszystkim nie zakłócać...
26-10-2014 23:35
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ1GYQ Offline
Andrzej
****

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

Rysiu mam pytanie ile jeszcze wolnego miejsca jest , lub ile procent już zajmuje program w procku ?

Pozdrawiam

Andrzej
26-10-2014 23:39
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ9MDD Offline
Rysiek
****

Liczba postów: 380
Dołączył: 01-02-2009
Post: #105
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Wielkość binarna szkicu: 15 820 bajtów (maksymalnie: 30 720 bajtów)

Czyli mijamy powoli połowę, dlaczego pytasz?

...przede wszystkim nie zakłócać...
26-10-2014 23:45
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP5IWI Offline
Janek
*

Liczba postów: 32
Dołączył: 01-02-2009
Post: #106
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Ostatni kod
İmage
Janek
27-10-2014 20:50
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SQ9MDD Offline
Rysiek
****

Liczba postów: 380
Dołączył: 01-02-2009
Post: #107
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Brawo Janku.
Może jakies już własne zmiany w kodzie wprowadzałeś? Pytam bo jestem ciekaw czy Ty lub może inni koledzy już jakieś wersje "pod siebie" robicie?

A przy okazji PWM zasugerowałem się rysunkiem znalezionym na forum arduino, w którym był błąd. Oczywiście D12 nie jest wyjściem PWM

İmage
Błędny rysunek.


İmage
A tutaj poprawiony.

Trzeba mieć oczy dookoła głowy albo kolegów którzy z uwagą śledzę nasze poczynania i pokażą błędy. Dzięki Ryśku (SP6IFN).

A wracając do tematu ułożenia pinów połączeń i tego PWM do ściemniania wyświetlacza. Tak sobie myślę że może to i wodotrysk jest ale, akurat mnie się to przyda, więc dlatego to napiszę. Resztę pinów chętnie poprzesuwam, ale to czekam na sugestie osób które zajmą się PCB, na tym etapie to projekt płytki powinien decydować co gdzie przesunąć by było jak najmniej przelotek (jeśli mówimy o druku jednostronnym pod żelazko).

p.s. pozdrawiam z Piły Wink

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

Liczba postów: 817
Dołączył: 29-08-2009
Post: #108
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Ponieważ "delay()" jest kolejnym paskudztwem, którego jeżeli tylko się da to trzeba unikać, ponieważ bezproduktywnie zjada czas procesora to można zrobić tak:

zmienne pomocnicze typu buttonstate i lastbuttonstate typu boolean (czyli zerojedynkowe więc małe)
przycisk normalnie podciągnięty wewnętrznie do plusa, po wciśnięciu zwierany do masy

buttonState = digitalRead(stepPin);
if (buttonState != lastButtonState) {
if (buttonState == LOW) { zróbcotrzeba();}
}
lastButtonState = buttonState;

Styki sobie mogą drgać ile chcą, a my się debouncem wogole nie przejmujemy, bo "zróbcotrzeba()" już zostało wykonane. to oczywiście nie rozwiązuje nap problemu ze stuprocentową pewnością, ale :
1. praktyka wykazuje, że stabilność jest bardzo duża
2. unikamy delaya
3. nie odpalamy rakiet z głowicami atomowymi

czasem delaya się nie da uniknąć, np przy czytaniu z seriala albo ustabilizowaniu odczytu z analoga, ale to już trudno

MAc
mrn

PS
akurat w obsłudze klawiatury delay nie jest tragiczny, bo i tak jest szybszy od naszego palca - ale ze względów edukacyjnych przypominam, że mało jest rzeczy gorszych niż wymuszanie TOTALNEGO nic nie robienia procesora. Wszystkie procesy się zatrzymują.
28-10-2014 10:15
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP6IFN Offline
Ryszard
****

Liczba postów: 455
Dołączył: 23-03-2010
Post: #109
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Cytat:czasem delaya się nie da uniknąć, np przy czytaniu z seriala albo ustabilizowaniu odczytu z analoga, ale to już trudno
Akurat przy odczycie z wejścia analogowego delaya można "zgubić" programowo, wykonując kilka pomiarów i je uśrednić. Na pierwszej lekcjii z Arduino którą przerabiałem było:
Cytat: //pomiar napięcia z potencjometru i dodanie wyniku do wart_pot
for (int i =0; i < 20; i++); //pętla wykonywana 20 razy
wart_pot = wart_pot + analogRead(A0);
//obliczanie średniej arytmetycznej z 20 pomiarów
wart_pot = wart_pot / 20;
// przeliczanie odczytanej wartości na napięcie
wart_nap=(5.0*wart_pot*20)/1024.0;
zaczerpnięte z "Elektronika Praktyczna Nr.6/2011 str.87".
Rysio!
28-10-2014 11:54
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
SP9MRN Offline
MAc
*****

Liczba postów: 817
Dołączył: 29-08-2009
Post: #110
RE: Fork-Heńka... czyli jak sobie poradzić z DDS za pomocą ARDUINO
Rysio!
Uśrednianie to jedno a chwila spokoju dla przetwornika to drugie. Tam jest jeden multipleksowany przetwornik i najlepiej jest wywołać przetwornik, poczekać i dopiero zmierzyć.
Uśrednianie z kolei daje nam "pewność" pomiaru - np zabezpiecza przed niestabilnością potencjometru.

analogRead(A0);
delay(10);
sensorReading[0] = analogRead(A0);
analogRead(A1);
delay(10);
sensorReading[0] = analogRead(A1);

Muszę znaleźć wykład o tym - ale w tej chwili nie pamiętam linku

to nie jest zawsze potrzebne - np przy pojedynczym smetrze to nie ma większego znaczenia, ale jak w sterowniku czytałem dwa potencjometry jednocześnie kręcone, to się zaczynały cuda. Może się tak zdarzać również przy pomiarze SWR - jak bierzemy jednocześnie sygnał analogowy fwd i rev do dalszej obróbki.
MAc

PS znalazłem

"The Atmega datasheet also cautions against switching analog pins in close temporal proximity to making A/D readings (analogRead) on other analog pins. This can cause electrical noise and introduce jitter in the analog system. It may be desirable, after manipulating analog pins (in digital mode), to add a short delay before using analogRead() to read other analog pins. "
http://arduino.cc/en/pmwiki.php?n=Tutori...gInputPins
(Ten post był ostatnio modyfikowany: 28-10-2014 12:59 przez SP9MRN.)
28-10-2014 12:59
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: 1 gości