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
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