Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

stoper

PIOTR111 21 Oct 2004 09:39 1445 2
  • #1
    PIOTR111
    Level 16  
    Witam
    Czy ktoś może rzucić okiem na moje wypociny i powiedzieć mi
    Dlaczego wyświetlacze świecą słabo
    Cały układ działa poprawnie jest tylko problem z jasnością led
    Proszę o jakąś podpowiedż
    PIOTR
    '--------------------------------------------------------------
    ' uklad sprawdzony praktycznie 2004.10.18

    '--------------------------------------------------------------
    ' Timer czterocyfrowy z kwarcem 12Mhz

    ' Połączenia wyświetlacza multipleksowanego:
    'a = P1.0 f = P1.5 0,1_sek - P3.7
    'b = P1.1 g = P1.6 jed_sek - P3.5
    'c = P1.2 dzies_min - P3.4
    'd = P1.3 jed_min P3.3
    'e = P1.4
    '--------------------------------------------------------------

    Dim T250us As Byte , T2ms As Byte , T4ms As Byte , T100ms As Byte
    Dim Jedsek As Byte , Dziesek As Byte , Jedmin As Byte
    Dim Mux As Byte , Mux1 As Byte , Wygasz As Bit , Wysw As Byte

    $crystal = 12000000
    Config Timer0 = Timer , Gate = Internal , Mode = 2
    Load Timer0 , 250 'okres Timera0 250 * 12 * fosc 250us przy X=12MHz




    Enable Interrupts
    Enable Timer0
    Start Timer0

    T250us = 0 'będzie zliczał 0...8 co 250us
    T2ms = 0 'będzie zliczał 0...2 co 2ms
    T4ms = 0 'bedzie zliczał 0...25 co 4ms
    T100ms = 0 'bedzie zliczał 0...10 co 100ms
    Jedsek = 0 'licznik jednostek sekund 0...9
    Dziesek = 0 'licznik dziesiatek sekund 0...5
    Jedmin = 0 'licznik jednostek minut 0...9
    Mux = 0 ' licznik multipleksowy
    Wygasz = 0 'wskaźnik wygaszania wyświetlacza
    P1 = 255 'wyłaczenie segmentów
    P3.2 = 1 'na wszelki wypadek

    On Timer0 Timer_przerw 'przerwanie od timera co 333us

    'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

    Do ' - kreci się w kółka
    '
    Loop
    End

    'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    Timer_przerw:

    Incr T250us
    If T250us = 8 Then
    T250us = 0
    '''''''''''''''''' 'po zliczeniu 8 "przerwań" czyli 2ms - obsługa wyświetlacza
    'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    If P3.2 = 0 Then 'uruchamia proces zliczania czasu
    'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    Incr T2ms 'to wszystko dalej wykonywane co 2ms
    If T2ms = 2 Then
    T2ms = 0

    Incr T4ms 'to wszystko dalej wykonywane co 4ms
    If T4ms = 25 Then
    T4ms = 0 ' to następuje co 0,1s
    Incr T100ms 'to wszystko dalej wykonywane co 0,1s
    If T100ms = 10 Then
    T100ms = 0
    Incr Jedsek ' to następuje co 1s
    If Jedsek > 9 Then
    Jedsek = 0 'wykonuje gdy upłynęło 10 sekund, podobnie następne liczniki
    Incr Dziesek
    If Dziesek > 5 Then
    Dziesek = 0
    Incr Jedmin
    If Jedmin > 9 Then
    Jedmin = 0

    End If
    End If
    End If
    End If
    End If
    End If
    End If
    Reset P3.7 : Reset P3.5 : Reset P3.4 : Reset P3.3 'co 2ms wygasza wszystkie wskaźniki
    Incr Mux 'co 2ms zmiększa wartość Mux
    If Mux > 4 Then Mux = 0 'zawsze liczy do czterech,


    Wygasz = Not Wygasz 'Zmienić Stan Wygasz Na Przeciwny co 2ms
    If Wygasz = 0 Then 'co 2ms sprawdza, któy wyśw ma świecić
    Select Case Mux
    Case 0: 'jeśli pierwszy z prawej
    Wysw = T100ms 'będą jednostki sekund
    Set P3.7 'zaświecony pierwszy z prawej wyświetlacz
    Case 1: 'drugi z prawej, i tak dalej
    Wysw = Jedsek
    Set P3.5
    Case 2:
    Wysw = Dziesek
    Set P3.4
    Case 3:
    Wysw = Jedmin
    Set P3.3
    End Select
    End If

    P1 = Lookup(wysw , Tabela) 'zamiana liczby dwójkowej z Wysw na wskazanie 7-segm wyświetlacza
    End If 'odnosi się do T250us
    Return 'powrót z przerwania do pętli
    'cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc

    Tabela:
    Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144 'dla liczb 0,1,2,3...9 - wspólna anoda
  • #2
    Xitami
    Level 29  
    zawsze wygaszasz wszystkie, a w co drugim takcie zapalasz, to główna przyczyna
    zmiana cyfry następuje kiedy t250us=0, zmienna wygasz zbędna
    gaszenie cyfr umieść zaraz przed case
  • #3
    PIOTR111
    Level 16  
    Dzięki za podpowiedż muszę to sprawdzić
    Pozdrawiam PIOTR