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

Problem z multipleksowym sterowaniem dwoma wys. 7seg.

Maryush 05 Lis 2009 12:30 1008 4
REKLAMA
  • #1 7218396
    Maryush
    Poziom 22  
    Witam,

    mam problem z programem, który napisałem. Chodzi o to, że jeśli w pętli głównej programu zwiększam wartość zmiennej o jeden i wprowadzam opóźnienie poleceniem
    "waitms", to nie jest ona w ogóle wyświetlana - na wyświetlaczach LED nic się nie zmienia. Z kolei, jeśli w programie głównym opóźnienie realizowane jest poleceniem "wait", to wówczas zmienna jest prezentowana poprawnie. Do sterowania multipleksowego wyświetlaczami LED wykorzystałem rejestr szeregowo-równoległy CD4094, uP to atmega8. Tak wygląda działający program:

    Cytat:
    Dim Dana2 As Byte
    Dim I2 As Byte
    'Dim A As Byte
    Dim X As Single
    Dim A As Byte , B As Byte
    Dim I As Byte
    Dim R As Byte
    Dim Nr_wys As Byte
    Dim T As Integer
    Dim Bd(9) As Byte
    Dim V As Byte
    Dim Q As Byte
    Dim S As Byte
    Dim D(8) As Byte
    Dim C(8) As Byte
    Dim O As Byte
    Dim H As Byte


    Clk_4094 Alias Portb.0
    Data_4094 Alias Portd.7
    Strobe_4094 Alias Portd.6
    W1 Alias Portc.3
    W2 Alias Portc.2

    Declare Sub Zapis_cyfry(cyfra As Byte)
    Config Timer0 = Timer , Prescale = 256
    On Timer0 Mwys
    Enable Interrupts
    Enable Timer0
    Load Timer0 , 125


    Config Portc.5 = Input
    Config Portb.0 = Output
    Config Portd.7 = Output
    Config Portd.6 = Output
    Config Portd.5 = Output
    Config Portc.3 = Output
    Config Portc.2 = Output
    Set Portc.5


    Reset Portb.0
    Reset Portd.7
    Reset Portd.6
    Set Portd.5
    H=11

    Do
    T = H
    Incr H
    Wait 1
    Loop
    End

    Sub Zapis_cyfry(cyfra As Byte)
    Dana2 = Lookup(cyfra , Wys)

    For I2 = 0 To 7
    Data_4094 = Dana2.i2

    Clk_4094 = 1
    Clk_4094 = 0
    Next I
    Strobe_4094 = 1
    Strobe_4094 = 0
    End Sub

    Mwys:

    Load Timer0 , 125

    Reset W1
    Reset W2
    X = T
    If X >= 10 Then
    X = X / 10
    A = X
    X = X - A
    X = X + 0.01
    X = X * 10
    B = X
    End If
    Select Case Nr_wys
    Case 0:
    Call Zapis_cyfry(a)
    Set W1
    Case 1:
    Call Zapis_cyfry(b)
    Set W2
    End Select
    Incr Nr_wys
    If Nr_wys = 2 Then
    Nr_wys = 0
    End If
    Return
    Wys:
    Data 2 , 158 , 36 , 12 , 152 , 72 , 64 , 30 , 0 , 8


    Wystarczy, że zamiast "wait 1" wpiszę "waitms 1000", to program już nie działa. Nie rozumiem o co chodzi, przecież te opóźnienia są równoznaczne?
  • REKLAMA
  • #2 7218444
    tomaszdjt
    Poziom 20  
    witam
    wydaje mi się że te opóźnienia nie sa jednoznaczne
    wait 1 to ok 1 sekundy
    a waitms chyba jest z zakresu 1-255 czyli nie to samo i u ciebie jak wpiszesz 1000 to i tak bedzie 255 ale nie jestem pewien
  • REKLAMA
  • REKLAMA
  • #4 7218776
    Freddy
    Poziom 43  
    tomaszdjt napisał:
    witam
    wydaje mi się że te opóźnienia nie sa jednoznaczne
    wait 1 to ok 1 sekundy
    a waitms chyba jest z zakresu 1-255 czyli nie to samo i u ciebie jak wpiszesz 1000 to i tak bedzie 255 ale nie jestem pewien

    To jak Ci się wydaje, a nie jesteś pewien, nie odpowiadaj.
    W instrukcji Waitms parametr może przyjmować wartości od 1 - 65535.
    Maryush :arrow: Zamiast instrukcji portx.y powinieneś używać pinx.y
    Usuń znak komentarza z instrukcji Dim A as byte.
REKLAMA