logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Rozwiązano] Atmega32 - Jak wyświetlić co ile jest podawany impuls

ziguś 08 Maj 2014 16:41 1020 12
REKLAMA
  • #1 13582077
    ziguś
    Poziom 23  
    Witam
    Proszę o pomoc bo sam nie mogę nic wymyślić.
    Atmega32 generuje mi impulsy przy pomocy takiego programiku.
    Kwarc 16Mhz, prescaler 256

    Load Timer0 = 250
    Incr Impuls_pompy
    If Impuls_pompy = 90 Then
    Impuls_pompy=0
    Pompa = 1 : Waitms 50 : Pompa = 0
    End If

    i miernik częstotliwości pokazuje częstotliwość 2,41706 Hz. Licząc ze wzoru T=1/f wynika że impuls jest podawany co 413,72577ms.

    Jak to obliczyć (jaki wzór) żeby ta wartość (413,72577) była pokazana na wyświetlaczu ?

    Wartość impulsu pompy i waitms będzie zmieniana na różne wartości. Za cholerę nie mogę dojść do tego jak tę wartość wyliczyć.

    Na wyświetlaczu ma się pokazać co ile jest podawany impuls.
  • REKLAMA
  • #2 13582106
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #3 13582145
    ziguś
    Poziom 23  
    Wolałbym to wyliczyć bo inne timery będą mi potrzebne. Wartości będą zadawane ręcznie dwoma przyciskami + / - / OK. Będzie się zmieniać częstotliwość impulsów i czas trwania impulsu , moje waitms będzie zastąpione zmienną.
    Jak ten czas obliczyć, wg. jakiego wzoru ?
    Licząc :

    16000000 / 256 / 250 / 90 = 2,777777778 Hz

    a miernik pokazuje 2,41706 Hz

    gdzie i jak wstawić do tego wzoru moje 50ms ?
  • #4 13582932
    Konto nie istnieje
    Konto nie istnieje  
  • #5 13582963
    ziguś
    Poziom 23  
    "heniuś" myślę że to powinno wystarczyć


    $regfile = "m32def.dat"
    $crystal = 16000000 ' kwarc zewnętrzny 16MHz

    Pompa Alias Portc.3

    Config Timer0 = Timer , Prescale = 256
    On Timer0 Sterowanie_pompy
    Load Timer0 = 250
    Enable Interrupts

    Dim Impuls_pompy As Word
    Dim Impuls_zadany As Word
    Impuls_zadany = 90
    Dim Czas_impulsu As Byte
    Czas_impulsu = 50

    Sterowanie_pompy:

    Load Timer0 = 250
    Incr Impuls_pompy
    If Impuls_pompy = Impuls_zadany Then
    Impuls_pompy = 0
    Pompa = 1 : Waitms Czas_impulsu : Pompa = 0
    End If : End If

    Return

    Start_pompy:
    Do

    If Up = 0 And Menu = 1 Then : Waitms 50 : If Up = 0 And Menu = 1 Then
    Incr Impuls_zadany
    End If : End If

    If Dn = 0 And Menu = 1 Then : Waitms 50 : If Dn = 0 And Menu = 1 Then
    Decr Impuls_zadany
    End If : End If

    If Up = 0 And Menu = 0 Then : Waitms 50 : If Up = 0 And Menu = 0 Then
    Incr Czas_impulsu
    End If : End If

    If Dn = 0 And Menu = 0 Then : Waitms 50 : If Dn = 0 And Menu = 0 Then
    Decr Czas_impulsu
    End If : End If

    Loop
  • REKLAMA
  • #6 13583029
    Konto nie istnieje
    Konto nie istnieje  
  • #7 13583089
    ziguś
    Poziom 23  
    load timer0=250 to jest wartość początkowa timera
  • REKLAMA
  • #8 13583200
    Konto nie istnieje
    Konto nie istnieje  
  • #9 13583309
    ziguś
    Poziom 23  
    heniuś Ale przecież to chodzi. Diodka mruga. Czas trwania impulsu i częstotliwość tych impulsów pięknie się przyciskami reguluje. Czy ty wogóle czytałeś temat od początku ?

    Pytanie brzmi:

    Jakie obliczenia zastosować żeby wyświetlacz wyświetlił np. w sekundach lub milisekundach co ile pojawia się impuls.
  • #10 13583370
    Konto nie istnieje
    Konto nie istnieje  
  • #11 13583383
    ziguś
    Poziom 23  
    Gdybym wiedział gdzie jest błąd w obliczeniach nie prosiłbym o pomoc. Dzisiaj już nie mam głowy. Posiedzę nad tym jutro.
  • Pomocny post
    #12 13583459
    Konto nie istnieje
    Konto nie istnieje  
  • #13 13585079
    ziguś
    Poziom 23  
    Heniuś wszystko gra. Fusebity były dobrze ustawione. Problem tkwił w zapisie Load Timer0 = 250 , a ma być tak jak napisałeś Load Timer0 , 250. Wtedy wystarczy od obliczeń odjąć stałą wartość ( 3,97327) i wtedy zgadza się wartość wyliczona i zmierzona. Dokładność do 0,01ms - co mi w zupełności wystarcza.

    Dziękuję za pomoc. :angel: Kliknąłem pomógł.
REKLAMA