Jestem tu po raz pierwszy więc najpierw witam wszystkich :)
O ile multipleksowanie wyświetlaczy LED można opanować w dość prosty sposób, to już z ich regulacją jasności jest trochę inaczej. Generalnie gotowych kodów brak. Przynajmniej ja nie znalazłem. Przedstawiam prostą regulację świecenia wyświetlaczy.
Układ działa w przerwaniu Timera0 co 400us. Czas ten jest uzależniony od ilości cyfr i poziomów jasności. W poniższym układzie poziomów tych jest 10, co w wiekszości przypadków jest wystarczające. Cyfry wyświetlacza załączane są co 4ms. Regulowany jest tylko ich czas świecenia od 400us do 4ms z krokiem 400us. Czas ten uzalezniony jest od wartości zmiennej PW . Program można rozbudować o regulację jasności każdej cyfry osobno. Podobną regulację można zrobić z wykorzystaniem Timera1 i rejestru Compare. Zainteresowanym mogę udostepnić kod.
W programie wykorzystano fragmenty kodów Mirleya.
$regfile = "m8def.dat"
$crystal = 8000000
Config Portb = &B11111111 : Portb = &B11111111 ' segmenty
Config Portc = &B11111110 : Portc = &B11111111 'anody wyswietlacza
'Wyswietlacz ----------------------------------------------------------------------------------
Dim Mux As byte , W(4) As Byte
'Dzielnik Timera0------------------------------------------------------------------------------
Dim Mult As Byte
'PWM-------------------------------------------------------------------------------------------
Dim PW As byte, LedOff As Byte , Dzialka As Byte
Config Timer0 = Timer , Prescale = 64
Enable Timer0 : On Timer0 dzielnik
Enable Interrupts
w(1) = 249 'przykladowe wartości wyświetlacza
w(2) = 164
w(3) = 176
w(4) = 153
Do
Loop
End
Dzielnik: 'przerwanie co 400us (czas jednego kroku PWM)
Timer0 = 206
PW = 10 'wartość PWM (1 do 10)
If LedOff = 0 Then
incr Dzialka
If Dzialka = PW then 'jasność LED - wypełnienie
Dzialka = 0
Set LedOff
Portb = 255
End If
End If
Incr Mult 'częstotliowsć multipleksowania wyświetlaczy
If Mult = 10 Then
Mult = 0
Gosub Wyswietlacz 'skok co 4ms
End If
Return
Wyswietlacz:
Incr Mux
If Mux >4 Then Mux = 1
Select Case Mux
Case 1
Set portc.4
PORTb = w(1)
Reset portc.1
Case 2
Set portc.1
PORTb = w(2)
Reset portc.2
Case 3
Set portc.2
PORTb = w(3)
Reset portc.3
Case 4
Set portc.3
PORTb = w(4)
Reset portc.4
End Select
reset ledoff
Return