[AD2] Analog Discovery 2 jako jednocyfrowy zegarek

Oscyloskopy, multimetry, generatory, nie tylko z najwyższej półki
Awatar użytkownika
tasza
Geek
Geek
Posty: 1082
Rejestracja: czwartek 12 sty 2017, 10:24
Kontaktowanie:

[AD2] Analog Discovery 2 jako jednocyfrowy zegarek

Postautor: tasza » wtorek 28 lut 2017, 09:00

#slowanawiatr #palcempowodzie

To taki zabawowy projekt na jeden wieczór no a przy okazji kolejny przykład zastosowania języka skryptowego środowiska Waveforms.
Był odczyt równoległej pamięci EPROM no to teraz będzie zegarek.

Układowo całość jest banalna - schemat poniżej.

ad2-7seg-sch.png


Spory dylemat miałam w wyborem wyświetlacza, w zamyśle miał być taki zupełny old-school.
Casting na główną rolę wygrał polski CQYP74, ale okazało się szybko, że nie pasuje do płytki stykowej,
jest zbyt wąski. Finalnie wykorzystałam rosyjski wyświetlaczyk z roku 88, klimat odpowiedni zapewniony.

Nietrudno zgadnąć, że cały wic w tej zegarkowej zabawce to odpowiednie oprogramowanie.
Zagadnienia są w sumie trzy:
* jak pozyskać bieżącą wartość czasu - obiekt Date i metody getHours(), getMinutes()
* jak na jednej cyfrze pokazać godziny i minuty, ich dziesiątki i jedności - podział na kolejne cyfry i ich kolejne `wymiganie`
* konwersja liczb 0..9 na kody 7-seg to już detal - tablice kontrolujące zapalanie odpowiednich segmentów (typowy lookup)

Tu dygresja na boku:
język skryptowy Waveforms oparto o Qt-Script, więc biorąc pod uwagę (jak zwykle) skromność firmowego help-a warto poszukać dodatkowych informacji w sieci, ja znalazłam sobie to:

:arrow: https://doc.qt.io/archives/qsa-1.2.2/language.html

Cały programik sterujący poniżej:

Kod: Zaznacz cały

var segment_A = Array( 1, 0, 1, 1, 0, 1, 1, 1, 1, 1 );
var segment_B = Array( 1, 1, 1, 1, 1, 0, 0, 1, 1, 1 );
var segment_C = Array( 1, 1, 0, 1, 1, 1, 1, 1, 1, 1 );
var segment_D = Array( 1, 0, 1, 1, 0, 1, 1, 0, 1, 1 );
var segment_E = Array( 1, 0, 1, 0, 0, 0, 1, 0, 1, 0 );
var segment_F = Array( 1, 0, 0, 0, 1, 1, 1, 0, 1, 1 );
var segment_G = Array( 0, 0, 1, 1, 1, 1, 1, 0, 1, 1 );
var segment_K = Array( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );

function setDigit( n ) {
    StaticIO.Channel0.DIO[0].checked = segment_A [ n ];
    StaticIO.Channel0.DIO[1].checked = segment_B [ n ];
    StaticIO.Channel0.DIO[2].checked = segment_C [ n ];
    StaticIO.Channel0.DIO[3].checked = segment_D [ n ];
    StaticIO.Channel0.DIO[4].checked = segment_E [ n ];
    StaticIO.Channel0.DIO[5].checked = segment_F [ n ];
    StaticIO.Channel0.DIO[6].checked = segment_G [ n ];
    StaticIO.Channel0.DIO[7].checked = segment_K [ n ];
}

function setNone( ) {
    StaticIO.Channel0.DIO[0].checked = 0;
    StaticIO.Channel0.DIO[1].checked = 0;
    StaticIO.Channel0.DIO[2].checked = 0;
    StaticIO.Channel0.DIO[3].checked = 0;
    StaticIO.Channel0.DIO[4].checked = 0;
    StaticIO.Channel0.DIO[5].checked = 0;
    StaticIO.Channel0.DIO[6].checked = 0;
    StaticIO.Channel0.DIO[7].checked = 0;
}


while ( 1 ) {

    currentTime = new Date();

    hours_H = currentTime.getHours()  / 10;
    hours_L = currentTime.getHours() %10;
    minutes_H = Math.floor( currentTime.getMinutes() / 10 );
    minutes_L = currentTime.getMinutes() % 10;
    seconds_H = Math.floor( currentTime.getSeconds() / 10 );
    seconds_L = currentTime.getSeconds() % 10;

    //debug
    print (
        currentTime.getHours() + ":" +currentTime.getMinutes() + ":" + currentTime.getSeconds() +
        " -> " +
        hours_H + " | " + hours_L + "|" +
        minutes_H + " | " + minutes_L + " | " +
        seconds_H + " | " + seconds_L
    );

    setDigit( hours_H );   wait( 0.2 );    setNone();
    wait( 0.1 );
    setDigit( hours_L);    wait( 0.2 );    setNone();
    wait( 0.4 );
    setDigit( minutes_H ); wait( 0.2 );    setNone();
    wait( 0.1 );
    setDigit( minutes_L);  wait( 0.2 );    setNone();

    wait( 0.8 );



Dobór czasu aktywności wyświetlacza (błysku cyfry) to jest sprawa otwarta, regulowałam to na przysłowiowe oko (dosłownie!) aż odczyt był w miarę jednoznaczny i dało się rozróżnić godziny od minut.

Na koniec filmik dokumentalny oraz mała galeria z prac na tą zabawką.

https://youtu.be/6SKU-awa3AQ

IMG_5499.JPG
IMG_5501.JPG
IMG_5502.JPG
IMG_5504.JPG
IMG_5505.JPG
IMG_5506.JPG
IMG_5507.JPG
IMG_5508.JPG
IMG_5509.JPG
IMG_5510.JPG
IMG_5511.JPG
IMG_5512.JPG

IMG_5513.JPG
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
______________________________________________ ____ ___ __ _ _ _ _
Kończysz tworzyć dopiero, gdy umierasz. (Marina Abramović)

SuperGość
Uber Geek
Uber Geek
Posty: 2346
Rejestracja: piątek 04 wrz 2015, 09:03

Re: [AD2] Analog Discovery 2 jako jednocyfrowy zegarek

Postautor: SuperGość » wtorek 28 lut 2017, 10:58

dobra robota nic tylko sobie zapisuje te odnosniki :)

Awatar użytkownika
dambo
Expert
Expert
Posty: 645
Rejestracja: czwartek 17 mar 2016, 17:12

Re: [AD2] Analog Discovery 2 jako jednocyfrowy zegarek

Postautor: dambo » wtorek 28 lut 2017, 11:58

dzięki Tobie to będzie mój kolejny zakup za jakiś czas :) tylko czekać aż społeczność się rozrośnie i będzie wysyp tego typu projektów
Nowy blog o tematyce embedded -> https://www.embedownik.pl/


Wróć do „Przyrządy pomiarowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości