Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

pomiar czasu impulsu VHDL WEB ISE

mototest 17 Sty 2011 16:51 3466 33
  • #1 17 Sty 2011 16:51
    mototest
    Poziom 19  

    Witam kolegów

    nie mogę sobie poradzić z pomiarem czasu impulsu na wejściu
    a dokładnie potrzebuję zmierzyć ile impulsów zegarowych mieści się podczas trwania zera w przebiegu prostokątnym (jak na rysunku).

    robię to tak jak poniżej , ale nie działa, wydaje mi się,że zmienna czas1 nie jest liczona ,lub źle zerowana.
    ma być tak ,że jak jest więcej impulsów zegara niż 5 to oświeca LED , jak mniej to gasi.
    co robię źle ?



    Code:


    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;

    entity listing is
        Port ( wejscie : in  STD_LOGIC;
               LED: out  STD_LOGIC;
               clk : in  STD_LOGIC;
               
    end listing;

    architecture Behavioral of listing is

     begin


    U1: process(wejscie)
    variable czas1 : integer range 0 to 100 :=0;

    begin

    while  wejscie = '0' loop

    while clk ='0' loop

    end loop;

    while clk ='1' loop

    end loop;
    czas1 := czas1 + 1 ;
    end loop;


    if czas1 < 5 then
    LED <= '0';
    else
    LED <= '1';
    czas1 :=0;
    end if;

    end process U1;

    end Behavioral;


    pomiar czasu impulsu VHDL WEB ISE

    0 29
  • #2 17 Sty 2011 17:41
    tymon_x
    Poziom 30  

    Nie cię Bóg rozgrzeszy za używanie while'ów w tym wypadku!

    Code:
    library IEEE; 
    
    use IEEE.STD_LOGIC_1164.ALL;
    use IEEE.std_logic_arith.ALL;

    entity listing is
    generic(N : POSITIVE := 7);
        Port ( wejscie   : in  STD_LOGIC;
               LED         : out  STD_LOGIC;
               clk       : in  STD_LOGIC);           
    end listing;

    architecture Behavioral of listing is
    signal wartosc_aktualna : std_logic_vector(N-1 downto 0) := (others => '0');
    begin

    U1: process(clk, wejscie) is
    variable licz_clk : integer range 0 to 2**N-1; --nie trzeba, przyjmuje wartosć pierwsza za początkową
    begin
       if rising_edge(clk) then
          if wejscie = '0' then
             licz_clk := licz_clk + 1;               
          else
             if licz_clk /= 0 then wartosc_aktualna <= CONV_STD_LOGIC_VECTOR(licz_clk, N); end if;
             licz_clk := 0;
          end if;
       end if;
    end process U1;

    end Behavioral;

    Pisane na kolanie (; Wektor wartosc_aktualna do wykorzystania w innym dowolnym procesie...

    0
  • #3 17 Sty 2011 18:18
    mototest
    Poziom 19  

    dzięki, jutro będę testował, nigdy bym na to nie wpadł, zbyt skomplikowane jak na mój obecny poziom, mam naleciałości z procesorów stąd while :)

    0
  • #4 17 Sty 2011 18:22
    tymon_x
    Poziom 30  

    mototest napisał:
    dzięki, jutro będę testował, nigdy bym na to nie wpadł, zbyt skomplikowane jak na mój obecny poziom, mam naleciałości z procesorów stąd while :)

    Jak będziesz miał pytanie do któreś z części wal śmiało (;

    And always remember:
    Code:
    U1: process(clk, klucz) is 
    
    begin
       if rising_edge(clk) then    -- <<--PODSTAWA!
          if klucz = '0' then      -- <<--opcjonalne
                 
          else

          end if;
       end if;
    end process U1;

    Zawsze tak buduj procesy, może być bez klucz. Ważne, żeby uzależnić proces od zegara! (proces synchroniczny)

    0
  • #5 17 Sty 2011 19:24
    mototest
    Poziom 19  

    1) co w zasadzie ma na celu stosowanie GENERIC ?, bo w książkach które mam jest to kompletnie niejasno opisane i co to znaczy "generic(N : POSITIVE := 7);"
    2) "wartoc_aktualna" to jest tak jakby zmienna globalna w tym przypadku i jej stan aktualny widzą wszystkie procesy ? nie kasuje się sama ?

    Dodano po 5 [minuty]:

    3) use IEEE.std_logic_arith.ALL; używam zawsze gdy jest jakieś działanie matematyczne ?

    Dodano po 43 [minuty]:

    potem będę miał jeszcze małe rozszerzenie tego listingu, bo potrzebuję docelowo zmierzyć czas dwóch takich impulsów następujących po sobie o różnej długości i porównać je na końcu który dłuższy i już widzę ,że nie wiem jak rozdzielić programowo te dwie pętle, ze zliczaniem cykli zegara dla pierwszego i drugiego impulsu (żeby program czekał na następny impuls) , w procku zrobiłbym do loop i po problemie a tu ??

    0
  • #6 17 Sty 2011 19:51
    tymon_x
    Poziom 30  

    mototest napisał:
    1) co w zasadzie ma na celu stosowanie GENERIC ?, bo w książkach które mam jest to kompletnie niejasno opisane i co to znaczy "generic(N : POSITIVE := 7);"
    2) "wartoc_aktualna" to jest tak jakby zmienna globalna w tym przypadku i jej stan aktualny widzą wszystkie procesy ? nie kasuje się sama ?
    3) use IEEE.std_logic_arith.ALL; używam zawsze gdy jest jakieś działanie matematyczne ?

    Odpowiedź znajdziesz tu: Kompedium wiedzy na temat CPLD/FPGA :D

    W skrócie:
    1) Łatwa zmiana parametrów (np. długości wektora), w innym pliku *.vhd korzystasz z tego komponentu (component) i nie pasuje Ci wektor, więc robisz generic zmieniasz N, jeśli podasz component bez generic, przyjmie wartość domyślną (w tym wypadku N=7 (; )

    2)Widzi w danej architekturze (w tym pliku *.vhd), czyli wszystko co jest w tej architekturze, ale nie poza nią! Nie kasuje się :P To tylko druciki...

    3)Ta biblioteka zawiera pożyteczną funkcje konwertującą: CONV_STD_LOGIC_VECTOR(ARG: INTEGER; SIZE: INTEGER) z pakietu standardowego IEEE.

    mototest napisał:
    potem będę miał jeszcze małe rozszerzenie tego listingu, bo potrzebuję docelowo zmierzyć czas dwóch takich impulsów następujących po sobie o różnej długości i porównać je na końcu który dłuższy i już widzę ,że nie wiem jak rozdzielić programowo te dwie pętle, ze zliczaniem cykli zegara dla pierwszego i drugiego impulsu, w procku zrobiłbym do loop i po problemie a tu ??

    Teraz Cię zagnę, wystarczy jedną linijkę dopisać (;

    Code:
    if licz_clk /= 0 then 
    
          wartosc_poprzednia <= wartosc_aktualna;
          wartosc_aktualna <= CONV_STD_LOGIC_VECTOR(licz_clk, N);
    end if;

    A poza procesem (część współbieżna)

    Code:
    porownaj <= '0' when wartosc_poprzednia > wartosc_aktualna else '1';

    Resztę wklej i dopisz brakujące części sam (;

    0
  • #7 17 Sty 2011 20:00
    mototest
    Poziom 19  

    haha , nieźle, proste ale czasem trudno na to wpaść,
    czy porównanie czasów MUSI być poza procesem ??
    ma to jakieś znaczenie ?

    0
  • #8 17 Sty 2011 20:08
    tymon_x
    Poziom 30  

    mototest napisał:
    haha , nieźle, proste ale trudno na to wpaść,
    czy porównanie czasów MUSI być poza procesem ??
    ma to jakieś znaczenie ?

    Może też być tak w innym procesie:
    Code:
    U2: process(wartosc_poprzednia, wartosc_aktualna) is 
    
    begin
       if wartosc_poprzednia > wartosc_aktualna then
          porownaj <= '0';
       else
          porownaj <= '1';
       end if;
    end process U2;

    Ale musi być poza, wartość za pomocą przypisania <=, aktualizuje dopiero po wyjściu z procesu, nie w trakcie! (zapamiętaj!) To jest jeden z poważnych błędów w toku myślowym...

    Najlepiej sam przetestuj... warunek porównania w środku U1 i ten poza i zobacz symulacje.

    0
  • #9 17 Sty 2011 20:14
    mototest
    Poziom 19  

    powiedz jeszcze jak pomnożyć "wartosc_aktualna" przez 2
    wartosc_aktualna = wartosc_aktualna *2; (bo jak tak napiszę to jest error)
    ponieważ muszę sprawdzić czy czas drugiego impulsu jest co najmniej dwukrotnie dłuższy ,

    0
  • #10 17 Sty 2011 20:23
    tymon_x
    Poziom 30  

    mototest napisał:
    powiedz jeszcze jak pomnożyć "wartosc_aktualna" przez 2
    wartosc_aktualna = wartosc_aktualna *2; (bo jak tak napiszę to jest error)
    ponieważ muszę sprawdzić czy czas drugiego impulsu jest co najmniej dwukrotnie dłuższy ,

    Code:
    wartosc_aktualna = wartosc_aktualna(N-2 downto 0) & '0';

    Po polsku, przesuwasz o jeden bit w lewo (rejestr, wybierasz N-1 najmłodszą część z N wektora) i doklejasz (&) na końcu zero.
    Ważne żeby długość się zgadzała:
    Code:
    N_bit_wektor = N-1_bit_wektor & 1_bit;

    0
  • #11 17 Sty 2011 20:40
    mototest
    Poziom 19  

    nieco to skomplikowałeś, ale pomnożyć przez 3 to już chyba totalna komplikacja...
    Ok, pójdźmy dalej ;) teraz jak mamy porównane impulsy to chciałbym oświecić LED przykładowo na piątym impulsie po szerokim impulsie na "wejściu" , czy mam zrobić kolejny proces tylko z listą czułości process(wejście) i tam oczekiwać zboczy sygnału "wejście" ? bo potem sygnał zegarowy mnie już nie interesuje.

    pomiar czasu impulsu VHDL WEB ISE

    0
  • #12 17 Sty 2011 20:46
    tymon_x
    Poziom 30  

    mototest napisał:
    nieco to skomplikowałeś, ale pomnożyć przez 3 to już chyba totalna komplikacja...

    Co Ty gadasz:
    Code:
    wartosc_aktualna <= wartosc_aktualna(N-3 downto 0) & "00";

    W wersji C byś zapisał tak:
    Code:
    wartosc_aktualna = wartosc_aktualna << 2; //mnożenie razy 3
    8-)

    mototest napisał:
    Ok, pójdźmy dalej ;) teraz jak mamy porównane impulsy to chciałbym oświecić LED przykładowo na piątym impulsie po szerokim impulsie na "wejściu", czy mam zrobić kolejny proces tylko z listą czułości process(wejście) i tam oczekiwać zboczy sygnału "wejście" ? bo potem sygnał zegarowy mnie już nie interesuje.

    Narysuj, bo nie zrozumiałem (;

    0
  • #13 17 Sty 2011 20:54
    mototest
    Poziom 19  

    tak myślałem ,że napisałem niezrozumiale :) ale łudziłem się
    z reguły nie używam przesunięć do mnożenia/dzielenia więc nie przychodzi mi to łatwo . rysunek dołączyłem do poprzedniego postu

    0
  • #14 17 Sty 2011 20:56
    tymon_x
    Poziom 30  

    mototest napisał:
    tak myślałem ,że napisałem niezrozumiale :) ale łudziłem się
    z reguły nie używam przesunięć do mnożenia/dzielenia więc nie przychodzi mi to łatwo . rysunek dołączyłem do poprzedniego postu

    Wracając do tego poprzedniego postu:
    Proces, a sygnał wejscie jako zegar tego procesu i tyle...

    0
  • #15 17 Sty 2011 21:07
    mototest
    Poziom 19  

    no tak :) oczywiste dla Ciebie, dla mnie dopiero teraz :)
    jutro będę robił testy praktyczne, bo o tej porze nie mogę

    Dodano po 5 [minuty]:

    tylko jeszcze jedno , ten nowy proces musi się rozpocząć po wykryciu szerokiego impulsu , czy wystarczy jakiś globalny znacznik dodać i uzależnić liczenie w nowym procesie od znacznika ?

    Code:

    U2: process(wejscie)

    variable licz_clk : integer range 0 to 2**N-1; 
    begin

    if znacznik =1 then
    if rising_edge(wejscie) then
         
             licz_clk := licz_clk + 1;               
         if licz_clk = 5 then
    znacznik=0;
    end if;
    end if;
    ----------------------------------------------------
    end process U2;

    0
  • #16 17 Sty 2011 21:18
    tymon_x
    Poziom 30  

    mototest napisał:
    tylko jeszcze jedno , ten nowy proces musi się rozpocząć po wykryciu szerokiego impulsu , czy wystarczy jakiś globalny znacznik dodać i uzależnić liczenie w nowym procesie od znacznika ?

    Tylko niech wyzeruje ten znacznik po skończeniu liczenia i zrobieniu tego co ma zrobić. Takie coś jak jest w uC zrobione, zgłasza przerwanie, wchodzisz i zerujesz znacznik od żądania obsługi(; Bo przeciwnym wypadku wyjdzie Ci One Pulse Mode :P

    Bardziej tak:
    Code:
    U2: process(wejscie) 
    
    variable licz_clk : integer range 0 to 5;
    begin
    --------------------------pierwszy ząb------------

    if rising_edge(wejscie) then
    if znacznik = '1' then     

       licz_clk := licz_clk + 1;   

       if licz_clk  = 5 then       
           licz_clk := 0;
           znacznik <= '0';
           --coś tam dalej
       end if;

    end if;
    end if;
    ----------------------------------------------------
    end process U2;

    0
  • #17 17 Sty 2011 21:28
    mototest
    Poziom 19  

    no właśnie byłem w trakcie poprawiania, ale mnie uprzedziłeś, mimo to parę błędów jeszcze zrobiłem składniowych

    0
  • #18 17 Sty 2011 21:33
    tymon_x
    Poziom 30  

    mototest napisał:
    no właśnie byłem w trakcie poprawiania, ale mnie uprzedziłeś, mimo to parę błędów jeszcze zrobiłem składniowych

    :D
    Code:
    if rising_edge(wejscie) then 
    
           if znacznik = '1' then   

    A tym:
    Code:
    if znacznik = '1' then
    
           if rising_edge(wejscie) then

    Jest różnica, stosuj to pierwsze.

    0
  • #19 17 Sty 2011 21:39
    mototest
    Poziom 19  

    aha, znowu zapomniałem, że zegar ma być pierwszy...
    może kiedyś mi to wejdzie w krew
    na dzisiaj dzięki, odezwę się jutro.

    0
  • #20 17 Sty 2011 21:51
    tymon_x
    Poziom 30  

    mototest napisał:
    aha, znowu zapomniałem, że zegar ma być pierwszy...
    może kiedyś mi to wejdzie w krew

    Taka uwaga sprzętowa, ten drugi zapis stosuje się jako clock_enable (włącz zegar):
    Code:
    dceff: process (clk) is
    
    begin
      clock_enable  = '1' then
        if rising_edge(clk) then
          q <= d;
        end if;
      end if;
    end process dceff;

    Ale tylko pod warunkiem, że w układzie programowalnym jest wyraźnie napisane, że taki posiada! W przeciwnym wypadku powstają szpilki i hazardy. Bezpieczniejsza forma:
    Code:
    dceff: process (clk) is
    
    begin
    if rising_edge(clk) then
      clock_enable = '1' then --synchroniczny clock_enable
          q <= d;
        end if;
      end if;
    end process dceff;

    0
  • #21 18 Sty 2011 15:57
    mototest
    Poziom 19  

    nie do końca mi to działa w praktyce, na razie chodzi o pierwszą cześć, czyli włączanie LED (na zatrzask) gdy jest powyżej 5 impulsów zegara na niskim stanie wejścia,
    pojawiają się jakieś hazardy na wyjściu, popatrz na wykres (żółty to wejście , zielony wyjście LED, zegara nie widać bo mam tylko 2 kanały), powinien być ciągle stan niski na wyjściu (LED),
    co może być powodem, impulsy zakłócające na wyjściu pojawiają dość rzadko co 50 do 200ms losowo, zegar nie powoduje zakłóceń , przynajmniej na oscyloskopie nie widzę.
    w drugą stronę gdy stan na wyjściu ma być wysoki, też się robi to samo, ale chyba rzadziej, wykres drugi.
    I jeszcze zauważyłem że te hazardy mają jednakową szerokość w stosunku do sygnału wejściowego (wykres 3)

    listing:

    Code:

    architecture Behavioral of listing is

    signal wartosc_aktualna : std_logic_vector(N-1 downto 0) := (others => '0');
    signal wartosc_poprzednia : std_logic_vector(N-1 downto 0) := (others => '0');
    signal znacznik : STD_LOGIC :='0';
     begin

    --*****************************************************************
    U1: process(wejscie,clk)

    variable licz_clk : integer range 0 to 2**N-1;
    begin
    ----------------------------------------------
    if falling_edge(clk) then
          if wejscie = '1' then
             licz_clk := licz_clk + 1;               
          else
             if licz_clk /= 0 then wartosc_aktualna <= CONV_STD_LOGIC_VECTOR(licz_clk, N); end if;
             licz_clk := 0;
          end if;
    end if;
    ----------------------------------------------------
    end process U1;
    --******************************************************************

    U3: process(wartosc_poprzednia, wartosc_aktualna) is
    begin
      if wartosc_aktualna > "0000101" then --jeśli większa od 5
         znacznik <= '0';
       else
         znacznik <= '1'; 
     end if;
    end process U3;

    LED<= znacznik;
    end Behavioral;


    pomiar czasu impulsu VHDL WEB ISE

    pomiar czasu impulsu VHDL WEB ISE





    pomiar czasu impulsu VHDL WEB ISE

    Dodano po 4 [godziny] 15 [minuty]:

    poszedłem dalej i próbuję wykryć ten szeroki impuls według listingu który zasugerowałeś czyli do procesu U1 dodałem :
    Code:

    if licz_clk /= 0 then
          wartosc_poprzednia <= wartosc_aktualna; 
          wartosc_poprzednia <= wartosc_poprzednia(N-1 downto 0) & '0';-- mnożenie przez 2
          wartosc_aktualna <= CONV_STD_LOGIC_VECTOR(licz_clk, N);
          
    end if;

    wartosc_poprzednia mnożę przez 2 żeby sprawdzić czy wartość aktualna jest dłuższa co najmniej dwukrotnie od wartosc_poprzednia , dlatego że szeroki impuls jest trzykrotnie dłuższy od normalnego, bo niem mam koncepcji jak inaczej zmierzyć czy impuls jest co najmniej dwukrotnie dłuższy, ale stosuję to w procesorach i działa ok.

    i zmieniłem proces U3


    Code:

    U3: process(wartosc_poprzednia, wartosc_aktualna) is
    begin
      if wartosc_aktualna > wartosc_poprzednia then
       LED<= '1';
        else
    LED<= '0';
     end if;
    end process U3;


    i widzę ,że coś źle wylicza długość impulsu, widzisz gdzieś błąd ?
    w tym listingu generuje przebieg jak poniżej, czyli ciągle jakby na przemian widział wartość aktualną z poprzednią, generuje sygnał na wyjściu LED identyczny jak na wejściu, ale z lekką zmianą w okolicach szerokiego impulsu...
    Założenie jest takie ,żeby po szerokim impulsie na wyjściu LED pojawił się impuls np. szerokości niskiego stanu zegara ,lub jakikolwiek impuls dla testu, ale tylko jeden impuls, nie wiem jak to zatrzasnąć ,żeby nie generował ciągle prostokąta.

    pomiar czasu impulsu VHDL WEB ISE

    0
  • #22 18 Sty 2011 16:19
    tymon_x
    Poziom 30  

    mototest napisał:
    pojawiają się jakieś hazardy na wyjściu, popatrz na wykres (żółty to wejście , zielony wyjście LED, zegara nie widać bo mam tylko 2 kanały),

    Jakie hazardy znowu? Wartosc_aktualna jest synchronizowany zegarem. Układ kombinacyjny Twojego komparatora, nie ma prawa wprowadzać takiego opóźnienia, bo jest zbyt mały (w dodatku synteza sama się troszczy żeby opóźnienie propagacyjne było jak najmniejsze). Wniosek końcowy: sygnał LED jest synchronizowany z opadającym zboczem zegara. Puść Sobie zegar i LED na oscyloskop, a zobaczysz. Fragment symulacji o co kamam:
    pomiar czasu impulsu VHDL WEB ISE

    EDIT.
    Code:
             if licz_clk /= 0 then 
    
                wartosc_poprzednia <= wartosc_aktualna(N-2 downto 0) & '0';
                wartosc_aktualna <= CONV_STD_LOGIC_VECTOR(licz_clk, N);
             end if;

    Z tego co zaprezentowałeś, nie miało sensu, ponieważ wartosc_poprzednia będzie równa ZERO.
    0 <= 0*3;
    0 <= 0*3; itd.

    Zmienia się tylko wartość_aktualna.

    Może inaczej:
    Code:
    wartosc_poprzednia <= wartosc_aktualna;  
    
    wartosc_poprzednia <= wartosc_poprzednia(N-1 downto 0) & '0';-- mnożenie przez 2
    wartosc_aktualna <= CONV_STD_LOGIC_VECTOR(licz_clk, N);

    To jest równoważne z wyjściu z procesu:
    Code:
    wartosc_poprzednia <= wartosc_poprzednia(N-1 downto 0) & '0';-- mnożenie przez 2 
    
    wartosc_aktualna <= CONV_STD_LOGIC_VECTOR(licz_clk, N);

    Mam nadzieje, że teraz widzisz.

    0
  • #23 18 Sty 2011 16:41
    mototest
    Poziom 19  

    chodzi ci o taką synchronizacje ? :

    Code:

    U3: process(wartosc_poprzednia, wartosc_aktualna,clk) is
    begin
    if clk = '0' then
      if wartosc_aktualna > wartosc_poprzednia then
       LED<= '1';
        else
    LED<= '0';
     end if;
    end if;
    end process U3;

    przebieg się nie zmienia, chodzi o ten ostatni przebieg gdzie jest prostokąt na wyjściu

    0
  • #24 18 Sty 2011 16:43
    tymon_x
    Poziom 30  

    mototest napisał:
    chodzi ci o taką synchronizacje ? :
    Code:

    U3: process(wartosc_poprzednia, wartosc_aktualna,clk) is
    begin
    if clk = '0' then
      if wartosc_aktualna > wartosc_poprzednia then
       LED<= '1';
        else
    LED<= '0';
     end if;
    end if;
    end process U3;

    przebieg się nie zmienia, chodzi o ten ostatni przebieg gdzie jest prostokąt na wyjściu

    :|
    Spójrz na obrazek, który umieściłem i wyciągnij wnioski.

    0
  • #25 18 Sty 2011 16:50
    mototest
    Poziom 19  

    za mało tego widzę i nie mogę wyciągnąć wniosków,
    musiałbym widzieć wąski i szeroki impuls obok siebie, nie wiem czy trafię na Twój tok myślenia :)

    0
  • #26 18 Sty 2011 16:52
    tymon_x
    Poziom 30  

    mototest napisał:
    za mało tego widzę i nie mogę wyciągnąć wniosków,
    musiałbym widzieć wąski i szeroki impuls obok siebie, nie wiem czy trafię na Twój tok myślenia :)

    Pytałeś o hazardy, to Ci wytłumaczyłem że nie ma hazardów, tylko sygnał LED jest synchronizowany zboczami z Twoim zegarem... Dlatego Ci się zdaje, że są :P

    0
  • #27 18 Sty 2011 16:58
    mototest
    Poziom 19  

    ale w którym miejscu na listingu jest synchronizowany LED zegarem ?
    z tego co widzę do tylko pomiar czasu impulsu jest synchronizowany zegarem

    0
  • #28 18 Sty 2011 17:01
    tymon_x
    Poziom 30  

    mototest napisał:
    ale w którym miejscu na listingu jest synchronizowany LED zegarem ?
    z tego co widzę do tylko pomiar czasu impulsu jest synchronizowany zegarem

    Wszystko :D
    Wartosc_aktualna i wartosc_poprzednia chodzą w tryb zegara. Zmiana następuje w tryb zegara.
    Code:
    U3: process(wartosc_poprzednia, wartosc_aktualna) is 
    
    begin
      if wartosc_aktualna > wartosc_poprzednia then
       LED<= '1';
        else
    LED<= '0';
     end if;
    end process U3;

    Proces działa jak nastąpi zmiana sygnału na liście czułości,...
    Wnioski się same wyciągają :D

    0
  • #29 18 Sty 2011 17:04
    mototest
    Poziom 19  

    czyli to ma być poza procesem ,w części współbieżnej ? czy jakiś proces bez listy czułości

    0
  • #30 18 Sty 2011 17:08
    tymon_x
    Poziom 30  

    mototest napisał:
    czyli to ma być poza procesem ,w części współbieżnej ?

    hę?
    Odpal Sobie symulacje w Isim, ustaw Sobie przebiegi, popatrz, zastanów się przez chwilę, ...

    Aż sam Siebie zacytuje:
    tymon_x napisał:
    Wartosc_aktualna i wartosc_poprzednia chodzą w tryb zegara.

    Chyba nie wymaga dalszego komentarza. Sygnał wejscie jest sygnałem asynchronicznym, liczysz synchroniczne z zegarem, zmieniasz wartosc_aktualna i wartosc_poprzednia z zegarem, ...

    0
  Szukaj w 5mln produktów