Zbudowałem układ prościutkiego analizatora - coś w rodzaju oscyloskopu na matrycy LED 8x8 (schemat w załączniku). Do procka załadowałem następujący program:
Kod: Zaznacz cały
$regfile = "m8def.dat"
$crystal = 8000000
Config Adc = Single , Prescaler = 16 , Reference = Avcc
Config Portb = Output
Portb = &B00000000
Config Portc = Input
portc=&B00001111
Config Portd = Output
Portd = &B11111111
S1 Alias Pinb.0
S2 Alias Pinb.1
S3 Alias Pinb.2
S4 Alias Pinb.3
Config Timer0 = Timer , Prescale = 64 'konfiguracja Timer0 do wyświetlania
On Timer0 Wyswietl 'wywołanie podprogramu "Wyświetl" po przepełnieniu Timer0
Enable Interrupts 'Uruchomienie systemu przerwań
Enable Timer0 'Uruchomienie Timer 0
Load Timer0 , 125
Dim X(8) As Byte
Dim Y(16) As Byte
Dim Licznik8 As Byte
Dim L8 As Byte
Dim A(8) As Integer
Dim K As Byte
Dim Opu As Byte
X(1) = &B11111110
X(2) = &B11111101
X(3) = &B11111011
X(4) = &B11110111
X(5) = &B11101111
X(6) = &B11011111
X(7) = &B10111111
X(8) = &B01111111
Y(1) = &B00000001
Y(2) = &B00000010
Y(3) = &B00000100
Y(4) = &B00001000
Y(5) = &B00010000
Y(6) = &B00100000
Y(7) = &B01000000
Y(8) = &B10000000
Y(9) = &B00000001
Y(10) = &B00000011
Y(11) = &B00000111
Y(12) = &B00001111
Y(13) = &B00011111
Y(14) = &B00111111
Y(15) = &B01111111
Y(16) = &B11111111
Licznik8 = 1
L8 = 1
Opu = 86
K = 0
Do
Incr L8
If L8 > 8 Then L8 = 1
Start Adc
A(l8) = Getadc(5)
Waitms Opu
Stop Adc
If S1 = 0 And Opu > 1 Then Opu = Opu -2
If S2 = 0 And Opu <= 255 Then Opu = Opu + 2
If S3 = 0 Then K = 8
If S4 = 0 Then K = 0
Loop
End
Wyswietl:
Load Timer0 , 125
Incr Licznik8
If Licznik8 > 8 Then Licznik8 = 1
Portd = X(licznik8)
Select Case A(licznik8)
Case 0 To 31 : Portb = &B00000000
Case 32 To 127 : Portb = Y(1 + K)
Case 128 To 255 : Portb = Y(2 + K)
Case 256 To 383 : Portb = Y(3 + K)
Case 384 To 511 : Portb = Y(4 + K)
Case 512 To 639 : Portb = Y(5 + K)
Case 640 To 767 : Portb = Y(6 + K)
Case 768 To 895 : Portb = Y(7 + K)
Case 896 To 1023 : Portb = Y(8 + K)
End Select
Return
1. S3 i S4 nie działają, ale S1, S2 tak.
2. Po pokręceniu potencjometru do połowy suwaka (ok. 2,3V), układ przełącza się w tryb BAR samoczynnie i nie wiem dlaczego?
Układ sprawdzałem po kilka razy, program także i nie widzę błędu. Może jednak coś źle zrobiłem?[/code]